Parallel †
ForEach?-Object -Parallel †
- ForEach?-Object -Parallelを利用するにはPowerShell 7 Preview.3以降の環境が必要
Job †
Start-Job †
Get-Job †
Receive-Job †
同時実行数制御 †
Process †
Start-Process
-FilePath [実行ファイルのパス]
-ArgumentList [引数リスト]
-NoNewWindow
-Wait
-WorkingDirectory [プロセスの開始フォルダ]
-Verb [動詞] ※Windowsでのみ機能
Verbパラメタ †
- Verbパラメータについてもっと知りたい
- .exe
- Open(開く)
- RunAs?(管理者権限で実行)
- RunAsUser?(別のユーザとして実行)
- .cmd
- Edit(編集)
- Open(開く)
- Print(印刷)
- RunAs?(管理者権限で実行)
- RunAsUser?(別のユーザとして実行)
- .txt
パターン1(プロセス名で指定) †
-Name <プロセス名>
-Timeout <タイムアウト時間>
パターン2(プロセスIDで指定) †
-Id <プロセスID>
-Timeout <タイムアウト時間>
パターン3(オブジェクトで指定) †
-Timeout <タイムアウト時間>
-InputObject <プロセスオブジェクト>
パターン3(オブジェクトで指定) †
[-InputObject] <Process[]>
[-PassThru]
[-Force]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
テストプログラム †
# プロセスオブジェクトを格納
$processList = New-Object System.Collections.Generic.List[System.Diagnostics.Process]
# メモ帳を3つ起動
for ($i=0; $i -lt 3; $i++) {
$obj = Start-Process -FilePath notepad -PassThru
$processList.Add($obj)
}
# メモ帳3つが終了するのを待つ(タイムアウト 30秒)
#
# ※メモ帳は手動で停止
# ※タイムアウトが発生した場合は強制終了
#
try {
Wait-Process -InputObject $processList -Timeout 30
}
catch {
# タイムアウトしてもここには来ないので、下記は実行されない
Stop-Process -InputObject $processList -Force
}
finally {
# 終了していないプロセスを強制終了
Stop-Process -InputObject $processList -Force
# プロセスが終了したことを確認
Get-Process -InputObject $processList
}
Workflow †
その他 †