csv 自定义Active Directory导出

dfty9e19  于 5个月前  发布在  其他
关注(0)|答案(1)|浏览(66)

我一直致力于一个自定义脚本,以利用特定的Active Directory数据的大容量导出1.5k服务器.我正在寻找的数据是名称,AD描述和一个AD组与其名称中的特定模式(G_SCCM).经过几天的测试,各种方法来实现这一点,我能够拿出这个脚本.

$computers = Get-Content 'path.txt' 
foreach ($computer in $computers)
 
{get-adcomputer -Identity $computer -Properties * | Select-Object name, description |
Export-Csv -path 'path' -append
}

字符串
我需要从AD中导出服务器列表的数据。对于每台服务器,我需要其Name、Description和QuarterOF属性。我感兴趣的组成员资格应该以G_SCCM开头。我们有30多个用于修补的维护组,因此在每个组中单独查找其成员是不可行的。我尝试使用QuarterOF属性,如果计算机对象不是以G_SCCM开头的任何组的成员,则在导出时突出显示该单元格或将其保留为空。

insrf1ej

insrf1ej1#

由于您要查找多个组的组成员身份,我将首先收集这些组,以便能够使用它们来比较服务器的成员身份列表。

$ServerList = Get-Content -Path 'path.txt'
$GroupList = Get-ADGroup -Filter "Name -like '*G_SCCM*'" -SearchBase 'OU=Groups,DC=Contoso,DC=de'
$LookUpTable = $GroupList | 
    Select-Object -Property DistinguishedName, sAMAccountName | 
        Group-Object -AsHashTable -Property DistinguishedName

$Result = 
foreach ($ComputerName in $ServerList) {
    $ADComputer = 
        Get-ADComputer -Identity $ComputerName -Properties Description, MemberOf
    $MembershipList = 
        (Compare-Object -ReferenceObject $GroupList.DistinguishedName -DifferenceObject $ADComputer.MemberOf -IncludeEqual -ExcludeDifferent).InputObject
    [PSCustomObject]@{
        Name          = $ComputerName
        Description   = $ADComputer.Description
        G_SCCM_Member = if ($MembershipList) {$LookUpTable[$MembershipList].sAMAccountName -join ', ' } else {'n/a' }
    }
}
$Result | 
Export-Csv -Path 'Path.csv' -NoTypeInformation
$Result

字符串
通过这种方式,您可以获得名称、描述以及服务器所属的名称中包含G_SCCM的所有组。

相关问题