2011-02-10 24 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(),該怎麼辦?你仍然得到錯誤?