PowerShell脚本报错求助:获取AD服务器及查询管理员运行服务
查询AD启用服务器中以Administrator运行的服务并导出CSV
正确脚本示例
以下是可实现需求的完整脚本,包含错误处理逻辑:
# 获取AD中启用的服务器列表(筛选操作系统含Server的计算机) $servers = Get-ADComputer -Filter { Enabled -eq $true -and OperatingSystem -like "*Server*" } -Properties Name, DNSHostName # 初始化结果集合 $results = @() # 遍历每台服务器查询服务 foreach ($server in $servers) { try { # 使用CIM查询远程服务(比WMI更稳定) $adminServices = Get-CimInstance -ClassName Win32_Service ` -ComputerName $server.DNSHostName ` -ErrorAction Stop | Where-Object { # 匹配本地管理员(.\Administrator)或域管理员(DOMAIN\Administrator),替换YOUR_DOMAIN_NAME为实际域名 $_.StartName -match "^(\.|YOUR_DOMAIN_NAME)\\Administrator$" } # 将符合条件的服务整理为自定义对象 foreach ($service in $adminServices) { $results += [PSCustomObject]@{ ServerName = $server.Name DNSHostName = $server.DNSHostName ServiceName = $service.Name DisplayName = $service.DisplayName RunAsAccount = $service.StartName ServiceState = $service.State StartMode = $service.StartMode } } } catch { # 记录连接失败的服务器及错误信息 $results += [PSCustomObject]@{ ServerName = $server.Name DNSHostName = $server.DNSHostName ServiceName = "连接失败" DisplayName = $_.Exception.Message RunAsAccount = $null ServiceState = $null StartMode = $null } } } # 导出结果到CSV文件(路径可自行修改) $results | Export-Csv -Path "C:\Admin_Run_Services.csv" -NoTypeInformation -Encoding UTF8
常见语法错误排查
- 管道符与换行错误:管道符
|后换行时,需用英文反引号衔接,或直接写在同一行,避免语法中断。 - 条件判断错误:
Where-Object中误用赋值符号=而非比较符号-eq,或正则匹配时未转义反斜杠\。 - 远程连接参数错误:使用NetBIOS名而非DNSHostName导致解析失败,或未添加
-ErrorAction Stop捕获连接异常。 - Export-Csv参数遗漏:忘记添加
-NoTypeInformation会导致CSV首行出现多余类型信息,影响后续数据处理。 - 权限问题:运行脚本的账户需具备AD读取权限,以及远程服务器的WMI/CIM访问权限。
使用提示
- 替换脚本中的
YOUR_DOMAIN_NAME为实际域名,若仅需查询本地管理员运行的服务,可将正则改为^\\.\\Administrator$。 - 测试时可先指定单台服务器(如
-ComputerName "Server01")验证查询逻辑,再批量执行。
内容的提问来源于stack exchange,提问作者Got2BTru
相关产品推荐
相关产品推荐

