PowerShell中的Manager报告
我正在使用一个名为Get ADdirectReports的函数,该函数递归地获取向特定经理报告的所有用户(如果经理负责多个团队,则包括其他经理及其团队成员)。我试图返回所有广告用户,看看他们是否递归地向定义的经理报告 代码PowerShell中的Manager报告,powershell,Powershell,我正在使用一个名为Get ADdirectReports的函数,该函数递归地获取向特定经理报告的所有用户(如果经理负责多个团队,则包括其他经理及其团队成员)。我试图返回所有广告用户,看看他们是否递归地向定义的经理报告 代码 好的,所以这不是最优雅的,当然也不是最快的方法,但它应该做你想做的 function Get-ADTopLevelManager{ param( $identity ) $result = New-Object System.Colle
好的,所以这不是最优雅的,当然也不是最快的方法,但它应该做你想做的
function Get-ADTopLevelManager{
param(
$identity
)
$result = New-Object System.Collections.ArrayList
$manager = Get-ADUser $identity -Properties Manager
$result.Add($manager) | Out-Null
$managerDN = $manager.Manager
while($manager -ne $null){
$manager = $null
$manager = Get-AdUser -Filter {DistinguishedName -eq $managerDN} -Properties Manager
$managerDN = $manager.Manager
if($manager.SamAccountName -eq $result[-1].SamAccountName){
$manager = $null
}else{
$result.Add($manager) | Out-Null
}
}
$result
}
$allUsers = New-Object System.Collections.ArrayList
foreach($adUser in Get-AdUser -Filter *){
$temp = New-Object PSCustomObject -Property @{'User' = $adUser.SamAccountName; 'Managers' = Get-ADTopLevelManager $adUser.SamAccountName}
$allUsers.Add($temp) | Out-Null
}
因此,在这一点上,您有一个对象集合,它将任何给定用户链接到他们的所有管理器。假设您想知道,在任何地方,用户的命令链中都有哪些Manager1:
$allUsers | Where-Object{$_.Managers -Contains Manager1}
或者,如果您想了解用户User1的直接管理者:
($allUsers | Where-Object{$_.User -eq User1}).Managers[0]
或者,如果您想了解User1的顶级管理者:
($allUsers | Where-Object{$_.User -eq User1}).Managers[-1]
好的,所以这不是最优雅的,当然也不是最快的方法,但它应该做你想做的
function Get-ADTopLevelManager{
param(
$identity
)
$result = New-Object System.Collections.ArrayList
$manager = Get-ADUser $identity -Properties Manager
$result.Add($manager) | Out-Null
$managerDN = $manager.Manager
while($manager -ne $null){
$manager = $null
$manager = Get-AdUser -Filter {DistinguishedName -eq $managerDN} -Properties Manager
$managerDN = $manager.Manager
if($manager.SamAccountName -eq $result[-1].SamAccountName){
$manager = $null
}else{
$result.Add($manager) | Out-Null
}
}
$result
}
$allUsers = New-Object System.Collections.ArrayList
foreach($adUser in Get-AdUser -Filter *){
$temp = New-Object PSCustomObject -Property @{'User' = $adUser.SamAccountName; 'Managers' = Get-ADTopLevelManager $adUser.SamAccountName}
$allUsers.Add($temp) | Out-Null
}
因此,在这一点上,您有一个对象集合,它将任何给定用户链接到他们的所有管理器。假设您想知道,在任何地方,用户的命令链中都有哪些Manager1:
$allUsers | Where-Object{$_.Managers -Contains Manager1}
或者,如果您想了解用户User1的直接管理者:
($allUsers | Where-Object{$_.User -eq User1}).Managers[0]
或者,如果您想了解User1的顶级管理者:
($allUsers | Where-Object{$_.User -eq User1}).Managers[-1]
不完全是你想要的,但我想还是值得一试
function GetADUserManagerRecursive {
param (
$Identity
)
$UserAD = Get-ADUser $Identity -Properties Manager
$DirectManager = $UserAD.Manager
$DirectManager = Get-ADUser -Identity $DirectManager -Properties Manager
Write-Output $DirectManager.DistinguishedName
if ( $DirectManager.Manager -ne $UserAD.DistinguishedName ) {
GetADUserManagerRecursive -Identity $DirectManager
}
}
完成后,您可能希望递归获取特定用户的所有管理者,将其保存在变量中,然后检查变量中是否有管理者:
$managers = GetADUserManagerRecursive -Identity user
$managers = $managers | select -unique
(Get-ADUser bossname ).SamaccountName -match $managers.SamaccountName
PS请注意,您可能需要将$DirectManager.Manager-ne$UserAD.discrimitedName
更改为$DirectManager.Manager-ne$null
。
我见过一些公司,最顶尖的老板都是自己的管理者,这并不完全是你想要的,但我想还是值得一试
function GetADUserManagerRecursive {
param (
$Identity
)
$UserAD = Get-ADUser $Identity -Properties Manager
$DirectManager = $UserAD.Manager
$DirectManager = Get-ADUser -Identity $DirectManager -Properties Manager
Write-Output $DirectManager.DistinguishedName
if ( $DirectManager.Manager -ne $UserAD.DistinguishedName ) {
GetADUserManagerRecursive -Identity $DirectManager
}
}
完成后,您可能希望递归获取特定用户的所有管理者,将其保存在变量中,然后检查变量中是否有管理者:
$managers = GetADUserManagerRecursive -Identity user
$managers = $managers | select -unique
(Get-ADUser bossname ).SamaccountName -match $managers.SamaccountName
PS请注意,您可能需要将$DirectManager.Manager-ne$UserAD.discrimitedName
更改为$DirectManager.Manager-ne$null
。
我见过一些公司,其中最顶尖的老板是自己的经理这一行$Users=Get AdUser-Filter*-Properties*| Select SamAccountName从存储在$Users数组中的广告对象中删除除SamAccountName之外的所有属性。包括.Manager字段。为什么用户的用户名包含管理员的用户名?更重要的是,为什么自定义对象(即$user)包含数组(假设Get ADDirectReports返回多个结果)?基本上,您需要使用此代码并逐行了解它的具体操作。我试图从这两个方面获取SamAccountName,因为$Manager和$Users都只输出SamAccountName。逻辑是,如果其中一个$Managers SamAccountName与$Users SamAccountName匹配,它将向$Manager报告$User reports。此行$Users=Get AdUser-Filter*-Properties*| Select SamAccountName从存储在$Users数组中的AD对象中删除除SamAccountName以外的所有属性。包括.Manager字段。为什么用户的用户名包含管理员的用户名?更重要的是,为什么自定义对象(即$user)包含数组(假设Get ADDirectReports返回多个结果)?基本上,您需要使用此代码并逐行了解它的具体操作。我试图从这两个方面获取SamAccountName,因为$Manager和$Users都只输出SamAccountName。逻辑是,如果其中一个$Managers SamAccountName与$Users SamAccountName匹配,它将向$Manager.Oh报告$User reports,您可能应该使该函数的名称更准确。我最初写它只是为了给一个用户返回顶级经理,然后我看到了你的澄清评论。哦,你可能应该让这个函数的名称更准确。我最初写它只是为了给一个用户返回顶级经理,然后我看到了你的澄清评论。