远程连接

时间:2013-09-16 12:59:18

标签: powershell csv

$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。

2 个答案:

答案 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 {
            ...
        }
     }
 }