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

PowerShell获取服务StartType异常:Win2012无法输出至文件求助

解决Windows Server 2012中PowerShell脚本无法输出服务StartType的问题

我之前处理过类似的跨系统PowerShell服务扫描问题,你的情况大概率是不同系统下PowerShell对服务对象的属性序列化/格式化规则差异导致的,下面给你几个针对性的解决方案:

1. 明确指定输出属性,避免依赖默认格式化

Windows 7和Windows Server 2012上,PowerShell对Get-Service返回的ServiceController对象的默认显示属性集合不一样——在Win7上默认包含了StartType,但在2012上可能没把它纳入默认输出列表,所以直接导出文件时就丢失了这个字段。

解决办法是用Select-Object明确列出你需要的所有属性,强制包含StartType,再导出:

# 示例:扫描单台计算机并导出到TXT
$computer = "TargetServer"
Get-Service -ComputerName $computer | 
    Select-Object Name, DisplayName, Status, StartType | 
    Out-File "services_$computer.txt"

# 如果是导出CSV,用这个更规范
Get-Service -ComputerName $computer | 
    Select-Object Name, DisplayName, Status, StartType | 
    Export-Csv "services_$computer.csv" -NoTypeInformation

这样不管在哪台系统上,只要服务对象存在StartType属性,就会被强制输出到文件里。

2. 改用CIM/WMI获取服务信息,提升跨系统兼容性

Get-Service的底层实现在不同Windows版本上有细微差异,而基于标准WMI的Get-CimInstance(或旧版的Get-WmiObject)跨系统一致性更好。注意Win32_Service类里的启动类型属性是StartMode,状态是State,和Get-Service的属性名略有不同:

$computer = "TargetServer"
Get-CimInstance -ClassName Win32_Service -ComputerName $computer | 
    Select-Object Name, DisplayName, State, StartMode | 
    Out-File "services_$computer.txt"

用CIM的好处是,不管你是PSv4还是PSv5,不管是Win7还是2012,返回的属性结构都是标准的,不会出现属性丢失的情况。

3. 排查输出编码问题(可选)

虽然这个可能性不大,但如果你的输出文件打开后有乱码或部分内容缺失,可以尝试指定Out-File的编码:

... | Out-File "services_$computer.txt" -Encoding UTF8

确保文件编码在不同系统下能正常解析。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:50:14