Powershell 特定部门中的哪些成年人是Exchange分发组的经理?

Powershell 特定部门中的哪些成年人是Exchange分发组的经理?,powershell,active-directory,exchange-server,Powershell,Active Directory,Exchange Server,我在我们的广告中列出了以下用户: Get-ADUser -Filter * -Properties department | Where-Object {$_.department -Like "F0*"} | Select sAMAccountName, department 它输出所有感兴趣的用户 现在,我想查看这些用户,并找到他们中的所有人,他们都是一个或多个Exchange通讯组的管理员。并且有一个带有用户名和通讯组名称的输出,这可能吗?正如Paxz已经评论的那样,您应

我在我们的广告中列出了以下用户:

Get-ADUser -Filter * -Properties department |
    Where-Object {$_.department -Like "F0*"} |
    Select sAMAccountName, department
它输出所有感兴趣的用户


现在,我想查看这些用户,并找到他们中的所有人,他们都是一个或多个Exchange通讯组的管理员。并且有一个带有用户名和通讯组名称的输出,这可能吗?

正如Paxz已经评论的那样,您应该在这个问题上选择“另一种方式”。如果要获取通讯组经理的姓名和部门,请首先获取这些姓名和部门

像这样的东西可能会做到:

# get the distribution groups where the ManagedBy property is set
Get-DistributionGroup | Where-Object { $_.ManagedBy } | ForEach-Object {
    # then go through all possible listed managers and get their DisplayName and Department
    foreach ($id in $_.ManagedBy) {
        try {
            # use '-ErrorAction Stop' to make sure the catch block is entered upon failure
            $manager = Get-AdUser -Identity $id -Properties DisplayName, Department -ErrorAction Stop
            $mgrName = $manager.DisplayName
            $mgrDept = $manager.Department
        }
        catch {
            # output failed result(s)
            $mgrName = 'Obsolete user'
            $mgrDept = 'Unknown'
        }
        # output the result(s) as PSObjects
        New-Object -TypeName PSObject -Property @{
            'Distribution Group' = $_.Name
            'Manager'            = $mgrName
            'Department'         = $mgrDept
        }
    }
}
如果要将结果存储在csv文件中,可以将脚本扩展为以下内容:

$fileName = '<Enter the full path and filename here for the output csv file>'
# collect all results in an array
$results = @()
Get-DistributionGroup | Where-Object { $_.ManagedBy } | ForEach-Object {
    foreach ($id in $_.ManagedBy) {
        try {
            # use '-ErrorAction Stop' to make sure the catch block is entered upon failure
            $manager = Get-AdUser -Identity $id -Properties DisplayName, Department -ErrorAction Stop
            $mgrName = $manager.DisplayName
            $mgrDept = $manager.Department
        }
        catch {
            # output failed result(s)
            $mgrName = 'Obsolete user'
            $mgrDept = 'Unknown'
        }
        $results += New-Object -TypeName PSObject -Property @{
            'Distribution Group' = $_.Name
            'Manager'            = $mgrName
            'Department'         = $mgrDept
    }
}

$results | Export-Csv -Path $fileName -UseCulture -NoTypeInformation -Force
$fileName=''
#收集数组中的所有结果
$results=@()
获取DistributionGroup | Where对象{$\.ManagedBy}ForEach对象{
foreach($id,单位为$\u.ManagedBy){
试一试{
#使用“-ErrorAction Stop”(错误动作停止)以确保在发生故障时输入捕捉块
$manager=Get AdUser-Identity$id-Properties DisplayName,Department-error操作停止
$mgrName=$manager.DisplayName
$mgrDept=$manager.Department
}
抓住{
#输出失败的结果
$mgrName=‘过时用户’
$mgrDept='Unknown'
}
$results+=新对象-类型名PSObject-属性@{
“通讯组”=$\名称
“经理”=$mgrName
“部门”=$mgrDept
}
}
$results |导出Csv-Path$fileName-UseCulture-NoTypeInformation-Force

Get DistributionGroup
有一个
managedby
变量,用于存储每个组的管理器。这将帮助您创建一个循环,以实现预期的输出。非常感谢,Get Aduser似乎有问题,但在查找过时对象时它会停止。(Get AdUser:找不到标识为“”的对象),我尝试了-Erroraction SilentlyContinue,但它不起作用,尝试获取Try/Catch,但不知道如何将其写入。我编辑了我的答案,通过添加
Try{}..Catch{}
块捕获过时的用户