在Powershell中测试远程处理?

时间:2015-11-17 11:54:34

标签: powershell remoting powershell-remoting

我有一个脚本可以从计算机列表中检索某些事件日志条目。我在使用Get-EventLog -Computername $ c ...的计算机列表上使用foreach循环来获取事件。我使用Test-Connection MyComputer -Quiet来确保每台计算机都启动。如果启用远程处理,我无法弄清楚如何以编程方式进行测试。我试过了

if(!(Test-WSMan MyComputer))

仍然会尝试连接到Remoting以测试是否已启用远程处理时出错。看起来像Catch-22。您只能通过连接到Remoting来测试是否启用了远程处理,如果未启用远程处理则会出现错误。

我也尝试将它包装在Try ... Catch中,但是没有发现错误。

有没有办法在脚本中检查计算机是否有Remoting可用?

注意:我在安装PowerShell的任何地方都运行PowerShell 4.0。

2 个答案:

答案 0 :(得分:1)

您可以使用此功能:

Function Test-PSRemoting
{
Param($Computer)

$ErrorActionPreference = "Stop"
    Try 
    {
        if ((Invoke-Command -ComputerName $Computer -ScriptBlock {1}) -eq "1")
        {
        return $true
        }

            else
            {
            return $false
            }
    }

    Catch
    {
    return $false
    }

}

像这样使用:

Test-PSRemoting ComputerName
True

答案 1 :(得分:0)

如果您只想要取消错误消息,那么-ErrorAction SilentlyContinue就足够了:

if (!(Test-WSMan MyComputer -ErrorAction SilentlyContinue))

如果您不想将错误添加到-ErrorAction Ignore自动变量,则可以使用$Error