Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PowerShell中的Manager报告_Powershell - Fatal编程技术网

PowerShell中的Manager报告

PowerShell中的Manager报告,powershell,Powershell,我正在使用一个名为Get ADdirectReports的函数,该函数递归地获取向特定经理报告的所有用户(如果经理负责多个团队,则包括其他经理及其团队成员)。我试图返回所有广告用户,看看他们是否递归地向定义的经理报告 代码 好的,所以这不是最优雅的,当然也不是最快的方法,但它应该做你想做的 function Get-ADTopLevelManager{ param( $identity ) $result = New-Object System.Colle

我正在使用一个名为Get ADdirectReports的函数,该函数递归地获取向特定经理报告的所有用户(如果经理负责多个团队,则包括其他经理及其团队成员)。我试图返回所有广告用户,看看他们是否递归地向定义的经理报告

代码


好的,所以这不是最优雅的,当然也不是最快的方法,但它应该做你想做的

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,您可能应该使该函数的名称更准确。我最初写它只是为了给一个用户返回顶级经理,然后我看到了你的澄清评论。哦,你可能应该让这个函数的名称更准确。我最初写它只是为了给一个用户返回顶级经理,然后我看到了你的澄清评论。