You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Start-Process -Wait未等待SCCM客户端安装完成的问题

解决Start-Process等待SCCM客户端安装完成的问题

这个问题我之前也碰到过,根源在于ccmsetup.exe并不是直接执行安装的进程——它其实是一个启动器,会启动真正负责安装的子进程,然后自己很快(大概5秒左右)就退出了。而Start-Process -Wait只会等待它直接创建的那个父进程结束,所以脚本会提前继续执行,而任务管理器里的是还在运行的子进程。

下面给你两个可靠的解决方案:

方法1:监控ccmsetup进程直到全部结束

ccmsetup启动器退出后,实际的安装工作会由它启动的另一个ccmsetup.exe进程完成,我们可以循环检测系统中是否还有这个进程,直到全部结束:

# 启动SCCM客户端安装程序
Start-Process -FilePath C:\temp\SCCM_Client\ccmsetup.exe -ArgumentList SMSSITECODE=PCM -NoNewWindow

# 循环等待所有ccmsetup进程终止
do {
    # 每10秒检查一次
    Start-Sleep -Seconds 10
    $ccmRunning = Get-Process -Name ccmsetup -ErrorAction SilentlyContinue
} while ($ccmRunning)

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

方法2:监控ccmsetup安装日志(更可靠)

SCCM客户端安装会在C:\Windows\ccmsetup\Logs\ccmsetup.log中记录详细过程,当安装完成时,日志会出现Installation completed successfully的条目。我们可以监控这个日志直到出现该关键字:

# 启动SCCM客户端安装程序
Start-Process -FilePath C:\temp\SCCM_Client\ccmsetup.exe -ArgumentList SMSSITECODE=PCM -NoNewWindow

# 定义日志路径和完成标志
$logPath = "C:\Windows\ccmsetup\Logs\ccmsetup.log"
$completionPattern = "Installation completed successfully"

# 循环等待日志出现完成标志
do {
    Start-Sleep -Seconds 10
    $installDone = Select-String -Path $logPath -Pattern $completionPattern -ErrorAction SilentlyContinue
} while (-not $installDone)

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

为什么原来的-Wait参数没用?

再补充下原理:Start-Process -Wait的等待逻辑是绑定到它直接启动的进程ID上的,当这个父进程(也就是那个5秒就退出的ccmsetup启动器)终止时,Wait就会结束,完全不会关心它启动的子进程是否还在运行。这也是为什么你测试notepad.exe时正常——notepad是单进程程序,关闭它父进程就终止了,而ccmsetup是多进程的启动模式。

内容的提问来源于stack exchange,提问作者TelluRye

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:12:49