PowerShell新手求助:按状态及厂商分类导出系统服务至独立文件
PowerShell 分类导出系统服务脚本
以下是整合后的完整脚本,一次性实现四类服务的分别导出,逻辑清晰且复用性强:
# 获取所有系统服务,存储到变量避免重复查询 $allServices = Get-CimInstance Win32_Service # 定义日期后缀,统一命名格式 $dateSuffix = Get-Date -Format "yyyy-MM-dd-HH-mm" # --- 筛选并导出 Microsoft 已启动服务 --- $allServices | Where-Object { $_.Caption -match "Windows" -and $_.PathName -match "Windows" -and $_.State -eq "Running" } | Sort-Object -Property Name -Descending | Out-File "Microsoft_Services_Running_$dateSuffix.txt" # --- 筛选并导出 Microsoft 已停止服务 --- $allServices | Where-Object { $_.Caption -match "Windows" -and $_.PathName -match "Windows" -and $_.State -eq "Stopped" } | Sort-Object -Property Name -Descending | Out-File "Microsoft_Services_Stopped_$dateSuffix.txt" # --- 筛选并导出 非Microsoft 已启动服务 --- $allServices | Where-Object { -not ($_.Caption -match "Windows" -and $_.PathName -match "Windows") -and $_.State -eq "Running" } | Sort-Object -Property Name -Descending | Out-File "NonMicrosoft_Services_Running_$dateSuffix.txt" # --- 筛选并导出 非Microsoft 已停止服务 --- $allServices | Where-Object { -not ($_.Caption -match "Windows" -and $_.PathName -match "Windows") -and $_.State -eq "Stopped" } | Sort-Object -Property Name -Descending | Out-File "NonMicrosoft_Services_Stopped_$dateSuffix.txt"
关键优化说明:
- 用
Get-CimInstance替代Get-WmiObject:前者是PowerShell的现代推荐命令,性能更优且兼容性更好 - 一次性获取所有服务到变量
$allServices:避免重复查询系统,提升效率 - 统一日期后缀:确保所有导出文件的日期格式一致,便于区分版本
- 用
-eq替代-match匹配状态:状态值是固定的(Running/Stopped),精确匹配比模糊匹配更可靠 - 清晰的区块划分:每类服务的筛选逻辑独立,便于理解和修改
使用方法:
- 打开PowerShell(管理员权限可选,取决于是否需要查看所有系统服务)
- 将上述代码复制粘贴到窗口中,按回车执行
- 执行完成后,脚本所在目录会生成4个分类好的文本文件
内容的提问来源于stack exchange,提问作者Sabin Andrei Drăghici
相关产品推荐
相关产品推荐

