我想扫描Active Directory,并输出到.csv
,"用户帐户"和"经理ID"。 Get-ADUser
将Manager
属性输出为DN
。我在第二列中想要的是经理的员工编号。最终结果应如下所示:
User Account Manager
John 4342
Jack 5432
这是脚本:
$csvmaster = @()
$uacct = 'User Account'
$manager = 'Manager'
$ulist = get-aduser -filter {enabled -eq 'true'} -properties * | ? {$_.title -ne $null} | select GivenName, Surname, EmailAddress, EmployeeNumber, Title, Manager, Department, samaccountname -first 5
foreach ($u in $ulist)
{
$csvline = New-Object System.Object
$csvline | Add-Member -MemberType NoteProperty -name $uacct -value $u.givenname
$csvline | Add-Member -MemberType NoteProperty -name $manager -value (Get-aduser $u.manager -Properties * | select employeenumber | ? { $_ -match 'd'})
$csvmaster += $csvline
}
$csvmaster #Test output to console
这是我得到的:
User Manager
John @{employeenumber=1238}
Jack @{employeenumber=1593}
输出值正确。也就是说,我正在获取经理的ID,我只想显示号码。我尝试了正则表达式匹配,但我不确定输出是 PSCustomObject 的事实是否阻止它工作,因为如果我从foreach
循环中删除| ? { $_ -match 'd'}
,输出不会改变。我也不确定我是否以正确的方式做到这一点。
干杯
这个很容易...您需要使用选择 cmdlet 的 -ExpandProperty 开关,如下所示:
$csvline | Add-Member -MemberType NoteProperty -name $manager -value (Get-aduser $u.manager -Properties * | select -Expand employeenumber | ? { $_ -match 'd'})
然后,不是获取具有 1 个属性的 ADUser 对象,而是获取一个字符串对象,该对象是 employeenumber 的值。