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中检测展开存档失败
谢谢
发布于 2011-02-10 05:41:42
看来我找到了可行的解决方案:
$w = $null
Expand-Archive ConsoleApplication1.zip ./ -WarningVariable w如果发生错误(或称其为警告),则在$w变量中收集它们。如果是$w.Count -gt 0,这意味着发生了一些错误/警告。
发布于 2011-02-10 05:50:08
$LastExitCode纯粹用于本地EXE退出代码。它不适用于cmdlet。如果cmdlet检测到它已经错误并写出了一个错误对象,那么$?应该可以工作。此cmdlet似乎没有在内部检测到错误。如果运行$error.Clear(),那么Expand-Archive命令$error[0]是否包含错误?
此外,当您尝试执行时,cmdlet是否仍在展开exe?在尝试执行控制台应用程序之前,我假设您正在等待cmdlet完成。我想也有可能存在一个错误,文件在那里被关闭/释放。如果您在[gc]::collect()之后尝试Expand-Archive,会怎么样?你还知道这个错误吗?
https://stackoverflow.com/questions/4953582
复制相似问题