3

PowerShell 初心者です。以下の変数を解析するために Select-String を取得しようとして立ち往生しています。

すべてを標準出力に記録する外部プログラムを呼び出しています。これは、私が使用しているバックアップ同期ソフトウェア用です。出力は、ソース、宛先、コピーされたファイル、変更されたファイルなどの多くの情報です。私は標準出力からいくつかの項目だけを気にします。標準出力を取得して、関心のあるいくつかの項目を解析しようとしているので、その他の 50 行のその他の情報ではなく、それらの項目のみが表示されます。

コードは次のとおりです。

$procInfo = New-Object System.Diagnostics.ProcessStartInfo
$procInfo.FileName = "C:\Program Files\Siber Systems\GoodSync\gsync.exe"
$procInfo.RedirectStandardError = $true
$procInfo.RedirectStandardOutput = $true
$procInfo.UseShellExecute = $false
$procInfo.Arguments = "/progress=yes /exit sync DroboBackup"
$proc = New-Object System.Diagnostics.Process
$proc.StartInfo = $procInfo
$proc.Start() | Out-Null
(Get-Date -format T) + ": Backup Process Running. Please Stand By..."
$proc.WaitForExit()
if ($proc.ExitCode -eq 0) 
{ 
    "GoodSync Reported: Analyze or Sync Successfully Completed." 
} elseif ($proc.ExitCode -eq 1)
{
    "GoodSync Error: Analyze had Terminal Errors. Did gsync.exe close abruptly?"
} elseif ($proc.ExitCode -eq 2)
{
    "GoodSync Error: Sync had Terminal Errors. Did gsync.exe close abruptly?"
} else 
{ 
    "GoodSync Error: General Error. Typo in job name?"
}
$output = $proc.StandardOutput.ReadToEnd()
$output += $proc.StandardError.ReadToEnd()
#$output  | Out-File c:\output.txt -Append
$newOutput = $output | Select-String "Copy New","Copy Over","Delete File","Items Synced","Changes:"
$newOutput

これを実行した後に得られるのは、標準出力からのすべての行です。素敵できれいな解析結果が得られません。

そこで、トラブルシューティングを試みるため$outputに、テキスト ファイルに送信してから以下を実行したところ、次のような結果が得られました。

$x = Get-Content c:\output.txt | Select-String "Copy New","Copy Over","Delete File","Items Synced","Changes:"
$x

PS C:\> .\test.ps1

Changes: 0, Conflicts: 0, CopyTime: 0, CopyState: 0/0, Errors: 0

ご覧のとおり、テキスト ファイルに対しては機能していますが、変数としては機能していません。

洞察はありますか?

4

1 に答える 1

5

StreamReaderReadToEnd()メソッドを使用して標準出力を読み取っています。これは、改行を含む内容を含む単一の文字列を返します。そのため、この文字列をパイプラインに出力すると、Select-String は個々の行ではなく、1 つの大きな文字列のみを認識します。あなたができることは、パイプラインに渡す前に改行で文字列を分割することです:

$output -split "`n" | Select-String "Copy New","Copy Over","Delete File","Items Synced","Changes:"
于 2012-07-05T17:45:46.287 に答える