powershell递归检索组成员
powershell retrieve members of group recursively
我有一个非常大的审计项目,我希望将其自动化。
我需要获取组中每个用户的姓名、SamAccountName、职位和部门。问题是,该组中有组,这些组中有组。另一个问题是大约 99% 的组在其显示名称(不是 SamAccountName)中都有一个星号。
这是我目前拥有的代码,它工作正常,直到它收到一个名称中带有星号的组......(因此 .Replace("*","") 部分......任何人都有关于如何解决这个问题的想法?
function Get-NestedGroupMember {
[CmdletBinding()]
param(
[Parameter(Mandatory)]
[string]$Group
)
$broke = @();
## Find all members in the group specified
$members = Get-ADGroupMember -Identity $Group
foreach ($member in $members){
## If any member in that group is another group just call this function again
if ($member.objectClass -eq 'group'){
$memberGroup = $($member.Name).Replace("*", "")
try{
Get-NestedGroupMember -Group "$($memberGroup)"
}catch{
$broke += "$($memberGroup)`n"
}
}else{
## otherwise, just output the non-group object (probably a user account)
$member.Name
}
}
Write-Host "`nThe following groups could not be found automatically.`n`n$($broke)"
}
$getGroup = Read-Host -Prompt "Group name"
Get-NestedGroupMember $getGroup
正如 Bill_Stewart 所说,您正在尝试实现您已经存在的功能。 Get-ADGroupMember 有一个 -Recursive 参数,它将搜索所有嵌套组并为您获取成员。然后,您可以将输出通过管道传输到 select 并仅获取您关心的属性。
AD:
TopGroup
Betty
Bob
NestedGroup1
Joe
Frank
NestedGroup2
George
Herman
使用递归
Get-AdGroupMember TopGroup -Recursive | Select-Object SamAccountName
Betty
Bob
Joe
Frank
George
Herman
我有一个非常大的审计项目,我希望将其自动化。
我需要获取组中每个用户的姓名、SamAccountName、职位和部门。问题是,该组中有组,这些组中有组。另一个问题是大约 99% 的组在其显示名称(不是 SamAccountName)中都有一个星号。
这是我目前拥有的代码,它工作正常,直到它收到一个名称中带有星号的组......(因此 .Replace("*","") 部分......任何人都有关于如何解决这个问题的想法?
function Get-NestedGroupMember {
[CmdletBinding()]
param(
[Parameter(Mandatory)]
[string]$Group
)
$broke = @();
## Find all members in the group specified
$members = Get-ADGroupMember -Identity $Group
foreach ($member in $members){
## If any member in that group is another group just call this function again
if ($member.objectClass -eq 'group'){
$memberGroup = $($member.Name).Replace("*", "")
try{
Get-NestedGroupMember -Group "$($memberGroup)"
}catch{
$broke += "$($memberGroup)`n"
}
}else{
## otherwise, just output the non-group object (probably a user account)
$member.Name
}
}
Write-Host "`nThe following groups could not be found automatically.`n`n$($broke)"
}
$getGroup = Read-Host -Prompt "Group name"
Get-NestedGroupMember $getGroup
正如 Bill_Stewart 所说,您正在尝试实现您已经存在的功能。 Get-ADGroupMember 有一个 -Recursive 参数,它将搜索所有嵌套组并为您获取成员。然后,您可以将输出通过管道传输到 select 并仅获取您关心的属性。
AD:
TopGroup
Betty
Bob
NestedGroup1
Joe
Frank
NestedGroup2
George
Herman
使用递归
Get-AdGroupMember TopGroup -Recursive | Select-Object SamAccountName
Betty
Bob
Joe
Frank
George
Herman