Обнаружение сбоев метода PowerShell Pscx Expand-Archive - PullRequest
1 голос
/ 10 февраля 2011

Фрагмент 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 ]

2 голосов
/ 10 февраля 2011

Похоже, я нашел решение, которое работает:

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

Если возникает ошибка (или вызывать их как предупреждения), они собираются в переменную $ w. Если $w.Count -gt 0, это означает, что произошла ошибка / предупреждение.

1 голос
/ 10 февраля 2011

$LastExitCode исключительно для собственных кодов выхода EXE.Это не относится к командлетам.$? должно работать, если командлет обнаруживает ошибку и записывает объект ошибки.Похоже, этот командлет не обнаружил внутреннюю ошибку.Если вы запускаете $error.Clear(), то команда Expand-Archive содержит ли $error[0] ошибку?

Кроме того, возможно ли, что командлет по-прежнему расширяет исполняемый файл при попытке его выполнить?Я предполагаю, что вы ждете завершения командлета, прежде чем пытаться запустить консольное приложение.Я думаю, также возможно, что есть ошибка, когда файл закрывается / удаляется.Что если вы попробуете [gc]::collect() после Expand-Archive.Вы все еще получаете ошибку?

...