2011-02-10 42 views
1

PowerShell的片段:有关错误PowerShell的Pscx展开 - 归档方法故障检测

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中展开 - 归档检测失败

感谢

+0

Hi Roman - 请在pscx.codeplex.com上记录一个错误,我将在下一个版本中修复此错误 - Oisin。 – x0n 2011-02-10 18:20:35

+0

嗨Oisin。完成:http://pscx.codeplex.com/workitem/30139 – Roman 2011-02-10 19:40:32

回答

2

看起来像我已经找到解决方案,它的工作原理:

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

如果发生错误(或叫他们警告),它们被收集在$ W变量。如果$w.Count -gt 0这意味着发生了一些错误/警告。

+0

不错的解决方法 - 无论如何请在pscx.codeplex.com上提交问题......谢谢! – x0n 2011-02-10 18:21:09

1

$LastExitCode纯粹是为本机EXE退出代码。它不适用于cmdlet。如果cmdlet检测到它发生了错误并写出错误对象,则$?应该可以工作。看来这个cmdlet并没有在内部检测到错误。如果运行$error.Clear(),那么Expand-Archive命令$error[0]是否包含错误?

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