Start-Process -Wait НЕ ждет - PullRequest
0 голосов
/ 17 мая 2018

При поиске на этом сайте другие предлагали использовать такие параметры, как -NoNewWindow. Однако это не помогло.

Я пишу скрипт, который устанавливает SCCM.Это довольно длительная установка (около 5 минут), и хотя у меня есть -Wait, она буквально продолжается на протяжении оставшейся части сценария.

Start-Process -FilePath C:\temp\SCCM_Client\ccmsetup.exe -ArgumentList SMSSITECODE=PCM -Wait

Write-Host "Verify SCCM client install after reboot"`r`n -ForegroundColor Green

Затем выполняется ccmsetup.exe, а затем примерно через 5секунд или около того, он переходит к следующей строке.Я проверяю диспетчер задач, и ccmsetup.exe ЯВНО все еще работает.

Так вы, ребята, думаете, что у меня проблема, потому что это программа установки, а не программа?(эта команда работает нормально, если я запускаю процесс notepad.exe; она не будет продолжаться до тех пор, пока я не закрою блокнот) Это единственное, что я могу думать о другом

Спасибо за любую помощь!

1 Ответ

0 голосов
/ 17 мая 2018

У меня была эта проблема, ccmsetup.exe порождает другой процесс, который выполняет эту работу.Таким образом, он ведет себя как ожидалось, потому что ccmsetup.exe, порожденный powershell, завершил работу.

Чтобы обойти это, я решил отслеживать журналы ccmsetup на наличие кода выхода.

Что-то вроде ниже.

$count = 1
$LogFilePath = 'C:\Windows\ccmsetup\Logs\ccmsetup.log'
do
{
    Write-Output "Uninstalling Software Center - attempt $count"
    Start-Process -FilePath C:\temp\SCCM_Client\ccmsetup.exe -ArgumentList SMSSITECODE=PCM 
    $count++
    Start-Sleep 30 

    while ((Get-Content -Path $LogFilePath -Tail 1 | Select-String -Pattern "CcmSetup is exiting with return code" -SimpleMatch) -eq $null) 
    { 
        #Check every 10 seconds for an exit code
        Start-Sleep 10 
    }

} until((Get-Content $LogFilePath -Tail 1 -Wait | Select-String -pattern "CcmSetup is exiting with return code 0" -SimpleMatch -Quiet) -or $count -gt 3) 

Я не работаю вна данный момент, так что не иметь доступа к фактической части кода - я постараюсь обновить это завтра с окончательной версией, которую я использовал.

Start-sleep 30 потребовалось, чтобы предотвратить преждевременную проверку журналаи используя старый код выхода.

...