我几乎有这个,但得到一个错误时,通过逗号分隔的提示输入输入多个计算机名称。
$hostname = Read-Host -Prompt "Enter PC names (separated by comma)"
Invoke-Command -ComputerName $hostname -ScriptBlock{Get-LocalGroupMember -Group "Administrators"} | Export-Csv C:\temp\localadmins.csv
字符串
在没有Read-Host提示符的情况下运行它时,它可以很好地输入逗号分隔的多个计算机名,但当使用提示符输入并输入多个计算机名时,它会返回“一个或多个计算机名无效”。我希望将$hostname从输入转换为-ComputerName,就像它在输入中键入的那样,但我想我错过了一些东西。
错误输出:
Enter PC names (separated by comma): computername1, computername2
Invoke-Command : One or more computer names are not valid. If you are trying to pass a URI, use the -ConnectionUri parameter, or pass URI objects
instead of strings.
At \\usblfs003.global.baxter.com\users$\parksd2\docs\Scripts\LocalAdminsExport_EntitlementReview.ps1:2 char:1
+ Invoke-Command -ComputerName "$hostname" -ScriptBlock{Get-LocalGroupM ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (System.String[]:String[]) [Invoke-Command], ArgumentException
+ FullyQualifiedErrorId : PSSessionInvalidComputerName,Microsoft.PowerShell.Commands.InvokeCommandCommand
型
2条答案
按热度按时间dy2hfwbg1#
在没有
Read-Host
提示符的情况下运行它时,输入逗号分隔的多个字符也可以正常工作这是因为类似以下的东西:
字符串
使用array literal(通过
,
数组构造函数运算符)指定绑定到Invoke-Command
小程序的[string[]]
类型-ComputerName
参数的各个计算机名称。相比之下,
Read-Host
返回的 * 总是一个字符串 *(一个[string]
示例),因此使用用户输入server1, server
作为对Read-Host
提示的响应等效于使用… -ComputerName 'server1, server2' …
个which cannot work:它告诉
Invoke-Command
查找名称为 verbatimserver1, server2
的 * 单个 * 计算机**要将 string 解释为由 separator 分隔的 list of values,您需要 * 显式地将其转换为数组 *:
型
注意事项:
-split ','
使用-split
运算符将输入字符串按,
拆分为标记.Trim()
应用于生成的标记 * 数组 *,使用member-access enumeration从每个元素中去除任何前导或尾随空格。wlzqhblo2#
字符串