如何用PowerShell动态获取所有Windows服务器的服务状态?
解决动态获取服务器列表后无法查询服务状态的问题
问题根源:你获取服务器列表时用了
ft Name(Format-Table)命令,它会把原始的AD计算机对象转换成格式化的文本输出,而Get-Service的-ComputerName参数需要的是字符串类型的计算机名,不是格式化后的文本对象,因此$servers无法被正确识别。修正服务器列表获取命令:
把ft Name替换成Select-Object -ExpandProperty Name,直接提取计算机名字符串数组;同时不需要-Properties *(默认已返回Name属性,去掉能提升执行效率):$servers = Get-ADComputer -Filter {OperatingSystem -like "*windows*server*"} | Sort-Object Name | Select-Object -ExpandProperty Name执行服务查询:
现在再运行你的服务查询命令就能正常生效:Get-Service -ComputerName $servers -Name wuauserv | Select-Object MachineName, Name, DisplayName, Status | Sort-Object Status额外实用技巧:
- 如果担心部分服务器离线导致报错,可以先筛选在线服务器:
$onlineServers = $servers | Where-Object { Test-Connection -ComputerName $_ -Count 1 -Quiet -ErrorAction SilentlyContinue } Get-Service -ComputerName $onlineServers -Name wuauserv | Select-Object MachineName, Name, DisplayName, Status | Sort-Object Status - 服务器数量较多时,用
Invoke-Command批量执行效率更高:Invoke-Command -ComputerName $servers -ScriptBlock { Get-Service -Name wuauserv } | Select-Object MachineName, Name, DisplayName, Status | Sort-Object Status
- 如果担心部分服务器离线导致报错,可以先筛选在线服务器:
内容的提问来源于stack exchange,提问作者Dave
相关产品推荐
相关产品推荐

