個人向けにPowerShellスクリプト書く時のノウハウをまとめておく。
いかんせん突貫で作っているところで、細かい指摘が頂けるととてもうれしい。
随時アップデート予定
引数を渡す
$Args[0]
[]内は一つ目の引数を0と数えて指定する。
test.ps1
Write-Host $Args[0]
Write-Host $Args[1]
実行例
PS C:\work>.\test.ps1 hoge huga
hoge
fuga
指定回数ループする
いろんなやり方はあるので、これは一例。
とある回数に達するまでループする方法。
以下のスクリプトは、1秒間のsleepと "<ループ回数> times."のメッセージ出力を10回繰り返す抜ける処理。
loop.ps1
$exec_run_count = 10
$run_count = 1
do{
Start-Sleep 1
write-host $run_count times.
$run_count++
}while($run_count -ne $exec_run_count)
exit
#日付 時間(yyyy/mm/dd HH:mm)を変数に入れる
$v_DATE = (Get-Date -Format "yyyy/MM/dd HH:mm")
実行例
PS C:\work> $v_DATE = (Get-Date -Format "yyyy/MM/dd HH:mm")
PS C:\work> Write-Host $v_DATE
2019/11/25 23:25
#キー入力を受け付けるまで待機する(バッチでいうpause)
reply.ps1
Write-Host "終了するには何かキーを押してください..."
$host.UI.RawUI.ReadKey()
Write-Host "終了します"
実行例(キー「a」を入力)
PS C:\work> powershell .\reply.ps1
終了するには何かキーを押してください...
a
終了します
VirtualKeyCode Character ControlKeyState KeyDown
-------------- --------- --------------- -------
65 a 0 True
PS C:\work>
#コマンドの件数取得 ().Count
便利で驚いたのがこれ。コマンドの出力結果をヘッダなしで件数を取得してくれる。
例えばget-jobはこの結果だが、"State”が"Completed"のジョブを表示する、get-job -state Completed
コマンドの表示件数を取得し、変数に入れることが出来る。
PS C:\kana\dev> get-job
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
1 Job1 BackgroundJob Completed True localhost $CMDLINE
3 Job3 BackgroundJob Completed True localhost $CMDLINE
5 Job5 BackgroundJob Completed True localhost $CMDLINE
7 Job7 BackgroundJob Completed True localhost $CMDLINE
9 Job9 BackgroundJob Completed True localhost $CMDLINE
11 Job11 BackgroundJob Completed True localhost $CMDLINE
13 Job13 BackgroundJob Completed True localhost param($CMDLINE) $CMDL...
15 Job15 BackgroundJob Completed True localhost param($CMDLINE) $CMDLINE
17 Job17 BackgroundJob Completed True localhost param($CMDLINE) "$CMDL...
19 Job19 BackgroundJob Completed True localhost param($p) "`$p is $p"
PS C:\kana\dev>
PS C:\kana\dev> $exec_run_count = (get-job -State Completed).count
PS C:\kana\dev> Write-Host $exec_run_count
10
PS C:\kana\dev>