Powershell 从Invoke命令检索产生错误的计算机名
我正在加快脚本的执行速度,长话短说,它的核心看起来与此类似(减去Powershell 从Invoke命令检索产生错误的计算机名,powershell,Powershell,我正在加快脚本的执行速度,长话短说,它的核心看起来与此类似(减去Measure命令): 我想弄清楚的是,如果其中一个设备出现错误,我想将该设备名称存储在一个单独的文件中。在过去,我通过try/catch的foreach循环来完成所有这一过程,这使得这一部分非常简单。我希望通过这个解决方案避免这种情况。 现在,我使用的是post提供的2>“errors.txt”,但这记录了完整的错误,我不想这样。例如: [示例设备]连接到远程服务器示例设备失败,错误消息如下:WinRM无法处理 要求使用Kerbe
Measure命令
):
我想弄清楚的是,如果其中一个设备出现错误,我想将该设备名称存储在一个单独的文件中。在过去,我通过try/catch
的foreach
循环来完成所有这一过程,这使得这一部分非常简单。我希望通过这个解决方案避免这种情况。
现在,我使用的是post提供的2>“errors.txt”
,但这记录了完整的错误,我不想这样。例如:
[示例设备]连接到远程服务器示例设备失败,错误消息如下:WinRM无法处理
要求使用Kerberos身份验证时发生以下错误:找不到计算机示例设备。核实
计算机存在于网络上,并且提供的名称拼写正确。有关更多信息,请参阅
关于远程故障排除帮助主题。
+CategoryInfo:OpenError:(示例设备:String)[],PSRemotingTransportException
+FullyQualifiedErrorId:NetworkPathNotFound,PSSessionStateBreaked
我只希望在文件中记录设备的名称(在本例中为“示例设备”)。有办法做到这一点吗?一种处理方法是设置
-ErrorActions-SilentlyContinue-ErrorVariable Errs
这使程序能够正常运行,而不会在整个屏幕上出现红色错误。然后,您可以查看存储在$Errs
中的错误记录,以报告哪些机器出现问题。在您的情况下,$Errs.tagTargetObject
演示可能类似于
Invoke-Command -ComputerName $Computers -ScriptBlock { "Whatever..." } -ErrorAction SilentlyContinue -ErrorVariable Errs
# PostOp Check which machines had errors:
$Errs.TargetObject
这应返回:
MrBogus
MrsBogus
当然,如果您想更可靠地格式化错误记录,可以对错误记录进行任意处理。处理的一种方法是设置
-ErrorActions-SilentlyContinue-ErrorVariable Errs
这使程序能够正常运行,而不会在整个屏幕上出现红色错误。然后,您可以查看存储在$Errs
中的错误记录,以报告哪些机器出现问题。在您的情况下,$Errs.tagTargetObject
演示可能类似于
Invoke-Command -ComputerName $Computers -ScriptBlock { "Whatever..." } -ErrorAction SilentlyContinue -ErrorVariable Errs
# PostOp Check which machines had errors:
$Errs.TargetObject
这应返回:
MrBogus
MrsBogus
当然,如果您想更可靠地格式化错误记录,可以对错误记录进行任意处理。您是否尝试过使用
-AsJob
启动此功能?然后,每个块将分别提供其输出,您将能够在该输出中仅包含相关内容。您是否尝试使用-AsJob
启动此功能?然后,每个块将分别提供其输出,然后您将能够在该输出中仅包含相关的内容。非常有用,谢谢!很有魅力,谢谢!