获取 Active Directory 域服务文件夹 and/or DistingiushedName
Getting Active Directory Domain Services Folder and/or DistingiushedName
我不熟悉使用 Powershell 为 Active Directory 编写脚本,并尝试将用户拉出列表并枚举他们的组;但是,当我这样做时,结果信息仅包含在许多不同名称的 OU 下重复的组名称。在 Member Of 选项卡下的 AD Users and Computers 中查看它们显示了名称和 Active Directory 域服务文件夹,其中包含我需要的差异化信息,或者我可以使用 DistinguishedName,它的格式不是很好以提高可读性,但会也可以。
简化示例的问题:如果一个组名在不同的 OU 中是相同的(如 "TestUsers"),那么脚本当前会转储多个组名而不区分 "TestUsers, TestUsers, TestUsers",而不是在中显示基础 OU干净格式 "Michigan\TestUsers, NewYork\TestUsers" 或专有名称格式 "CN=TestUsers,CN=Michigan,etc";"CN=TestUsers,CN=NewYork,etc".
$alist = "Name`tAccountName`tDescription`twhenCreated`tAcctEnabled`tGroups`n"
$userlist = Get-ADUser -SearchBase "OU=Service Accounts,OU=Information Systems,DC=conteso,DC=local" -Filter * -Properties * | Select-Object -Property Name,SamAccountName,Description,EmailAddress,LastLogonDate,Manager,Title,Department,Company,whenCreated,Enabled,MemberOf | Sort-Object -Property Name
$userlist | ForEach-Object {
$grps = $_.MemberOf | Get-ADGroup | ForEach-Object {$_.Name} | Sort-Object
$arec = $_.Name,$_.SamAccountName,$_.Description,$_.whenCreated,$_.Enabled
$aline = ($arec -join "`t") + "`t" + ($grps -join "`t") + "`n"
$alist += $aline
}
$alist | Out-File C:\psscripts\service_accounts_groups.csv
感谢任何帮助!
由于“$_.memberof”属性 已经有了专有名称,您不需要再次将其传递给 Get-Adgroup。所以只需像这样替换你的 $grps 行
$grps = $_.MemberOf -replace "CN=","" -replace "OU=","" -replace "DC=","" -replace ",","\" | Sort-Object
或者,如果您仍想继续使用您的方法,请将其与 distinguishedname
属性 一起使用,而不是 name
属性 - 像这样(用文本替换)
$grps = $_.MemberOf | Get-ADGroup | ForEach-Object {$_.DistinguishedName -replace "CN=","" -replace "OU=","" -replace "DC=","" -replace ",","\"} | Sort-Object
或者按照 Matt 在评论中的建议,只需使用 canonicalname
属性。
$grps = $_.MemberOf | Get-ADGroup -Properties canonicalname | select -ExpandProperty canonicalname
干杯,GJ
我同意 DistinguishedName 已经有了这些信息,但我认为使用 Get-AdGroup
来获取一些更友好的信息会更容易。对组的 CanonicalName
进行一些字符串操作,虽然效率可能不高,但会更容易使用。
$grps = $_.MemberOf | Get-AdGroup -Properties CanonicalName | ForEach-Object{
$CN = ($_.CanonicalName -Split "/")
"{0}\{1}" -f $CN[-2],$CN[-1]
}
或者,如果您愿意,也可以作为一个班轮。
$grps = $_.MemberOf | Get-AdGroup -Properties CanonicalName | ForEach-Object{$CN = ($_.CanonicalName -Split "/"); "{0}\{1}" -f $CN[-2],$CN[-1]}
我们所做的是获取 CanonicalName,它可以被认为是 Active Directory 中对象的路径。由于您只需要父容器,我们将路径分开并仅加入最后两部分。组对象及其容器。
从 CanonicalName
中获取倒数第二个元素并将组名附加到它可能会产生相同的结果。可能会好看一点
$grps = $_.MemberOf | Get-AdGroup -Properties CanonicalName | ForEach-Object{"{0}\{1}" -f ($_.CanonicalName -Split "/")[-2],$_.Name}
我不熟悉使用 Powershell 为 Active Directory 编写脚本,并尝试将用户拉出列表并枚举他们的组;但是,当我这样做时,结果信息仅包含在许多不同名称的 OU 下重复的组名称。在 Member Of 选项卡下的 AD Users and Computers 中查看它们显示了名称和 Active Directory 域服务文件夹,其中包含我需要的差异化信息,或者我可以使用 DistinguishedName,它的格式不是很好以提高可读性,但会也可以。
简化示例的问题:如果一个组名在不同的 OU 中是相同的(如 "TestUsers"),那么脚本当前会转储多个组名而不区分 "TestUsers, TestUsers, TestUsers",而不是在中显示基础 OU干净格式 "Michigan\TestUsers, NewYork\TestUsers" 或专有名称格式 "CN=TestUsers,CN=Michigan,etc";"CN=TestUsers,CN=NewYork,etc".
$alist = "Name`tAccountName`tDescription`twhenCreated`tAcctEnabled`tGroups`n"
$userlist = Get-ADUser -SearchBase "OU=Service Accounts,OU=Information Systems,DC=conteso,DC=local" -Filter * -Properties * | Select-Object -Property Name,SamAccountName,Description,EmailAddress,LastLogonDate,Manager,Title,Department,Company,whenCreated,Enabled,MemberOf | Sort-Object -Property Name
$userlist | ForEach-Object {
$grps = $_.MemberOf | Get-ADGroup | ForEach-Object {$_.Name} | Sort-Object
$arec = $_.Name,$_.SamAccountName,$_.Description,$_.whenCreated,$_.Enabled
$aline = ($arec -join "`t") + "`t" + ($grps -join "`t") + "`n"
$alist += $aline
}
$alist | Out-File C:\psscripts\service_accounts_groups.csv
感谢任何帮助!
由于“$_.memberof”属性 已经有了专有名称,您不需要再次将其传递给 Get-Adgroup。所以只需像这样替换你的 $grps 行
$grps = $_.MemberOf -replace "CN=","" -replace "OU=","" -replace "DC=","" -replace ",","\" | Sort-Object
或者,如果您仍想继续使用您的方法,请将其与 distinguishedname
属性 一起使用,而不是 name
属性 - 像这样(用文本替换)
$grps = $_.MemberOf | Get-ADGroup | ForEach-Object {$_.DistinguishedName -replace "CN=","" -replace "OU=","" -replace "DC=","" -replace ",","\"} | Sort-Object
或者按照 Matt 在评论中的建议,只需使用 canonicalname
属性。
$grps = $_.MemberOf | Get-ADGroup -Properties canonicalname | select -ExpandProperty canonicalname
干杯,GJ
我同意 DistinguishedName 已经有了这些信息,但我认为使用 Get-AdGroup
来获取一些更友好的信息会更容易。对组的 CanonicalName
进行一些字符串操作,虽然效率可能不高,但会更容易使用。
$grps = $_.MemberOf | Get-AdGroup -Properties CanonicalName | ForEach-Object{
$CN = ($_.CanonicalName -Split "/")
"{0}\{1}" -f $CN[-2],$CN[-1]
}
或者,如果您愿意,也可以作为一个班轮。
$grps = $_.MemberOf | Get-AdGroup -Properties CanonicalName | ForEach-Object{$CN = ($_.CanonicalName -Split "/"); "{0}\{1}" -f $CN[-2],$CN[-1]}
我们所做的是获取 CanonicalName,它可以被认为是 Active Directory 中对象的路径。由于您只需要父容器,我们将路径分开并仅加入最后两部分。组对象及其容器。
从 CanonicalName
中获取倒数第二个元素并将组名附加到它可能会产生相同的结果。可能会好看一点
$grps = $_.MemberOf | Get-AdGroup -Properties CanonicalName | ForEach-Object{"{0}\{1}" -f ($_.CanonicalName -Split "/")[-2],$_.Name}