PowerShell Pscx Expand-Archive方法故障检测

时间:2011-02-10 05:04:59

标签: powershell error-handling pscx

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失败

由于

2 个答案:

答案 0 :(得分:2)

看起来我找到了有效的解决方案:

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

如果发生错误(或称其为警告),则会在$ w变量中收集它们。如果$w.Count -gt 0,则表示发生了一些错误/警告。

答案 1 :(得分:1)

$LastExitCode完全用于原生EXE退出代码。它不适用于cmdlet。如果cmdlet检测到错误并写出错误对象,则$?应该有效。看来此cmdlet未在内部检测到错误。如果您运行$error.Clear(),那么Expand-Archive命令$error[0]是否包含错误?

此外,当您尝试执行时,cmdlet是否仍在扩展exe?我假设您在尝试执行控制台应用程序之前等待cmdlet完成。我想也有可能存在文件被关闭/处理的错误。如果您在[gc]::collect()后尝试Expand-Archive该怎么办?你还得错误吗?