【问题标题】:PowerShell error: computer name invalid in custom functionPowerShell 错误:计算机名称在自定义函数中无效
【发布时间】: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


【解决方案1】:

您似乎希望 $prompt1$prompt1_1 包含逗号分隔的名称。通过使用Read-Host 填充变量,它们将输入String。您将需要依靠用户使用您的代码手动输入逗号分隔符。话虽如此,在 String 对象上执行 .Split() 方法不会更新 String 对象。您必须更新变量赋值或将方法输出作为表达式传递给Invoke-Command

# Method 1: Reassigning Variable Before Invoke-Command
if ($OptPrompt -eq 1) { 
    $prompt1 = Read-Host -Prompt 'Test Accounts'
    $prompt1 = $prompt1.Split(",")
    $prompt1_1 = Read-Host -Prompt 'Test Servers'
    $prompt1_1 = $prompt1_1.Split(",")
    Invoke-Command -ComputerName $prompt1_1 -ScriptBlock {Add-LocalGroupMember -Group 'Administrators' -Member $Using:prompt1} 
}


# Method 2: Passing Expressions into Invoke-Command
if ($OptPrompt -eq 1) { 
    $prompt1 = Read-Host -Prompt 'Test Accounts'
    $prompt1_1 = Read-Host -Prompt 'Test Servers'
    Invoke-Command -ComputerName $prompt1_1.Split(",") -ScriptBlock {Add-LocalGroupMember -Group 'Administrators' -Member ($using:prompt1).Split(",") } 
}

使用表达式的好处是你的原始变量保持不变。

【讨论】:

    猜你喜欢
    • 2014-06-01
    • 2022-10-17
    • 1970-01-01
    • 1970-01-01
    • 2020-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多