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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 08:36:03