Start-Job — проверка $lastexicode robocopy внутри Scriptblock

Я пытаюсь сделать что-то простое.

Я хочу создать задание robocopy, которое запускало бы копию и проверяло $lastexitcode.

$Source = "c:\SourceFolder"
$Destination "\\someserver\Destinationfolder"

$ScriptBlock = [scriptblock]::Create("robocopy $Source $Destination /MOVE /E /R:5 /E /W:5 /A-:SH; if ( $lastexitcode -gt 8) { LOGMESSAGE ERROR } else { LOGMESSAGE SUCCESS }")

start-job -scriptblock $ScriptBlock

LOGMESSAGE — это написанная мной функция, которая регистрирует событие и отправляет письмо в случае ошибки.

Каким-то образом значение $lastexitcode всегда возвращается к 16, даже если копия работает. Также функция не выполняется (работает вне скриптблока)

Кто-нибудь знает, что я делаю неправильно?

Любая помощь будет оценена по достоинству.

Спасибо !


person xashcorex    schedule 04.02.2014    source источник
comment
Почему бы просто не использовать start-process? например $robocopy = запустить процесс robocopy -список аргументов ‹аргументы› -passthru. Это вернет объект процесса со свойствами HasExited и ExitCode, которые вы можете проверить, чтобы увидеть, завершен ли он и какой был код выхода.   -  person mjolinor    schedule 04.02.2014
comment
вот как я завершаю код выхода из процесса запуска - заголовок ="самый безопасный способ запустить файл bat из скрипта powershell"> stackoverflow.com/questions/20645326/   -  person Knuckle-Dragger    schedule 04.02.2014
comment
Привет, Прежде всего спасибо за вашу помощь! Я пытался использовать start-process, как показал Knuckle-Dragger, но возвращаемый код выхода всегда равен 1... Даже если копия работает. Я должен что-то упустить здесь.   -  person xashcorex    schedule 04.02.2014
comment
Нет, это сработало идеально! ExitCode 0 = Нет ошибок, файлы не скопированы Так что ExitCode 1 на самом деле хорошая вещь. Код выхода 1 = ошибок нет, новые файлы скопированы. ExitCode › 1 = Были ошибки или, по крайней мере, неожиданные результаты.   -  person TheMadTechnician    schedule 04.02.2014
comment
О, хорошо, спасибо за вашу помощь :) Очень признателен!   -  person xashcorex    schedule 04.02.2014


Ответы (1)


Смотрите ваш комментарий, предполагая, что вы добились успеха. Вот ответ для будущих читателей на случай, если ссылка, которую я процитировал, не работает. По сути, мы назначаем команду запуска процесса переменной и выбрасываем тег -passthru, чтобы позже мы могли опросить .exitcode.

$A = Start-Process -FilePath .\my-app\my-fle.bat -Wait -passthru
$A.ExitCode
person Knuckle-Dragger    schedule 05.02.2014