在Powershell中使用Out-String时可以使用-ErrorVariable吗?

时间:2018-08-13 22:43:38

标签: powershell error-handling

我正在尝试将命令的输出捕获到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来抑制错误?

2 个答案:

答案 0 :(得分:3)

如果您的.list()方法引发异常,则有两种选择:

  1. 将您的$ErrorActionPreference变量设置为'SilentlyContinue''Ignore'

    $ErrorActionPreference = 'SilentlyContinue'
    
  2. 将您的方法调用包装在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