在 Powershell 中测试远程处理?

Testing for Remoting in Powershell?

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

if (!(Test-WSMan MyComputer))

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

我也尝试将它包装在 Try...Catch 中,但没有捕获到错误。

有没有办法从脚本中检查计算机是否有远程处理可用?

注意:我在 运行 安装了 PowerShell 的所有地方都是 PowerShell 4.0。

您可以使用这个功能:

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

如果您只想抑制错误消息,那么 -ErrorAction SilentlyContinue 应该足够了:

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

或者你可以使用-ErrorAction Ignore,如果你不想给$Error自动变量添加错误。