1

kpscript を使用して keepass データベースから情報を取得するコマンドがあります。このコマンドは、1 行、複数行を取得できますが、最終的には常に次の出力を返します。

OK: Operation completed successfully.

PowerShell で各行を個別に処理し、StartsWith("OK:") の場合にループを終了する最善の方法は何ですか? 例:

KPScript -c:GetEntryString $PASSHOME\$PASSFILE -pw:$PASS -Field:UserName $SEARCH

Administrator
OK: Operation completed successfully.

私が失敗した次のアプローチ

$UNAME = KPScript -c:GetEntryString $PASSHOME\$PASSFILE -pw:$PASS -Field:UserName $SEARCH 
IF(! $UNAME){ 
    write-host "UNAME1=$UNAME" 
    write-host "ERROR UNAME" -foreground "red" 
    exit 
}

while (! $UNAME) { KPScript -c:GetEntryString $PASSHOME\$PASSFILE -pw:$PASS -Field:UserName $SEARCH }

こちらも失敗

    $UNAME=KPScript -c:GetEntryString $PASSHOME\$PASSFILE -pw:$PASS -Field:UserName $SEARCH
    write-host "UNAME=$UNAME"

結果:

    UNAME=Administrator OK: Operation completed successfully.

UNAME=administrator UNAME=OK: 操作は正常に完了しました。したがって、すべての行を個別に処理できます

多分これは配列で達成できますか?

こちらも失敗

    $UNAME=@(KPScript -c:GetEntryString $PASSHOME\$PASSFILE -pw:$PASS -Field:UserName $SEARCH)
    write-host "UNAME=$UNAME"

出力は同じです:

    UNAME=Administrator OK: Operation completed successfully.
4

2 に答える 2

2

これはあなたがやろうとしていることですか?

#Sample of kpscript output
#$output = "Administrator","OK: Operation completed successfully.","Should have stopped already"

$output = KPScript -c:GetEntryString $PASSHOME\$PASSFILE -pw:$PASS -Field:UserName $SEARCH

foreach ($line in $output) {
    $UNAME = $line
    Write-Host "UNAME=$UNAME"
    if($line.StartsWith("OK:")) { break }
}

出力 (サンプル出力を使用):

UNAME=Administrator
UNAME=OK: Operation completed successfully.
于 2016-03-04T20:36:22.957 に答える