function - PowerShell 错误:计算机名称在自定义函数中无效
问题描述
我正在尝试使用 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
并$prompt1_1
包含以逗号分隔的名称。通过使用Read-Host
来填充变量,它们将是 type 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(",") }
}
使用表达式的优点是您的原始变量保持不变。
推荐阅读
- scala - reportFailure 方法在自定义 ExecutionContext 中实际做了什么
- r - 如何在 r 中创建索引矩阵?
- python - ConnectionError: ('Connection aborted.', gaierror(-2, 'Name or service not known'))
- php - Wappalyzer如何检测网页的技术
- javascript - Jquery:形式的.blur()上的功能,而不是元素
- angular - 哪个 Angular 模块将 [computed]="var" 转换为 computed="hello"?
- android - 地理围栏服务
- html - 如何从本地 .css 文件中提取 html?
- c++ - 检索子菜单的 QMenu
- javascript - 使用 ajax (JQUERY) 发送文件