1

マルチスレッドを使用してpowershellでいくつかのコードを実行する必要があります。単純なスニペットをテストしましたが、powershellコンソールで正常に動作します。ただし、cmd.exe で実行しようとすると、コードが実行されず、何が起こっているのか疑問に思ってエラーがスローされませんでしたか? あなたがこれを手伝ってくれる人なら。

以下のサンプルコード

$throttleLimit = 10

$iss = [system.management.automation.runspaces.initialsessionstate]::CreateDefault()
$Pool = [runspacefactory]::CreateRunspacePool(1, $throttleLimit, $iss, $Host)
$Pool.Open()

$ScriptBlock = {
param($id)
Start-Sleep -Seconds 2
Write-Host "Done processing ID $id"
[System.Console]::WriteLine("Done processing ID $id")
}

for ($x = 1; $x -le 40; $x++) {
$powershell = [powershell]::Create().AddScript($ScriptBlock).AddArgument($x)
$powershell.RunspacePool = $Pool
$handle = $powershell.BeginInvoke()
}

私のバッチファイルコードは次のとおりです

powershell -Command .\multiT.ps1 2>&1
4

1 に答える 1

1

ISE では、スレッドからの出力が表示される前にスクリプトが終了します。コードの最後に追加 start-sleep -sec 10 すると、cmd から出力が得られます。ただし、何らかの理由で出力が 2 倍になります (例として、スレッドごとに 2 行を取得します)。

于 2013-02-06T05:51:35.310 に答える