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

为何PowerShell脚本仅输出首个自动启动运行服务而非全部?

问题原因分析

你的脚本存在两个核心问题,导致无法遍历输出所有符合条件的服务:

  1. $Services变量未正确赋值
    在Foreach-Object块中,你仅对$Service变量进行赋值操作,没有将处理后的服务信息输出到管道中。这意味着$Services = ...这行代码最终得到的是空值,完全没有存储任何服务数据。

  2. $Service变量被循环覆盖
    你最终调用Write-Output输出的是$Service变量,但这个变量在Foreach-Object的每次循环中都会被重新赋值为当前服务的属性数组。循环结束后,它只会保留最后一次循环处理的服务信息(你提到的“仅输出首个服务”可能是测试场景下的特殊情况,核心逻辑是变量被反复覆盖)。

修正后的脚本示例

如果要实现遍历输出所有启动类型为Automatic的运行服务,可以这样修改:

$Services = Get-Service | Where-Object {$_.StartType -eq 'Automatic'} | Foreach-Object {
    # 将当前服务的属性拼接为字符串并输出到管道,存入$Services
    "Name=`"$($_.Name)`" DisplayName=`"$($_.DisplayName)`" Status=`"$($_.Status)`""
}

# 输出所有符合条件的服务信息
Write-Output $Services

或者如果需要保留每个服务的属性数组结构,再逐个拼接输出:

$Services = Get-Service | Where-Object {$_.StartType -eq 'Automatic'} | Foreach-Object {
    # 返回每个服务的属性数组,$Services将存储所有服务的数组集合
    @(
        "Name=`"$($_.Name)`""
        "DisplayName=`"$($_.DisplayName)`""
        "Status=`"$($_.Status)`""
    )
}

# 遍历所有服务,拼接属性后输出
foreach ($service in $Services) {
    Write-Output ($service -join " ")
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 04:26:08