我正在尝试替换表中的变量,但我似乎无法做到。在成功执行ping操作时,我希望将Success
下的值更改为1,但无论我做什么,它都会保持为0. $ping
当前返回的内容如下:
+-------------------+----------+
| Hostname | Success |
+-------------------+----------+
| BVL-W71455781745 | 0 |
| BVL-WX966103545 | 0 |
| BVL-W7583554017 | 0 |
+-------------------+----------+
$ping = Import-csv C:\temp\pingtst.csv -Header 'Hostname' | Select-object *,@{Name='Success';Expression={'0'}}
$i = 0
foreach ($HostName in $ping.Hostname) {
if (Test-Connection -ComputerName $HostName -count 3 -Quiet)
{
$ping.Success[$i] = '1'
$i = ($i + 1)
} else
{$ping.Success[$i] = '0'
$i = ($i + 1)
}
}
答案 0 :(得分:0)
你正在以一种奇特的方式迭代你的物体。您也没有在正确的元素上索引数组。我还没有技术解释,但当你像成功那样索引成功时
$ping.Success[$i]
返回正确行的正确值。但是,您无法直接访问该行上的 set 值。在这种情况下,您的默认值为0。
如果你做了这样的事情,你会得到你期望的结果。
$ping[$i].Success
不需要整个$i
,因为有更好的方法来处理对象数组。
$results = Import-csv C:\temp\pingtst.csv -Header 'Hostname' |
Select-object hostname,@{Name='Success';Expression={'0'}} |
ForEach-Object{
# Test the connection. Since the value is already 0 only change on success
if (Test-Connection -ComputerName $_.Hostname -count 3 -Quiet){
$_.Success = 1
}
# Send this row down the pipeline
$_
}
# This should look like you expect now.
$results