【发布时间】:2022-10-21 20:28:48
【问题描述】:
问题分解
所以我试图返回一个用户所在的所有安全用户组的列表,但让它被经理分解。我采取了几个步骤来做到这一点:
- 让所有用户进入用户列表
- 使用用户列表收集经理列表。
- 将经理列表排序为唯一列表。
- 获取经理 SamAccountNames。
- 从经理那里获取 directreports 属性以创建下属列表。
- 获取他们的 SamAccountNames
- 使用 SamAccountNames 提取 AD 安全组和描述。
小块使用时,一切都有效。如果您为 $DirectReports 声明一些名称,然后运行最终的 for 循环,它会适当地返回所有内容。
但是,在运行脚本时,它只返回经理名称、直接报告名称和安全组的所有行,但安全组的行中没有任何内容。
没有相关的错误信息。在此先感谢您的帮助。
代码
#Search Organizational Unit to find all Users $UserList = @(Get-ADUser -Filter * -SearchBase "COMPANY'S ORG UNITS").SamAccountName #For every user found in OU, select their manager foreach ($User in $UserList) { $Manager = @(Get-ADUser $User -Properties * | Select-Object @{Name = "Manager";Expression = {($_.manager -split ',*..=')[1]}}) $Managers += $Manager } #Sort and Select Unique Managers $Managers = $Managers | Sort-Object -Property Manager -Unique #Get SamAccountName From Manager Name for ($a = 0; $a -lt $Managers.Count; $a++) { $FilterString = "Name -eq '{0}'" -f $Managers[$a].Manager $SAM = @(Get-ADUser -Filter "$FilterString" | Select SamAccountName) $SAMs += $SAM } #Get subordinates for each manager for ($b=0; $b -lt 1; $b++) { #Get direct reporting individuals, second line cleans up output. $DirectReports = @(Get-ADUser $SAMs[$b].SamAccountName -Properties directreports | select-object -ExpandProperty DirectReports) $DirectReports = $DirectReports -replace "(CN=)(.*?),.*",'$2' $Managers[$b+1] Write-Output "`n" #Get SAM names for direct reporting individuals and use to get user properties for ($c = 0; $c -lt $DirectReports.Count; $c++) { $FilterString2 = "Name -eq '{0}'" -f $DirectReports[$c] $DirectReports[$c] $SAM2 = @(Get-ADUser -Filter "$FilterString2") $SAM2.SamAccountName Get-ADPrincipalGroupMembership -Identity $SAM2.SamAccountName | Get-ADGroup -Properties * | select name, description Write-Output "`n" } }
【问题讨论】:
-
我不明白第 5 步 - 您想在搜索单个用户的组成员身份时发现所有具有相同经理的用户?
-
@MathiasR.Jessen 嘿,是的,我找出所有经理,然后找出他们所有的下属,这对于直接报告来说更容易。我知道这是一种回合,但它完成了我需要做的事情。有没有更简单的方法来使用标题管理器拉动用户并从 AD 获取他们的直接报告?
-
当应用
Format-Table格式时,如果对象具有 4 个或更少的属性,则会隐式发生这种情况,第一的集合中的对象根据其属性锁定所有显示列。如果后续对象有不同的属性,仅显示与第一个共享的那些;如果给定对象不共享,则显示一个空行。这只是一个显示问题,您可以通过将对象传送到... | Format-List来验证。请参阅this answer 了解更多信息。 -
如果这确实是您的问题,我们可以重复关闭您的问题。
标签: powershell active-directory