1

PowerShellスニペット:

Import-Module Pscx
Expand-Archive ConsoleApplication1.zip ./
Write-Host $?
Write-Host $LastExitCode

エラーについて$?も報告もしません。$LastExitCodeしかし、ファイルConsoleApplication1.exeがロックされているため(私はこのアプリを起動しました)、エラーが発生します。次の出力で失敗を確認できます。

WARNING: ArchiveCallBack->GetStream error: System.IO.IOException:
The process cannot access the file 'D:\tmp\ConsoleApplication1.exe'
 because it is being used by another process.
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
...

質問:PowerShellでExpand-Archiveが失敗したことをどのように検出できますか

ありがとう

4

2 に答える 2

3

うまくいく解決策を見つけたようです:

$w = $null
Expand-Archive ConsoleApplication1.zip ./ -WarningVariable w

エラーが発生した場合 (または警告と呼ぶ場合)、それらは $w 変数に収集されます。$w.Count -gt 0エラー/警告が発生したことを意味する場合。

于 2011-02-10T05:41:42.953 に答える
1

$LastExitCode純粋にネイティブ EXE 終了コード用です。コマンドレットには適用されません。 $?コマンドレットがエラーを検出し、エラー オブジェクトを書き出す場合は、動作するはずです。このコマンドレットは内部的にエラーを検出していないようです。を実行する$error.Clear()と、Expand-Archiveコマンドに$error[0]エラーが含まれていますか?

また、コマンドレットを実行しようとしたときに、コマンドレットがまだ exe を展開している可能性はありますか? コンソール アプリを実行しようとする前に、コマンドレットが完了するのを待っていると思います。ファイルが閉じられたり破棄されたりするバグがある可能性もあると思います。[gc]::collect()の後にを試すとどうなりますかExpand-Archive。それでもエラーが発生しますか?

于 2011-02-10T05:50:08.520 に答える