我正在运行一个脚本,它将Citrix QFarm/load命令输出到文本文件中;它本质上是两列,我再输入到一个多维数组,这样它看起来像:Powershell多维数组IndexOf返回-1
SERVER1 100
SERVER2 200
SERVER3 300
我期待找到的indexOf一个特定的服务器,所以我可以再检查负载均衡器级别是什么。当我使用indexOf方法时,我只得到-1的返回值;但脚本末尾的显式写主机显示答案应该会回到41.
是否需要发生某些魔法才能将IndexOf与2d数组一起使用?
$arrQFarm= @()
$reader = [System.IO.File]::OpenText("B:\WorkWith.log")
try {
for(;;) {
$str1 = $reader.ReadLine()
if ($str1 -eq $null) { break }
$strHostname = $str1.SubString(0,21)
$strHostname = $strHostname.TrimEnd()
$strLB = $str1.SubString(22)
$strLB = $strLB.TrimEnd()
$arrQFarm += , ($strHostName , $strLB)
}
}
finally {
$reader.Close()
}
$arrCheckProdAppServers = "CTXPRODAPP1","CTXPRODAPP2"
foreach ($lines in $arrCheckProdAppServers){
$index = [array]::IndexOf($arrQFarm, $lines)
Write-host "Index is" $index
Write-Host "Lines is" $lines
}
if ($arrQFarm[41][0] -eq "CTXPRODAPP1"){
Write-Host "YES!"
}
运行这给输出:
PS B:\Citrix Health Monitoring\249PM.ps1
Index is -1
Lines is CTXPRODAPP1
Index is -1
Lines is CTXPRODAPP2
YES!
IndexOf不支持多维数组。在你的例子中,你看起来像你正在尝试使用关联数组。看看使用Hashtable,以服务器为关键,负载平衡器为值:http://technet.microsoft.com/en-us/library/ee692803.aspx – dugas 2013-03-19 20:16:26