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

PowerShell中IF语句逻辑未按预期执行的问题求助

PowerShell中IF语句逻辑未按预期执行的问题求助

嘿,我来帮你排查下这个问题!

你遇到的核心问题其实很好解释——你一开始存进$AccService变量的服务对象是「静态快照」,它不会自动同步服务的实时状态变化。

具体来说:

  1. 脚本开头你用$AccService = Get-service $AccServiceName获取了服务当时的状态,这个变量里的信息就固定在那一刻了
  2. 当你执行Stop-Service停掉服务后,系统里的服务确实停了,但$AccService里存的还是最开始的状态数据,不会自动刷新
  3. 所以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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 11:33:16