Powershell - 解析Get-ADUser属性

时间:2015-03-12 18:03:48

标签: powershell

我想扫描Active Directory,并输出到.csv,“用户帐户”和“经理ID”。 Get-ADUserManager属性输出为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,输出不会改变。我也不确定我是否也会采用正确的方式 干杯

1 个答案:

答案 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的值。