【发布时间】:2020-07-27 16:55:40
【问题描述】:
我正在尝试使用 Read-Host -Prompt 填写多个服务器名称和用户帐户名称,然后将它们传递给 invoke-command 以完成任务 - 即让某人成为本地管理员。 我无法弄清楚为什么 PowerShell 会抛出这个错误: “一个或多个计算机名称无效。如果您尝试传递 URI,请使用 -ConnectionUri 参数,或传递 URI 对象而不是字符串。”。
另外,我也得到了错误:
"Add-LocalGroupMember : 对象引用未设置为 对象。”
下面的代码示例:
if ($OptPrompt -eq 1) {
$prompt1 = Read-Host -Prompt 'Test Accounts'
$prompt1.Split(",")
$prompt1_1 = Read-Host -Prompt 'Test Servers'
$prompt1_1.Split(",")
Invoke-Command -ComputerName $prompt1_1 -ScriptBlock {Add-LocalGroupMember -Group 'Administrators' -Member $Using:prompt1}
}
更多信息:
服务器在线
服务器中有“-”,例如“Server-22-test”
服务器正在响应 ping(主机名和 IP 地址)
在自己的作品中使用 Invoke-Command,但不在函数内部
没有防火墙或安全措施阻止相关帐户
感谢您的帮助。
【问题讨论】:
-
$prompt1_1.Split(",")不会更新$prompt1_1。它只输出拆分方法的结果。你首先需要$prompt1_1 = $prompt1_1.Split(",")。这同样适用于$prompt1 = $prompt1.Split(",") -
您可以根据需要使您的变量具有描述性,一般来说,您应该这样做!我将这些变量重命名为 $testAccounts 和 $testServers。此外,@AdminOfThings 是正确的,您需要重新提交变量,就像这样。
$testAccounts = $testAccounts.Split(",") -
这解决了我的问题。此外,后来发现由于 .Split(",") 我必须按原样输入我的服务器名称 - 不带引号 - 才能使脚本正常工作。我今天学到了一些新东西。谢谢。
标签: function powershell powershell-remoting invoke-command