我正在尝试编写一个脚本,该脚本从包含目标组名称(已过滤为至少有一个活动用户)的文本文件中读取并获取以下参数:姓名、职位、部门、经理姓名和经理电子邮件。理想情况下,结果仅显示已启用且具有经理姓名和电子邮件的用户。
根据一些密集的googling搜索和我在编码和ps方面的有限知识,这是我到目前为止所拥有的:
[string[]]$arrayFromFile = Get-Content -Path 'C:\sslvpn-active.txt'
foreach($group in $arrayFromFile){
$searchb = "CN="+"$group"+",OU=SSLVPN,OU=UserGroupsRAS,DC=xi,DC=xxxinc,DC=net"
foreach($user in $searchb)
{
Write-Output $group
Write-Output "----------------------------"
Get-ADUser -Filter { Enabled -eq $true } -Properties Title,Department,Manager -SearchScope Subtree | select Name, Title, Department, @{n="ManagerName";e={get-aduser $_.manager | select -ExpandProperty name}}, @{n="ManagerMail";e={get-aduser $_.manager -properties mail | select -ExpandProperty mail}}
}
}文本文件如下所示
SSLVPN-APC
SSLVPN-XYZ
SSLVPN-Microsoft
SSLVPN-Google
...我希望结果看起来像这样
SSLVPN-ABC
----------------------
Name : Joe Smith
Title : IT Engineer 2
Department : IT Support
ManagerName : Billy George
ManagerMail : Billy.George@xxx.com
Name : Matt Damon
Title : IT Engineer 3
Department : IT Support
ManagerName : Billy George
ManagerMail : Billy.George@xxx.com
SSLVPN-XYZ
----------------------
Name : Jen Loo
Title : Product Designer 3
Department : Product Design
ManagerName : Ben Smit
ManagerMail : Ben.Smit@xxx.com
...任何帮助都是非常感谢的!谢谢
发布于 2021-01-11 05:52:06
看起来你永远不会获得群组成员资格。从您的示例开始,尝试以下代码:
$Properties = @( 'Title', 'Department', 'Manager' )
[string[]]$arrayFromFile = Get-Content -Path 'C:\sslvpn-active.txt'
foreach($group in $arrayFromFile){
$searchb = "CN="+"$group"+",OU=SSLVPN,OU=UserGroupsRAS,DC=xi,DC=xxxinc,DC=net"
Get-ADGroupMember $searchb |
Get-ADUser -Properties $Properties |
Where-Object{ $_.Enabled } |
Select-Object Name, Title, Department,
@{Name = "ManagerName"; Expression = { (Get-ADUser $_.Manager).Name }},
@{Name = "ManagerMail"; Expression = { (Get-ADUser $_.Manager -Properties mail).Mail }}
}注意:内部循环的缺失。然而,我不确定你是否需要这个循环。此外,您可能不需要连接可分辨名称。
$Properties = @( 'Title', 'Department', 'Manager' )
Get-Content -Path 'C:\sslvpn-active.txt' |
Get-ADGroupMember |
Get-ADUser -Properties $Properties |
Where-Object{ $_.Enabled } |
Select-Object Name, Title, Department,
@{Name = "ManagerName"; Expression = { (Get-ADUser $_.Manager).Name }},
@{Name = "ManagerMail"; Expression = { (Get-ADUser $_.Manager -Properties mail).Mail }这在某种程度上取决于您的组的名称,如果它们在环境中是唯一的,等等。
您还可以将一些表达式放在顶部:
$Properties = @( 'Title', 'Department', 'Manager' )
$ManagerName = @{Name = "ManagerName"; Expression = { (Get-ADUser $_.Manager).Name }}
$ManagerMail = @{Name = "ManagerMail"; Expression = { (Get-ADUser $_.Manager -Properties mail).Mail }}
Get-Content -Path 'C:\sslvpn-active.txt' |
Get-ADGroupMember |
Get-ADUser -Properties $Properties |
Where-Object{ $_.Enabled } |
Select-Object Name, Title, Department, $ManagerName, $ManagerMail我想添加一个示例来获取您提到的格式:
$ADProps = @( 'Title', 'Department', 'Manager' )
$Props =
$ADProps +
@(
$ManagerName = @{Name = "ManagerName"; Expression = { (Get-ADUser $_.Manager).Name }}
$ManagerMail = @{Name = "ManagerMail"; Expression = { (Get-ADUser $_.Manager -Properties mail).Mail }}
)
ForEach($Group in Get-Content -Path 'C:\temp\sslvpn-active.txt' )
{
$Group = Get-ADGroup $Group
$Group |
Get-ADGroupMember |
Get-ADUser -Properties $ADProps |
Select-Object $Props |
ForEach-Object{
$Group.Name
'----------------------'
($_ | Format-List | Out-String).Trim()
""
}
}如果我想到了更好的方法,请进一步编辑。
https://stackoverflow.com/questions/65658498
复制相似问题