我正在尝试将命令的输出捕获到Powershell中的输出变量中。该命令的输出为表格格式,这就是为什么我使用输出字符串的原因。现在,我需要取消显示错误消息,这就是为什么我使用错误变量来存储错误消息的原因。我尝试了以下操作,但都没有抑制我的错误,并且错误显示在屏幕上。
$output = $esxcli.network.firewall.ruleset.allowedip.list() | Out-String -ErrorVariable myErr
$output = $esxcli.network.firewall.ruleset.allowedip.list() -ErrorVariable myErr | Out-String
$output = $esxcli.network.firewall.ruleset.allowedip.list() | Out-String 2>&1
$output = $esxcli.network.firewall.ruleset.allowedip.list() 2>&1 | Out-String
有没有一种方法可以以一种简单的方式(没有像try-catch一样)使用Out-String来抑制错误?
答案 0 :(得分:3)
如果您的.list()
方法引发异常,则有两种选择:
将您的$ErrorActionPreference
变量设置为'SilentlyContinue'
或'Ignore'
$ErrorActionPreference = 'SilentlyContinue'
将您的方法调用包装在try / catch块中
try
{
$output = $esxcli.network.firewall.ruleset.allowedip.list() | Out-String
}
catch
{
"Error thrown! $PSItem"
}
请注意,如果您的方法调用引发了终止错误,那么您没有解决方法。
答案 1 :(得分:2)
为您对-ErrrorVariable
的原始问题添加更多详细信息。 -ErrorVariable
是一个common parameter,您在将CmdletBinding属性添加到函数的开头时会默认获得它。
.list()
是一个.Net方法,不是PowerShell函数,因此-ErrorVariable
不能使用它。但是,如果您想大量使用.Net方法,并且希望利用该方法利用某些PowerShell的出色功能,则可以编写一个将.Net方法包装在小型PowerShell函数中的简短函数。
示例:
function Get-ESXAllowedIPList {
[CmdletBinding()]
param($esxcli)
return $esxcli.network.firewall.ruleset.allowedip.list()
}
然后您可以像这样使用它:
Get-ESXAllowedIPList -ErrorAction SilentlyContinue -ErrorVariable ESXAllowedIPListErrors | Out-String