Start-Process -Wait不等待

时间:2018-05-17 15:31:54

标签: powershell executable

当我搜索这个网站时,其他人建议使用像-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 :(得分:1)

我遇到了这个问题,ccmsetup.exe产生了另一个完成工作的进程。所以它的行为与预期的一样,因为powershell产生的ccmsetup.exe已经完成。

为了解决这个问题,我的解决方案是监视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阻止它过早地检查日志并使用旧的退出代码。