Parallel

PowerShell 6以前

PowerShell 7以降

ForEach?-Object -Parallel

Job

Start-Job

Get-Job

Receive-Job

ThreadJob

同時実行数制御

SplitPipeline

Process

Start-Process

Start-Process 
    -FilePath [実行ファイルのパス] 
    -ArgumentList [引数リスト] 
    -NoNewWindow 
    -Wait
    -WorkingDirectory [プロセスの開始フォルダ]
    -Verb [動詞]  ※Windowsでのみ機能

Verbパラメタ

Wait-Process

パターン1(プロセス名で指定)

-Name <プロセス名>
-Timeout <タイムアウト時間>

パターン2(プロセスIDで指定)

-Id <プロセスID>
-Timeout <タイムアウト時間>

パターン3(オブジェクトで指定)

-Timeout <タイムアウト時間>
-InputObject <プロセスオブジェクト>

Stop-Process

パターン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

その他


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS