首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >远程连接

远程连接
EN

Stack Overflow用户
提问于 2013-09-16 12:59:17
回答 2查看 60关注 0票数 0
代码语言:javascript
复制
$hostList = cat C:\hostfile.csv

foreach($_ in $hostList){
    Invoke-Command -ComputerName $_ -ScriptBlock {
    ...
    }

hostfile.csv的内容是(测试目的):

代码语言:javascript
复制
localhost,127.0.0.1

这个.csv文件是一行,没有标头。问题是,我得到了以下错误:

代码语言:javascript
复制
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。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-16 13:05:37

问题是在调用$hostList = cat C:\hostfile.csv之后,您有一个字符串,而不是一个数组。

您需要用逗号分隔字符串。因此,代码可能如下:

代码语言:javascript
复制
$hostList = cat C:\hostfile.csv

foreach($_ in $hostList){
    $line = $_.Split(',');
    $host = $line[0];
    $ip = $line[1];
    Invoke-Command -ComputerName $host -ScriptBlock {
    ...
    }

更新

由于所有值都在一行中,所以必须将上述coe更改为:

代码语言:javascript
复制
$hostList = (cat C:\hostfile.csv).Split(',');

foreach($_ in $hostList){
    Invoke-Command -ComputerName $_ -ScriptBlock {
    ...
    }
票数 0
EN

Stack Overflow用户

发布于 2013-09-16 13:52:21

可能winrm没有配置为允许通过IP地址连接,您能在使用调用命令之前尝试解析主机名的入口吗?

顺便说一句,你必须分开你的行才能得到主机:

代码语言:javascript
复制
$hostList | |% { 
    $_ -split ',' | % {
        Invoke-Command -ComputerName [System.Net.Dns]::GetHostEntry($_).hostname -ScriptBlock {
            ...
        }
     }
 }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18828695

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档