运行更新脚本前如何检测Microsoft Teams是否正被用户主动使用?
解决方案
核心判断逻辑
- 仅后台驻留的Teams进程没有可交互的可见窗口,对应进程的
MainWindowHandle属性值为0 - 当Teams被用户打开(包括显示在桌面、最小化到任务栏)时,会存在至少一个Teams进程的
MainWindowHandle不为0,此时升级会打断用户操作 - 若Teams仅最小化到系统托盘、无打开的交互窗口,所有Teams进程的
MainWindowHandle均为0,升级不会打扰用户
可用部署脚本
# 检测是否存在有可见交互窗口的Teams进程 $hasVisibleTeamsWindow = $false # 匹配规则同时兼容经典Teams和新版Teams(2.x版本) $teamsProcesses = Get-Process -Name "*teams*" -ErrorAction SilentlyContinue if ($teamsProcesses) { foreach ($proc in $teamsProcesses) { # 主窗口句柄不为0代表存在用户可见的交互窗口 if ($proc.MainWindowHandle -ne [IntPtr]::Zero) { $hasVisibleTeamsWindow = $true break } } } if (-not $hasVisibleTeamsWindow) { Write-Host "无正在使用的Teams窗口,执行升级" choco upgrade microsoft-teams.install -y } else { Write-Host "Teams正在被用户使用,跳过本次升级" exit 0 }
可选增强逻辑
如果需要进一步降低打扰概率,可以额外检测Teams是否正在进行音视频通话:可读取Teams默认日志路径%AppData%\Microsoft\Teams\logs.txt,匹配通话相关关键字判断状态。注意该逻辑依赖Teams日志格式,版本更新后可能需要调整匹配规则,可根据内部部署的Teams版本适配后使用。
内容的提问来源于stack exchange,提问作者lieutenantprivatesprite
相关产品推荐
相关产品推荐

