如何忽略Powershell中的错误并使错误继续?


42

我正在尝试查看某个进程是否在多个服务器上运行,然后将其格式化为表格。

get-process -ComputerName server1,server2,server3 -name explorer | Select-Object processname,machinename

多数民众赞成在最简单的部分-当进程不存在或服务器不可用时,PowerShell会输出一个难看的错误,将表弄乱,并且无法继续。例

Get-Process : Couldn't connect to remote machine.At line:1 char:12 + get-process <<<<  -ComputerName server1,server2,server3 -name explorer | format-table processname,machinename
+ CategoryInfo          : NotSpecified: (:) [Get-Process], InvalidOperatio   nException    + FullyQualifiedErrorId : System.InvalidOperationException,Microsoft.Power   Shell.Commands.GetProcessCommand

我该如何解决?如果我仍然想收到通知,则该进程不可用或正在运行。

Answers:


46

添加-ErrorAction SilentlyContinue到您的命令。

如果不是错误,而是未处理的异常,则应添加-EV Err -EA SilentlyContinue,以捕获异常。(EA是的别名ErrorAction

然后,您可以通过查看以下内容来评估脚本中的错误: $Err[0]


除非将其粘贴在错误的位置,否则这将无法正常工作。get-process-计算机名server1,server2,server3 -name资源管理器-ErrorAction SilentlyContinue | 选择对象进程名,机器名
Jake

将其添加到上面get-process或查看我更新后的答案。
Bart De Vos

13

简短的答案:$ErrorActionPreference = 'SilentlyContinue'在代码的开头 添加,因此您无需添加-ErrorAction SilentlyContinue到每个命令

长答案: https : //www.gitbook.com/book/devopscollective/the-big-book-of-powershell-error-handling/details


1
请注意不同之处:“继续”(默认设置)会继续执行,但是会向控制台写入错误(如果我没有看错的话,该op似乎想摆脱它)。“ SilentlyContinue”完全消除了所有错误消息。
FrederikStruck-Schøning'16


“在代码的开头添加$ ErrorActionPreference ='SilentlyContinue'” --->这确实有所帮助,非常感谢您的帮助,并使其在Internet上可用。
Nishant
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.