PowerShell中IF语句逻辑未按预期执行的问题求助
PowerShell中IF语句逻辑未按预期执行的问题求助
嘿,我来帮你排查下这个问题!
你遇到的核心问题其实很好解释——你一开始存进$AccService变量的服务对象是「静态快照」,它不会自动同步服务的实时状态变化。
具体来说:
- 脚本开头你用
$AccService = Get-service $AccServiceName获取了服务当时的状态,这个变量里的信息就固定在那一刻了 - 当你执行
Stop-Service停掉服务后,系统里的服务确实停了,但$AccService里存的还是最开始的状态数据,不会自动刷新 - 所以20秒后第二个IF判断时,你用的还是旧的状态值,自然不会触发
Write-Host '2'
给你两个简单的修复方案:
方案一:在第二个判断前重新获取服务状态
$AccServiceName = 'AccountLoaderService' $AccService = Get-service $AccServiceName if ($AccService.Status -eq 'Running') { Write-Host '1' Stop-Service $AccServiceName } Start-Sleep -Seconds 20 # 关键:重新拉取服务的最新状态 $AccService = Get-service $AccServiceName if ($AccService.Status -eq 'Stopped') { Write-Host '2' }
方案二:直接在判断里实时检查服务状态
$AccServiceName = 'AccountLoaderService' $AccService = Get-service $AccServiceName if ($AccService.Status -eq 'Running') { Write-Host '1' Stop-Service $AccServiceName } Start-Sleep -Seconds 20 # 直接实时查询服务状态,不用依赖旧变量 if ((Get-service $AccServiceName).Status -eq 'Stopped') { Write-Host '2' }
这两种方法都能让脚本正确识别服务的停止状态,顺利输出数字2。你可以随便选一个试试~
备注:内容来源于stack exchange,提问作者user3580480
相关产品推荐
相关产品推荐

