LoginSignup
2
4

More than 3 years have passed since last update.

PowerShell スクリプト作成Tips

Posted at

個人向けに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>
2
4
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4