尝试在使用范围运算符时附加名称列表

时间:2016-02-12 13:02:00

标签: arrays powershell append operators

尝试做这样的事情:

$BaseCompName = ProdServer-
$CompNameSuffix = 1..45
$ServerName = "$BaseCompName" + "$CompNameSuffix"

这个想法是生成一个列表 - 在RAM,TXT文件或CSV文件中 - 看起来像

ProdServer-1
ProdServer-2
ProdServer-3
...
ProdServer-45

从该列表中,我会使用ForEach或其类似内容通过Test-Connection或类似内容对其进行ping操作,然后将该数据添加到文件或我们的任何内容中当时处理数据。

我不确定如何构建它。我已经看到人们使用范围运算符来ping一堆IP的例子但是,每当我试图拼凑一些东西时,它就会失败。我重新安排了一些事情,我看到越来越多的错误。现在,我迷失了,一切都开始变得一样了。

我的最新尝试:

$CompName = 1..45
$Servers = "PRODSERVER-" + $CompName
ForEach ($Server in $Servers) { 
    Test-Connection -ComputerName $Server -Count 1 }| Export-Csv 'C:\Users\SucksAtPowerShell\Desktop\ips.csv' -NoTypeInformation }

如前所述,这打破......

Test-Connection : Testing connection to computer 'PRODSERVER-1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 
    19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45' failed: The requested 
    name is valid, but no data of the requested type was found
    At line:4 char:5
    +     Test-Connection -ComputerName $Server -Count 1 }
    +     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : ResourceUnavailable: (PRODSERVER-1 2 ... 41 42 43 44 45:String) [Test-Conne
      ction], PingException
        + FullyQualifiedErrorId : TestConnectionException,Microsoft.PowerShell.Commands.TestConnectionCommand

1 个答案:

答案 0 :(得分:1)

您没有迭代每个数组元素。当作为一个字符串强制转换时,你的数组就会被每个以空格分隔的元素连接起来。

这有多种方法,但大多数都涉及在循环内处理整数数组。让我们将范围运算符移动到ForEach-Object

的管道输入
1..45 | ForEach-Object {
    $Server =  "PRODSERVER-$_"
    Test-Connection -ComputerName $Server -Count 1
} | Export-Csv 'C:\Users\SucksAtPowerShell\Desktop\ips.csv' -NoTypeInformation 

或者更符合您之前的内容

$CompName = 1..45
$Servers = $CompName | ForEach-Object{"PRODSERVER-" + $_}