PowerShell 列出具有经理的组中的用户,但无法格式化经理字段
PowerShell List users in groups with managers but cannot format manager field
我是从头开始写的,所以如果有更好的方法,请多多指教。
我试图通过对 AD 组名称使用通配符来列出来自多个 AD 组的所有用户,并包含每个用户的信息,包括他们的经理。
这行得通,但我不知道如何更好地格式化经理字段;它 return 是完整的 DN。
我试过:
- 将 $mgr 格式化为字符串(.length 等,但这不起作用,似乎也无法将其转换为字符串)
- 格式为数组(只有 1 个值)
- 我认为它是一个对象但无法格式化它
- 格式化为表达式(我第一次尝试)- 它有点工作,但在每一行中显示字段名称
如何更好地格式化经理字段,或return 经理姓名开头?
最终数据实际上正在导出到 CSV 中,因此格式正确。
谢谢,
码头
Clear-Host
$FilterToUse = "grp-Servers-Win-"
$FilterToUse2 = $FilterToUse + "*"
$Groups = Get-ADGroup -filter {name -like $FilterToUse2}
$headers = "GroupName,Network ID,Name,UserType,Check"
Write-Host $headers
ForEach ($Group in $Groups) {
Get-ADGroupMember $group | ForEach-Object {
$mgr = Get-ADUser $_.samaccountname -Properties manager | Select -Property manager
#$mgr = Get-ADUser $_.samaccountname -Properties manager | Select @{label='ad-manager';expression={$_.manager -replace '^CN=|,.*$'}}
if ($_.samaccountname -like "ZZZ*") {
Write-host ($Group.Name + "," + $_.samaccountname + "," + $_.name + "," + $_.objectclass + ",CatA," + $mgr)
}
elseif ($_.samaccountname -like "YYY*") {
Write-Host ($Group.Name + "," + $_.samaccountname + "," + $_.name + "," + $_.objectclass + ",CatB," + $mgr)
}
elseif ($_.samaccountname -like "XXX*") {
Write-Host ($Group.Name + "," + $_.samaccountname + "," + $_.name + "," + $_.objectclass + ",CatC," + $mgr)
}
else {
Write-Host ($Group.Name + "," + $_.samaccountname + "," + $_.name + "," + $_.objectclass + ",check," + $mgr)
}
}
}
根据上面的评论,但为了更简单地解释发生了什么:
$mgr = (Get-ADUser $_.samaccountname -Properties Manager | Select-Object Manager).Manager -replace '^CN=|,.*$'
或
$mgr = (Get-ADUser $_.samaccountname -Properties Manager | Select-Object -ExpandProperty Manager) -replace '^CN=|,.*$'
我是从头开始写的,所以如果有更好的方法,请多多指教。
我试图通过对 AD 组名称使用通配符来列出来自多个 AD 组的所有用户,并包含每个用户的信息,包括他们的经理。 这行得通,但我不知道如何更好地格式化经理字段;它 return 是完整的 DN。 我试过:
- 将 $mgr 格式化为字符串(.length 等,但这不起作用,似乎也无法将其转换为字符串)
- 格式为数组(只有 1 个值)
- 我认为它是一个对象但无法格式化它
- 格式化为表达式(我第一次尝试)- 它有点工作,但在每一行中显示字段名称
如何更好地格式化经理字段,或return 经理姓名开头? 最终数据实际上正在导出到 CSV 中,因此格式正确。
谢谢, 码头
Clear-Host
$FilterToUse = "grp-Servers-Win-"
$FilterToUse2 = $FilterToUse + "*"
$Groups = Get-ADGroup -filter {name -like $FilterToUse2}
$headers = "GroupName,Network ID,Name,UserType,Check"
Write-Host $headers
ForEach ($Group in $Groups) {
Get-ADGroupMember $group | ForEach-Object {
$mgr = Get-ADUser $_.samaccountname -Properties manager | Select -Property manager
#$mgr = Get-ADUser $_.samaccountname -Properties manager | Select @{label='ad-manager';expression={$_.manager -replace '^CN=|,.*$'}}
if ($_.samaccountname -like "ZZZ*") {
Write-host ($Group.Name + "," + $_.samaccountname + "," + $_.name + "," + $_.objectclass + ",CatA," + $mgr)
}
elseif ($_.samaccountname -like "YYY*") {
Write-Host ($Group.Name + "," + $_.samaccountname + "," + $_.name + "," + $_.objectclass + ",CatB," + $mgr)
}
elseif ($_.samaccountname -like "XXX*") {
Write-Host ($Group.Name + "," + $_.samaccountname + "," + $_.name + "," + $_.objectclass + ",CatC," + $mgr)
}
else {
Write-Host ($Group.Name + "," + $_.samaccountname + "," + $_.name + "," + $_.objectclass + ",check," + $mgr)
}
}
}
根据上面的评论,但为了更简单地解释发生了什么:
$mgr = (Get-ADUser $_.samaccountname -Properties Manager | Select-Object Manager).Manager -replace '^CN=|,.*$'
或
$mgr = (Get-ADUser $_.samaccountname -Properties Manager | Select-Object -ExpandProperty Manager) -replace '^CN=|,.*$'