2017-01-27 3 views
1

Пытаясь выяснить, как я могу сделать следующий код:Дождитесь запроса Active Directory, чтобы закончить перед выполнением следующей строки

  • Дождитесь линии 1, прежде чем продолжить.
  • Дождитесь линии 4, чтобы завершить линию перед запуском 5

.

$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 

Имея ментальный блок, любая помощь будет оценена по достоинству.

ответ

1

Для внутренних команд PowerShell ждет перед началом следующей команды. Единственным исключением из этого правила является внешняя подсистема Windows, на основе EXE приложений, вы можете применить из-нуль

PowerShell будет ждать, пока ехе процесс после выхода из, прежде чем продолжить. Вы также можете использовать Start-Process с параметром -Подождите:

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

Если вы используете версию PowerShell Community растяжек:

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

Другой вариант в PowerShell 2.0 следует использовать фоновое задание:

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

В вашем случае он будет ждать завершения выполнения. Иначе вы можете проверить состояние с помощью делать-While петлю и держать на добавление запуск сон 1 сек

Надежда этот подход помогает вам.

+0

Это очень полезно. Большое спасибо за вашу информацию и помощь. – J1raya

1

В PowerShell, сценарий выполняется строка за строкой Если или до выполнения строки 1 заканчивается, сценарий обыкновения идти на линию 2. Так в идеале вы не должны беспокоиться о поставленной выше задаче.

+0

Спасибо за разъяснение, это очень ценится. – J1raya