PowerShell生成AD域控制器清单报表安装日期列空白问题求助
问题原因
你的脚本出现InstallDate列为空是以下几个语法和逻辑错误导致的:
- 原代码中查询操作系统安装日期的逻辑没有指定目标域控主机,默认只会查询运行脚本的本地机器,不会访问远程DC
- 安装日期的查询结果没有赋值给
$InstallDate变量,往表格插入数据时该变量本身为空值 Invoke-Command语法使用错误,且存在多余的嵌套大括号,导致查询安装日期的代码段根本没有被正常执行- 已弃用的
Get-WmiObjectcmdlet兼容性较差,建议替换为更稳定的Get-CimInstance
修正后的核心逻辑
你可以直接替换原脚本中ForEach循环的全部内容:
ForEach($DC in $AllDCs) { $InstallDate = "N/A" # 先测试连通性 $ping = ping $DC.Hostname -n 1 | Where-Object {$_ -match "Reply|Request timed out|Destination host unreachable"} switch ($ping) { {$_ -like "Reply*" } { $PingStatus = "Success" } {$_ -like "Request timed out*"} { $PingStatus = "Timeout" } {$_ -like "Destination host unreachable*"} { $PingStatus = "Unreachable" } default { $PingStatus = "Unknown" } } # 只有连通成功才尝试获取安装日期 if($PingStatus -eq "Success"){ try{ # 直接通过CIM查询远程DC的安装日期,不需要额外显式调用Invoke-Command $osInfo = Get-CimInstance -ClassName Win32_OperatingSystem -ComputerName $DC.Hostname -ErrorAction Stop $InstallDate = $osInfo.InstallDate.ToString("yyyy-MM-dd HH:mm:ss") }catch{ $InstallDate = "获取失败" } } $DCTable.Rows.Add( $DC.Hostname, $DC.Ipv4address, $DC.isGlobalCatalog, $DC.Site, $DC.Forest, $DC.OperatingSystem, $PingStatus, $InstallDate )| Out-Null }
前置要求
运行脚本前请确认:
- 执行脚本的域账号拥有所有域控的本地管理员权限
- 域控防火墙放通WMI通信端口(135端口及动态RPC端口)或PSRemoting端口(5985/HTTP、5986/HTTPS)
内容的提问来源于stack exchange,提问作者T-Heron
相关产品推荐
相关产品推荐

