$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。
答案 0 :(得分:0)
问题是在调用$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 {
...
}
答案 1 :(得分:0)
也许winrm没有配置为允许通过IP地址连接你可以尝试在使用invoke-command之前解析地址到地址名吗?
顺便说一句,你必须拆分你的线路才能获得主机:
$hostList | |% {
$_ -split ',' | % {
Invoke-Command -ComputerName [System.Net.Dns]::GetHostEntry($_).hostname -ScriptBlock {
...
}
}
}