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 退出代码。它不适用于 cmdlet。 $?如果 cmdlet 检测到它有错误并写出错误对象,它应该可以工作。看来此 cmdlet 没有在内部检测到错误。如果你运行$error.Clear(),那么该Expand-Archive命令是否$error[0]包含错误?

另外,当您尝试执行它时,cmdlet 是否可能仍在扩展 exe?我假设您正在等待 cmdlet 完成,然后再尝试执行控制台应用程序。我想这也可能是文件被关闭/处理的错误。如果你[gc]::collect()Expand-Archive. 你仍然得到错误吗?

于 2011-02-10T05:50:08.520 回答