将每一行循环到数组中

时间:2016-03-07 11:56:40

标签: powershell

我正在尝试循环这样的数组:

$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成为一个数组,并且每个值都有。

3 个答案:

答案 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:”开头的行。)

使用数组构造函数@(…)意味着即使存在零个或一个值,也总是得到一个数组。