批量导出1500台服务器AD数据:获取G_SCCM组关联信息需求
解决批量导出AD服务器信息及G_SCCM前缀组的问题
问题核心原因
你获取MemberOF属性为空的直接原因是:Get-ADComputer默认不会返回该属性,必须通过-Properties参数显式指定才能获取到服务器的组归属信息。
完整解决方案脚本
以下脚本可直接实现需求:批量导出服务器名称、AD描述,筛选出名称以G_SCCM开头的组,同时对未加入对应组的单元格设置黄色高亮(依赖ImportExcel模块简化Excel操作)。
# 首次运行需安装ImportExcel模块,执行一次即可 # Install-Module -Name ImportExcel -Scope CurrentUser -Force # 读取服务器列表(假设服务器名每行一个,存于ServerList.txt) $servers = Get-Content -Path ".\ServerList.txt" $results = @() foreach ($server in $servers) { # 获取AD计算机对象,显式指定需要的属性 $adComputer = Get-ADComputer -Identity $server -Properties Name, Description, MemberOf -ErrorAction SilentlyContinue if ($adComputer) { # 从MemberOf的DN中提取组名,筛选G_SCCM前缀的组 $sccmGroups = $adComputer.MemberOf | ForEach-Object { $groupName = ($_ -split "," | Where-Object { $_ -match "^CN=" }).Replace("CN=", "") if ($groupName -like "G_SCCM*") { $groupName } } # 组信息拼接,无匹配组则留空 $groupOutput = if ($sccmGroups) { $sccmGroups -join ";" } else { "" } $results += [PSCustomObject]@{ "服务器名称" = $adComputer.Name "AD描述" = $adComputer.Description "G_SCCM组" = $groupOutput } } else { # 处理AD中不存在的服务器 $results += [PSCustomObject]@{ "服务器名称" = $server "AD描述" = "AD中未找到该服务器" "G_SCCM组" = "" } } } # 导出到Excel,对空的G_SCCM组单元格设置高亮 $exportParams = @{ Path = ".\ServerAD_Export.xlsx" AutoSize = $true BoldTopRow = $true ConditionalFormatting = @( @{ Column = "G_SCCM组" Rule = "Equal" Value = "" Style = @{ BackgroundColor = "Yellow" FontColor = "Black" } } ) } $results | Export-Excel @exportParams Write-Host "导出完成,文件已保存至:$($exportParams.Path)"
关键细节说明
- MemberOf属性获取:必须在
Get-ADComputer中通过-Properties指定MemberOf,否则默认返回的对象不包含该属性,自然为空。 - 组名提取逻辑:
MemberOf返回的是组的完整LDAP路径(如CN=G_SCCM_Patch_Group,OU=Groups,DC=domain,DC=com),通过分割字符串提取CN=后的内容得到组名。 - 空值高亮处理:借助
ImportExcel模块的条件格式化功能,一键标记未加入任何G_SCCM组的服务器,无需手动操作Excel。 - 容错机制:加入
-ErrorAction SilentlyContinue避免因单台服务器找不到导致脚本中断,同时记录异常服务器信息。
内容的提问来源于stack exchange,提问作者RyomenS
相关产品推荐
相关产品推荐

