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 行)。

于 2013-02-06T05:51:35.310 回答