PowerShell错误:自定义功能中的计算机名称无效

问题描述 投票:0回答:1

我正在尝试使用Read-Host -Prompt填写多个服务器名称和用户帐户名称,然后将它们传递到invoke-command中以完成任务-使某人成为本地管理员。我无法弄清楚为什么PowerShell会向我抛出此错误:“一个或多个计算机名称无效。如果尝试传递URI,请使用-Co​​nnectionUri参数,或者传递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,但不在函数内使用

没有防火墙或安全措施阻止有问题的帐户

谢谢您的帮助。

function powershell powershell-remoting invoke-command
1个回答
0
投票

似乎您期望$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(",") } 
}

使用表达式的优点是您的原始变量保持不变。

© www.soinside.com 2019 - 2024. All rights reserved.