等待Active Directory查询完成后再执行下一行

时间:2017-01-27 03:32:32

标签: powershell active-directory

尝试弄清楚如何制作以下代码:

  • 等待第1行完成后再继续。
  • 在第5行
  • 之前等待第4行完成

   $invokevar = Get-ADComputer -Filter * -SearchBase $searchbase | select -Expand dnshostname
   New-Variable -name "invoke$dom" -value $invokevar -Force
   $fullvar = Get-Variable -Name "invoke$dom" -ValueOnly
   $results = Invoke-Command -ComputerName $fullvar -ScriptBlock $sbmain
   $badhosts = Compare-Object $($invokevar | Sort-Object) $($results | select -expand pscomputername | Sort-Object) | select -expand InputObject

有精神障碍,任何帮助都会受到赞赏。

2 个答案:

答案 0 :(得分:1)

在powershell中,脚本逐行执行 除非或直到第1行的执行完成,否则脚本不会用于第2行。 理想情况下,你不应该担心上述问题。

答案 1 :(得分:1)

对于内部命令,PowerShell会在开始下一个命令之前等待。此规则的一个例外是基于外部Windows子系统的 EXE 应用程序,您可以应用 out-null

PowerShell将等到 exe 进程退出后再继续。 您还可以使用 -Wait 参数 Start-Process

Start-Process <path to exe> -NoNewWindow -Wait

如果您使用的是PowerShell社区扩展版,则为:

$proc = Start-Process <path to exe> -NoWindow
$proc.WaitForExit()

PowerShell 2.0 中的另一个选项是使用后台作业:

$job = Start-Job { invoke command here }
Wait-Job $job
Receive-Job $job

在您的情况下,它将等待执行完成。否则,您可以使用执行循环检查状态,并继续添加 1秒启动睡眠

希望这种方法可以帮助你。