我大约 3 天前才开始使用 powershell,我一直在尝试制作一个脚本来访问远程计算机的注册表并查找某个键并将输出放入文件中。
我已经能够让它工作,但我注意到如果它无法到达注册表,大约需要 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的状态
$Job.State
我在失败所需的整整 15 秒内得到“运行”。我试图在其中添加Get-Variable
,ScriptBlock {}
但这也不起作用。它仍然显示已完成。因此,我认为这与由于语法或其他原因导致作业出错有关,因此无论如何,作业每次都会完成