当我搜索这个网站时,其他人建议使用像-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,这个命令工作得很好;直到我关闭记事本它才会继续)这是我能想到的唯一不同的
感谢您的帮助!
答案 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
阻止它过早地检查日志并使用旧的退出代码。