我想扫描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的事实使它无法工作,因为如果我从| ? { $_ -match '\d'}
循环中删除foreach
,输出不会改变。我也不确定我是否也会采用正确的方式
干杯
答案 0 :(得分:1)
这很容易......你需要使用Select cmdlet' s -ExpandProperty开关,如下:
$csvline | Add-Member -MemberType NoteProperty -name $manager -value (Get-aduser $u.manager -Properties * | select -Expand employeenumber | ? { $_ -match '\d'})
然后,不是获取具有1个属性的ADUser对象,而是获得一个字符串对象,该对象是employeenumber的值。