我正在尝试循环这样的数组:
$output = @(KPScript -c:GetEntryString $PASSHOME\$PASSFILE -pw:$PASS -Field:csname $SEARCH)
$output[3]
foreach ($line in $output) {
$CSNAME += $line
if ($line.StartsWith("OK:")) {
break
} else {
Write-Host "CSNAME=$CSNAME"
}
}
输出是这样的:
covilha2 CSNAME=covilha1 CSNAME=covilha1fundao CSNAME=covilha1fundaobelmonte CSNAME=covilha1fundaobelmontecovilha2
我可以正确地获得$output[3]
,但我需要$CSNAME
成为一个数组,并且每个值都有。
答案 0 :(得分:1)
您需要先将$CSNAME
声明为数组。如果不是,你只会一遍又一遍地附加到第一个字符串。
$output = @(KPScript -c:GetEntryString $PASSHOME\$PASSFILE -pw:$PASS -Field:csname $SEARCH)
$output[3]
#Declare $CSNAME as array
$CSNAME = @()
foreach ($line in $output) {
if ($line.StartsWith("OK:")) {
break
} else {
$CSNAME += $line
#You might want to use CSNAME=$line here so it doesn't output the whole array each time
Write-Host "CSNAME=$line"
}
}
答案 1 :(得分:0)
您必须将CSNAME
声明为数组:
$CSNAME = @()
现在,您可以使用$CSNAME += $line
答案 2 :(得分:0)
您正在寻找类似的东西:
$CSNAME = @($output | %{ if ($_ -like 'OK:*') { continue }; $_ }
(使用快捷语法复制$output
中不以“OK:”开头的行。)
使用数组构造函数@(…)
意味着即使存在零个或一个值,也总是得到一个数组。