【最強CUI】PowerShell -Part 2 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
>>178
セル内改行やらシングルクォーテーションやらを除いて何たらのくだりがよく分からないのですが
とにかくbatファイルからPowerShellを呼び出して改行コードを消すのはできましたよ
batファイルだとコマンド内のダブルクォーテーションをエスケープするのが面倒だし、>>179が言われるように
PS1ファイルにコマンドを書いて、それを呼び出すのが一番良いと思います
REM 改行コードあり
start cmd /k powershell -command "$a=\"hoge`nfuga\";$a"
REM 改行コード削除
start cmd /k powershell -command "$a=\"hoge`nfuga\";$a.replace(\"`n\", \"\")" >>179-180
別の言語環境からPowershellを実行しようと考えていました。
PS1を呼び出そうとしても管理者権限がなく、
客先なので権限的に難しいです;
コードは試してみてうまくいきました。
ありがとうございました。 管理者権限は要らなくないか
ExecutionPolicyじゃないの? `nを取り除くだけならコマンドプロンプトだけでできる
>set a="hoge`nfuga"
>echo %a%
"hoge`nfuga"
>echo %a:`n=%
"hogefuga" >>182-183
客先でget-executionpolicyを実行した結果、restictedでした。
変更しようとしたらアクセス拒否されました(客先なので管理者権限無し)。
なおVersionは2.0です;
Excelのセル内改行を処理することが目的でした。
コマンドプロンプトだとExcelを開いてその中身を操作することはできないはず
(できるとしたら、方法知らないです)。 >>186
タイミング悪くて試すの来週になりそうです; >>186が完璧すぎてコレで解決すると思いますが、あえて、あえて欠点を言うならば
batファイルとps1ファイルの2つを管理することになることです、、そこでbatファイルだけで済ませてみようのコーナー!
rem --------------------------------------------------------------------------------
rem ダブルクォート内のダブルクォートは\でエスケープ
rem アンパサンド、パイプ、括弧などの特殊文字は^(キャレット)でエスケープ
rem %(ForEach-Object)は%%
rem --------------------------------------------------------------------------------
set cmd=^
$a=\"hoge`nfuga\";$a.replace(\"`n\", \"\");^
gsv ^| ?{$_.status -eq \"stopped\"} ^| select-object -first 5 ^| %%{$_.displayname}
start cmd /k powershell -command "%cmd%"
いかがでしょうか、エスケープまみれで若干見難くメンテナンス性に欠けてる雰囲気を醸し出していながら
あら?案外PowerShellのコマンド呼び出せるじゃん?結構複雑な処理もできるじゃん?という可能性を感じて頂けると思います JScriptをバッチで書こうってのと同じ発想だね
ちょっと面白かったけど結局使わなくなったな、やっぱメンテナンス性が悪い https://ja.stackoverflow.com/questions/28565
これと同じ状況に直面して困っているのですが解決法って無いですかね?
バッググラウンドで処理したいのですが >>186
方法2が実行できることを確認しました。
知らなかったので、感謝です。 >>186
横からだけど俺も知らなかった
参考になったわ、ありがと Microsoft、「PowerShell」のロードマップを公開 〜クロスプラットフォーム版へ一本化 - 窓の杜
http://forest.watch.impress.co.jp/docs/news/1071229.html >>194
ソースを一本化するって話だろ
メンテ工数考えたらあたり前だわな スマホ開発の選択肢にPowershellが入るのはいいね 「将来のリリースでは削除予定(中略)
削除
Outlook Express
ペイント
非推奨
IIS用のRSA/AES暗号化
Windows PowerShell 2.0
ペイントが削除されることは大きな話題となり、これを受けて
MicrosoftはペイントをWindowsストアで提供する計画を明らかにした」
Windows 10 Fall Creators Updateで削除される機能が公表される。
ペイントは「非推奨」となりWindowsストアで提供 | スラド IT
https://it.srad.jp/story/17/07/26/056231/
2017年07月26日 14時42分 これを期にペイントも変えるか
Paint.netがクセ少なくてよかった気が >>200
毎日使ってる。
メモ帳は F5で日時入れて日記
あと、書式を削除して文字列をコピペするときに中継につかう。
ペイントは保存だけだけどキャプチャしたサイズで保存できるから便利だった。 >>202
> 書式を削除して文字列をコピペするときに中継につかう。
これは俺もよく使ったな
2007 辺りから Office でテキストだけの貼り付けができるようになったのでだいぶ出番は少なくなったけど >>202
オレ書式消す時にはwebブラウザの検索欄使ってるわ。
メモ帳起動するのも面倒くさい。 PSのスレとしてはこれを使いやすいとこに置いとくとかが正解では
v5.0以降じゃないと動かないけど
(Get-Clipboard)|Set-Clipboard >>206
逆に言えば、ブラウザ検索窓で済むくらい、一行が多いって事じゃね? >>207
>>204はそうなんだろうな
でも>>202とか俺(>>203)は違うってだけの話 あまり仕様を理解してないせいかもしれませんが,オブジェクトのプロパティに最後のひと押しをしたい時に,よい書き方が分かりません。教えてください。
例えば chrome の プライベートメモリサイズの合計を調べたいとします
>>> gps chrome | Measure-Object PM -sum
ここまでは良いのですけど。 さらに総和を 1mb で割りたいとします。
果たしてもう一度パイプを通すべきなのでしょうか。
>>> gps chrome | Measure-Object PM -sum | % {$_.sum/1MB}
この「パイプを通して foreach……」というのが,方法としておかしい気がするんです。
ただの考え過ぎかもしれませんが,似たようなケースで多々も同じ方法を使っていて……いつも不安になってます。
どなたかご教授いただければ幸いです。 >>209
>この「パイプを通して foreach……」というのが,方法としておかしい気がするんです。
なぜおかしいと思うの? >>209
自分もおかしくないと思うけど、パイプ使いたくないならこうすれば?
(gps chrome | Measure-Object PM -sum).sum / 1mb >>210
一個しかデータが無いのが分かってるのにforeachってところじゃ無い? そこまでおかしくないということでしたら安心しました。
おかしいかというよりかは PowerShell においてこれが自然な方法かどうかが気になっていました。
プロパティを調べるにはただ obj.sum と書くのが自然な気がしたからです。そのために別の手続きを幾つか経過させるべきなのか迷っていました。
その意味では >>211 さんの方法がより良い気がします。
PowerShell では,代入文などを使って素朴に書いたほうが綺麗にできているのかもしれません。
自然だとか綺麗だとかは個人的な美学の問題ですし,PowerShell が出始めたころに出し尽くした議論だとは思いますけど……。
どうもありがとうございました! >>213
211の方法でも、さらに加工しようとするとややこしくなる
例えば文字列でMBを加えて出力しようとすると
Write-Host "$((gps chrome | Measure-Object PM -sum).sum / 1mb)MB"
これよりはパイプだけの方が見やすいと思う
gps chrome | Measure-Object PM -sum | %{$_.sum/1MB} | %{"$($_)MB"} | Write-Host
まあ変数使えよって話かもしれないけどw >>214
好みだろうけど俺は上の方がわかりやすいと感じる 俺は下の方が読みやすいな。
左から順に読み下せるってのが、パイプの性質に合ってる気がする。
まあ、好みかもな。 >>213
obj.sum的なことは$_.sumでやってるじゃん
1つの要素をForeachで回すのに違和感があるのかな?
Foreachで回す時にいちいち要素数なんか考慮しないよ、要素なんてゼロの時もあるし1の時もあるし複数ある時もあるわけだし
要素が1つの時は、(hogehoge).sum と書いて、要素が2つ以上ある時は、hogehoge | %{$_.sum} と書き分ける方がおかしい
よって、これは好みの問題ではなく正解は>>214でいうところの下の書き方が正解
好みとか美学とかなんたらいう前にPowershellの流儀に従うべき、上の書き方はありえないよ、ありえない Measure-Object が複数の結果を返すなんてあり得るのか? たとえばカレントディレクトリににa.txtとb.jpg、c.jpgの3ファイルがあったとして
$txt = ls *.txt
と
$jpg = ls *.jpg
の型が違うのは気持ち悪い気はする
$txt.Countとか$txt[0]とやったり、逆に$jpg.Nameとかもできるんだけど
$jpg += $txtだとちゃんと追加される一方で、$txt += $jpgだとエラーになる 好みや流儀より、単純にパイプの方がメンテナンス性が優れてるよ
>>214は実際やってみると小数点以下の羅列の後に"MB"が付いて見苦しくなる
でもパイプなら一部の修正だけですむ
%{"$($_)MB"} を %{"{0:.00}MB" -f $_} とか、
四捨五入して %{[math]::Floor($_+0.5)} | %{"$($_)MB"} とか
214の上でこれやろうとするとカッコばかりで暗号のようになる >>220
それはまたちょっと違う問題だね
その場合はこうやって強制的に配列にしろと教えられたよ
$txt = @(ls *.txt) パイプの方がPowerShellらしいコードだと思う >>223
俺もそう思う
とにかくパイプで処理を繋げていくのがPowerShell流 >>222
配列かスカラーか返される物が状況によって変わる気持ち悪さは昔からあちこちで散々言われてるね >>221
暗号ねぇ w
Write-Host ("{0:0.00}MB" -f (gps chrome | Measure-Object PM -sum).sum / 1mb))
ちなみに書式変換時は元々四捨五入なのでFloorとかは要らんよ >>225
配列を便利に扱えるようにしてるのはわかるけどちょっとやり過ぎかな
-eq 演算子なんてトラップ以外の何者でもないだろ
あと全然関係ないけど -isnull 演算子が欲しい >>226
[int]だけで四捨五入になるのは知ってるけど、分かりやすくした
暗号は言い過ぎたかもしれんが、そんなん書くより一度変数に入れたくならんか?w >>226
つか、カッコ一つ足らないw
あんた自身混乱してるわ >>228
> そんなん書くより一度変数に入れたくならんか?w
この程度でなるか?
って話
程度は人によって違うからまあ好きにしなよ
>>229
スマホから書き込んでるから細かいところは目を瞑ってくれ 課長 「SumをMBで出してくれ」
A君 "{0:0.00}MB" -f ((gps chrome | Measure-Object PM -sum).sum / 1mb)
B君 gps chrome | Measure-Object PM -sum | %{[String]::format("{0:0.00}MB", $_.sum/1mb)}
課長 「すばらしい! じゃあついでにMax値とMin値もMBで出してちょうだい」
A君 「ぐぬぬ・・・」
B君 gps chrome | Measure-Object PM -sum -Maximum -Minimum | %{[String]::format("Sum: {0:0.00}MB`nMax: {1:0.00}MB`nMin: {2:0.00}MB", ($_.sum, $_.maximum, $_.minimum | %{$_/1mb}) )}
明美 「きゃーB君ステキ ブッチュー」 C君 gps chrome | Measure-Object PM -sum -Maximum -Minimum | %{$_.sum, $_.maximum, $_.minimum | %{$_/1mb}} | %{"{0:0.00}MB" -f $_}
明美 「キャー 抱いてぇー」 自分ならこうするかな
一行で書かなきゃいけないルールでもあるのか、その会社は
gps vivaldi | Measure-Object PM -sum -Maximum -Minimum| %{
foreach($i in 'Sum','Maximum','Minimum'){
"{0}: {1:0.00}MB" -f $i.Substring(0,3),($_.$i/1mb)
}
} 多少は実用的なやつを。サブスレッドも合計してメモリ食ってるアプリのトップ3
Get-Process|Group Name|%{$_|Add-Member Length ($_.group|measure PM -Sum|%{$_.sum}) -PassThru}|
sort length -Descending|select -First 3|%{'{0}: {1:#,0.}MB'-f $_.name,($_.length/1mb)} 初心者ですが質問です
ISEでデバックした時とスクリプトで実行した時で
GUI?の見た目が違うのですが(スクリプト実行だとGUIが古い感じ)
デバックしてる時と同じGUIにするにはどうすれば良いのでしょうか? 「マイクロソフト社製の基本ソフトを使うパソコン
に搭載されたシステム管理機能パワーシェル(PS)を操る(中略)
ファイルレス攻撃は、実行形式でないLNKなど別の拡張子のファイルが添付されている。
ウイルスの本体ではないため、単体では情報収集などの目的を果たせないが、
PSに命令する不正プログラムが含まれている(中略)
ウイルスを勝手にダウンロード(中略)
自分の存在を隠す」
「ファイルレス」見えないサイバー攻撃急増 政府・金融機関など標的(1/3ページ) - 産経ニュース
http://www.sankei.com/affairs/news/170820/afr1708200002-n1.html
2017.8.20 06:38 >>237
スクリプトで実行って関連付けで実行ってこと?
ISEとはUIが別ものだと思うけど >>237
ISEに関連付けするってことかな
おもすぎるしやったことないけど >>240
レスありがとうございます
https://letspowershell.blogspot.jp/2015/07/powershell_9.html
こちらのブログで質問させて頂きまして無事解決しました
[System.Windows.Forms.Application]::EnableVisualStyles();
を追加して無事デバッグと同じフォームになりました 質問です
set-location でパスを入力する時、日本語が含まれていると文字化けしてしまい
「Set-Location : パス 'C:\Users\nashi\Desktop\SHO\PDF 繧「繝励Μ' が存在しないため検出できません。」
と言われてしまいます。
バッチファイル?からではなく、powershellに直接入力した時は起こらないのですが
どうしても回避する方法がわかりません。
どなたか分からないでしょうか。 画面のスナップショットをF9キー辺りに割り当てて、
キーを押す度に連番ファイルとして保存したいんだけど
powershellで簡単にできたりする? ps1ファイルの関連付けとか弄らずに、ダブルクリックで実行させたい場合って
wscriptのrunとかから呼ぶのが一般的ですか?(ファイルが2つになってしまう感じですか?) >>249
コンソール窓が一瞬出るのが嫌なのでwscriptから呼んでます >>248
ExecutionPolicyも指定してラップできるから便利だね
ShellExecuteでrunas指定すれば管理権限で実行もできるし powershell.exeショートカットにオプション直書きで十分 PSをダブルクリックで実行できれば便利だが
つねにそれが良いとは限らない
書きかけのバッチをうっかり実行して
データやマシンがおかしくなる場合もありえる >>253
そんなレベルの人は他のことをしていてください。 だいたい間違って実行してしまわないようにクリックで実行できないようになっているというのに。 batもWSHもできるのにps1だけ対応しない理由はなんだろね
ポリシーなんてどうとでもなるのに >>252
ショートカットって記述的じゃないから嫌なんだよね
ショートカット作っても2ファイルだし、
それなら初めからwscriptから起動するよ 記述的じゃないってのはちと違うか。
テキストベースで完結しないって意味ね >>254
いろんな事態を想定できない方がレベルが低いよ
>>256
普通のプログラミング言語のソースは
直接実行できないでしょ
>>257
記述的というならコマンドラインは記述的で良い 今のところ右クリック→実行してもらうのが安全性からも利便性からもバランスが良い Powershellのスクリプトは部品だからどっかから呼ぶのでいいんだよ
単体起動するようなもんじゃないね >>259
たぶん、右クリックで表示される「Powershellで実行」という項目を見ないで
電話してくれるユーザーへの対応の話だと思う
ダブルクリックしたらなんか開いたふざけんな、実行しない、バグだ、と内線で…… とりあえず関数切ったら引数に , つけるのか付けないのかは統一してほしい気分……
たまに間違う(function定義のほうだと , いるやん)
まぁbashとかでも似たようなもんで、俺の練度の問題かも知らんが ダブルクリックだけで実行されて、システムが故障したら、
損害賠償しなければならない
そもそも、ダブルクリックだけで、スクリプトが実行されたら、
極めて危険だから、納品の基準を満たしていないし、損害賠償が確実 実行して危険なモノならpsじゃなくても確認手段ぐらいその中に入れとくでしょ
前提がおかしいと思う クリックで誤って実行してしまう点がよくないとマイクロソフトも思ったからクリックで実行できないようにさてるんだけどな。 負荷テストのために下記コードを書いて見ましたがこれって音は全部鳴ってるのかな?
# 下記サイトより効果音をお借りしました。
# http://maoudamashii.jokersounds.com/archives/se_maoudamashii_explosion06.html
# d:\indexフォルダは好きなように変更してください。
$loopcont = 128
$list = New-Object 'System.Collections.Generic.List[System.Media.SoundPlayer]'
for ($i=0; $i -lt $loopcont; $i++){
$a = New-Object Media.SoundPlayer("d:\Index\se_maoudamashii_explosion06.wav")
$list.Add($a)
#$list[$i] = New-Object Media.SoundPlayer("d:\Index\se_maoudamashii_explosion06.wav")
Write-Output "サウンド $i を追加しました。"
}
for ($i=0; $i -lt $loopcont; $i++){
$list[$i].PlayLooping()
Write-Output "サウンド $i を再生しました。"
Start-Sleep -m 10
}
Start-Sleep -s 15
for ($i=0; $i -lt $loopcont; $i++){
$list[$i].Stop()
Write-Output "サウンド $i を停止しました。"
}
Start-Sleep -s 5 初心者ですが教えてください
WIN32APIの GetFileInformationByHandle をPSから呼ぶにはどうしたら良いですか
やりたいことはハードリンクを考慮したディスク使用量計算です powershellでお手軽にwebapi実装するツールって無いか?
C# AspNet WebApiで作るほどの物じゃない
短期間の使い捨てのちょっとしたローカルサービス
リクエスト受けたらurlにマッピングされたps1ファイルを実行するとかで十分なんだけど >>275
ASP.NET Coreならめちゃめちゃお手軽だと思うけど Windows 10 Fall Creators Update になってから
$PSHOMEのpowershell.exe.configの編集ができないみたいだがどうすりゃいいの powershell.exe.configの所有がTrustedInstallerだから管理者でも編集できない
なんでそんなことになった ■ このスレッドは過去ログ倉庫に格納されています