为何PowerShell脚本仅输出首个自动启动运行服务而非全部?
问题原因分析
你的脚本存在两个核心问题,导致无法遍历输出所有符合条件的服务:
$Services变量未正确赋值
在Foreach-Object块中,你仅对$Service变量进行赋值操作,没有将处理后的服务信息输出到管道中。这意味着$Services = ...这行代码最终得到的是空值,完全没有存储任何服务数据。$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
相关产品推荐
相关产品推荐

