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{}
块捕获过时的用户