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

如何合并PowerShell脚本提取AD计算机信息及UEFISecureBootEnabled状态

可扩展AD域设备信息采集脚本实现

核心设计思路

  • 所有采集项以规则形式统一管理,新增采集逻辑无需修改循环主体
  • 远程执行命令统一做异常处理,避免单台设备离线导致脚本中断
  • 输出统一为结构化对象,方便后续直接导出为CSV/Excel等报表格式

完整脚本代码

# 1. 预加载AD模块
Import-Module ActiveDirectory

# 2. 定义采集规则:后续新增采集项只需在此处添加新的规则对象即可
$collectRules = @(
    # 基础AD属性(无需远程执行)
    @{
        PropertyName = "设备名称"
        GetValue = { $adDevice.Name }
    },
    @{
        PropertyName = "操作系统"
        GetValue = { $adDevice.Operatingsystem }
    },
    @{
        PropertyName = "操作系统版本"
        GetValue = { $adDevice.OperatingSystemVersion }
    },
    @{
        PropertyName = "IPv4地址"
        GetValue = { $adDevice.IPv4Address }
    },
    # 远程采集类属性
    @{
        PropertyName = "UEFISecureBootEnabled"
        GetValue = {
            param($deviceName)
            try {
                Invoke-Command -ComputerName $deviceName -ScriptBlock {
                    (Get-ItemProperty -Path hklm:\System\CurrentControlSet\Control\SecureBoot\State).UEFISecureBootEnabled
                } -ErrorAction Stop
            } catch {
                return "采集失败"
            }
        }
    }
)

# 3. 获取所有已启用的AD域计算机
$adComputerList = Get-ADComputer -Filter 'enabled -eq "true"' `
    -Properties Name,Operatingsystem,OperatingSystemVersion,IPv4Address |
    Sort-Object -Property Operatingsystem

# 4. 循环采集每台设备的所有属性
$reportData = foreach ($adDevice in $adComputerList) {
    $resultObj = [PSCustomObject]@{}
    foreach ($rule in $collectRules) {
        $value = & $rule.GetValue $adDevice.Name
        $resultObj | Add-Member -MemberType NoteProperty -Name $rule.PropertyName -Value $value
    }
    $resultObj
}

# 5. 输出结果/导出报表
$reportData | Format-Table -AutoSize
# 如需导出为CSV可直接使用:$reportData | Export-Csv -Path "C:\AD设备报表.csv" -Encoding UTF8 -NoTypeInformation

新增采集项方法

只需在$collectRules数组中添加新的规则对象即可,比如新增采集设备的最后开机时间属性,只需添加如下规则:

@{
    PropertyName = "最后开机时间"
    GetValue = {
        param($deviceName)
        try {
            Invoke-Command -ComputerName $deviceName -ScriptBlock {
                (Get-CimInstance Win32_OperatingSystem).LastBootUpTime
            } -ErrorAction Stop
        } catch {
            return "采集失败"
        }
    }
}

注意事项

  • 运行脚本的账号需拥有AD域读取权限,以及所有目标设备的本地管理员权限
  • 目标设备需提前开启WinRM远程管理服务,可通过组策略批量部署开启
  • 新增采集规则时可自行决定是否需要远程执行,本地可直接计算的属性无需走Invoke-Command

内容的提问来源于stack exchange,提问作者JL Thalacker

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 03:06:03