在 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
自动变量添加错误。
我有一个脚本可以从计算机列表中检索某些事件日志条目。我在带有 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
自动变量添加错误。