Powershell 从Invoke命令重定向错误
我有一个脚本,可以管理数百个虚拟服务器上的任务,它在作业中运行Invoke命令,并将详细信息输出到网页 我的问题是调用命令scriptblock中抛出的错误未通过管道传输: 此命令正确地引导错误(无法连接到服务器)并以字符串形式输出:Powershell 从Invoke命令重定向错误,powershell,error-handling,pipeline,Powershell,Error Handling,Pipeline,我有一个脚本,可以管理数百个虚拟服务器上的任务,它在作业中运行Invoke命令,并将详细信息输出到网页 我的问题是调用命令scriptblock中抛出的错误未通过管道传输: 此命令正确地引导错误(无法连接到服务器)并以字符串形式输出: Invoke-Command [dead server] -ScriptBlock { Write-Error "Test" } *>&1 | Out-String Invoke-Command [live server] -ScriptBlock
Invoke-Command [dead server] -ScriptBlock { Write-Error "Test" } *>&1 | Out-String
Invoke-Command [live server] -ScriptBlock { Write-Error "Test" *>&1 | Out-String }
此命令似乎完全忽略了错误,根本不显示:
Invoke-Command [live server] -ScriptBlock { Write-Error "Test" } *>&1 | Out-String
此命令将错误正确地以字符串形式导出:
Invoke-Command [dead server] -ScriptBlock { Write-Error "Test" } *>&1 | Out-String
Invoke-Command [live server] -ScriptBlock { Write-Error "Test" *>&1 | Out-String }
使用第一个和第三个例子,我可以把所有的事情都说出来,但不是那么简单。我可能需要使用它来运行复杂的脚本,期望我重定向每一个命令以便发现错误是不合理的
我甚至找不到任何东西把它包起来,把所有的东西都排出来
实际上,函数可以工作,但它似乎是一个非常迂回的解决方案,因为似乎没有办法将scriptblock转换为函数,所以我必须将scriptblock放在Invoke命令中的Invoke命令中的函数中,这是在PSSession中的一个工作…GitHub上有一些代码,我相信它能满足您的需要 该守则是这样做的:
$testjob=Invoke命令-Session$sessions-ScriptBlock$test-AsJob-ArgumentList$ArgumentList |等待作业
如果您有时间,您应该能够重构它以满足您的需要。代码按原样将流作为对象的属性提供给您,但您应该能够将这些对象输送到您希望它们去的地方(您只需记住检查它们中的每一个即可)。这里的问题是什么?为什么你希望
*?&1
能给你带来任何有意义的结果呢?哎呀,那是个打字错误。问题是,我如何将所有由Invoke命令生成或从其中生成的错误通过管道传输到输出流?特别是在我的例子中,它是到Foreach-Object的管道。您可以在$Error
变量中找到所有错误…虽然不是问题的答案,但我可能可以使用$Error。。。幸运的是,这些脚本在遇到错误时都应该停止,并且它不包含在Invoke命令中处理或隐藏的错误…您的命令Invoke命令[live server]-ScriptBlock{Write error“Test”}*>&1 | Out String
对我来说工作正常。+1对于有趣的答案,但是,如果我正确地解释了这一点,它将等待作业以Wait job
完成,然后返回结果。稍后我将深入研究它,看看它是否真的做到了这一点,或者是否有办法调整它以实时输出。