0
$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 中填写 .csv 的值$_

编辑:最后我想用真实的 IP 地址和主机名扩展 .csv。

4

2 回答 2

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 {
    ...
    }
于 2013-09-16T13:05:37.757 回答
0

也许 winrm 未配置为允许通过 IP 地址进行连接,您可以尝试在使用 invoke-command 之前将地址解析为主机名吗?

顺便说一句,您必须拆分线路以获取主机:

$hostList | |% { 
    $_ -split ',' | % {
        Invoke-Command -ComputerName [System.Net.Dns]::GetHostEntry($_).hostname -ScriptBlock {
            ...
        }
     }
 }
于 2013-09-16T13:52:21.623 回答