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失败
由于
答案 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
该怎么办?你还得错误吗?