测试连接和变量


$server = "SOME_SERVER"
$target = "8.8.8.8"
Invoke-Command -ComputerName $server -ScriptBlock { Test-Connection -ComputerName $target }

所以我有这段代码,它给我抛出了一个错误

无法验证参数"计算机名"上的参数。参数是 空或空。提供一个不为 null 或为空的参数,然后 请重试该命令。

奇怪的是,如果我在最后一行将$target更改为8.8.8.8,一切都很好。

有人可以向我解释一下吗?我已经为此苦苦挣扎了一个小时,并在互联网上搜索寻找答案,但没有找到任何解决方案。这是PowerShell中的某种错误吗?

顺便说一句 - 如果我调用$target,它给了我8.8.8.8,类型是字符串,所以......

局部变量在远程连接中不可用。

您需要将其作为参数传递:

... -ArgumentList $target -ScriptBlock { param($target) ...

或利用$using范围:

... Test-Connection -ComputerName $using:target ...

Invoke-Command不会将局部变量传递给目标系统。$server没有定义$target,因此Test-Connection命令将自$target -eq $null以来失败,如错误所述。若要解决此问题,可以使用-ArgumentList参数向远程服务器传递参数。例如:

Invoke-Command -ComputerName $server -ScriptBlock { Test-Connection -ComputerName $args[0] } -ArgumentList $target

我会使用结构化的方法:

$source = 'myserver'
$destination = '8.8.8.8'
Invoke-Command -ComputerName $source -Credential (Get-Credential) -ScriptBlock {
param(
[Parameter()]
[string]$destination
)    
Test-Connection $destination
} -ArgumentList $destination

如果当前用户缺少所需的权限,则-Credential参数很有用。

相关内容

  • 没有找到相关文章

最新更新