Работа Powershell всегда показывает выполненную

Я только начал работать с powershell около 3 дней назад и пытался создать сценарий, который обращается к реестру удаленного компьютера, ищет определенный ключ и помещает вывод в файл.

Мне удалось заставить его работать, но я заметил, что, если он не достигнет реестра, потребуется около 15 секунд, чтобы выдать ошибку и продолжить со сценарием, поэтому я вставил это:

$Server = "test.contesto.net"

$Job = Start-Job ScriptBlock{[Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey("LocalMachine",$Server)

Start-Sleep 2

If ($Job.State -EQ "Completed"){
write-host "made it"
}
Else {
write-host "failed"
}

и я всегда получу "сделал это". даже когда я знаю, что не могу добраться до этого реестра серверов. Странно, если я введу все это вручную в подсказку powershell, например так:

$Job = Start-Job ScriptBlock {[Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey("LocalMachine","test.contesto.net") 

Затем посмотрите на состояние этой работы

$Job.State

Я получаю "Бег" в течение полных 15 секунд, которые требуются для отказа. я пытался добавить Get-Variable в ScriptBlock {} но это тоже не сработало. Это все еще показывает завершено. Так что я думаю, что это связано с ошибкой задания из-за синтаксиса или чего-то еще, поэтому задание выполняется каждый раз, независимо от того, что

1 ответ

Решение

Вопрос в том, что вам нужно пройти $server в качестве аргумента к вашему блоку скрипта, а затем ссылаться на него через автоматическую переменную под названием $args:

$server = "test.contesto.net"
$Job = Start-Job -ScriptBlock {
    $server = $args[0]
    [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey("LocalMachine",$server) 
} -ArgumentList @($server)

Фоновые задания выполняются в совершенно отдельном контексте от вашего текущего скрипта, поэтому переменные, определенные локально, не будут видны.

Так что в вашем случае, работа сразу же провалилась, потому что $server был равен $ null. Если передать $ server соответствующим образом, задание попытается получить удаленный ключ, а затем истечет время ожидания.

Другие вопросы по тегам