$hostList = cat C:\hostfile.csv
foreach($_ in $hostList){
Invoke-Command -ComputerName $_ -ScriptBlock {
...
}hostfile.csv的内容是(测试目的):
localhost,127.0.0.1这个.csv文件是一行,没有标头。问题是,我得到了以下错误:
Invoke-Command : One or more computer names is not valid. If you are trying to pass a UR
I, use the -ConnectionUri parameter or pass URI objects instead of strings.我是定义了foreach错误,还是无法在$_中填写.csv的值?
编辑:最后,我想用真实的IP地址和主机名来扩展.csv。
发布于 2013-09-16 13:05:37
问题是在调用$hostList = cat C:\hostfile.csv之后,您有一个字符串,而不是一个数组。
您需要用逗号分隔字符串。因此,代码可能如下:
$hostList = cat C:\hostfile.csv
foreach($_ in $hostList){
$line = $_.Split(',');
$host = $line[0];
$ip = $line[1];
Invoke-Command -ComputerName $host -ScriptBlock {
...
}更新
由于所有值都在一行中,所以必须将上述coe更改为:
$hostList = (cat C:\hostfile.csv).Split(',');
foreach($_ in $hostList){
Invoke-Command -ComputerName $_ -ScriptBlock {
...
}发布于 2013-09-16 13:52:21
可能winrm没有配置为允许通过IP地址连接,您能在使用调用命令之前尝试解析主机名的入口吗?
顺便说一句,你必须分开你的行才能得到主机:
$hostList | |% {
$_ -split ',' | % {
Invoke-Command -ComputerName [System.Net.Dns]::GetHostEntry($_).hostname -ScriptBlock {
...
}
}
}https://stackoverflow.com/questions/18828695
复制相似问题