PowerShell Get-ADuser list employeenumber和email到输出文件

时间:2016-12-07 22:14:45

标签: powershell for-loop foreach active-directory ldap

我试图获取已启用用户的员工编号(employeenumber)及其电子邮件地址(mail)的列表,并在没有标题的情况下对其进行格式化,并在字段之间使用单个空格PowerShell中。

该脚本大部分都有效,但如果employeenumber字段为空,我想将其排除。如果电子邮件地址为空,则无关紧要。如果员工编号不存在,我现在得到的是空格。

我的剧本:

Get-ADUser -Filter 'enabled -eq $true' -Properties employeenumber, mail |
  select -Property employeenumber, mail |
  Format-Table -HideTableHeaders |
  Out-File allusers_email.txt

我尝试将Get-ADUser放入数组并执行foreach,但输出为空。我使用PowerGUI,当单步执行foreach时,employeenumber的值是用户的可分辨名称,当脚本完成时输出文件为空。

我还使用以下内容尝试删除多余的空格,但它无效。

(gc allusers_email.txt) |
  ? {$_.Trim() -ne ""} |
  Set-Content allusers_email.txt

使用Kiril解决方案我能够得到我需要的东西。我现在需要更改它,以便只输出今天已更改的用户对象。我添加了一个变量来包含今天的日期,我相信我应该使用Get-ADObject并对whenchanged属性进行过滤。但是,我收到了错误。我在Get-ADObject命令中缺少什么?

$dte=Get-Date
Get-ADUser -Filter 'enabled -eq $true' -Properties employeenumber, mail, ipPhone, mobile |
Where { $_.employeenumber -ne $null } |
Get-ADObject -Filter 'whenchanged -eq $dte'
Select @{Name='Custom';Expression={('{0} {1} {2} {3}' -f   $_.employeenumber,$_.mail,$_.ipPhone,$_.mobile).Trim()}} |
Select -ExpandProperty Custom |
Out-File EMailStream.txt

我最终使用以下脚本:

$dte=Get-Date -Hour 0 -Minute 00 -Second 00
Get-ADUser -Filter 'enabled -eq $true' -Properties whenchanged, employeenumber, mail, ipPhone, mobile | 
Where { $_.employeenumber -ne $null -and $_.whenchanged -gt $dte } |
Select @{Name='Custom';Expression={('{0} {1} {2} {3}' -f $_.employeenumber,$_.mail,$_.ipPhone,$_.mobile).Trim()}} |
Select -ExpandProperty Custom |
Out-File EMailStream.txt

1 个答案:

答案 0 :(得分:0)

尝试添加过滤条件,并创建组合属性值,如下所示:

Get-ADUser -Filter 'enabled -eq $true' -Properties employeenumber, mail |
  Where { $_.employeenumber -ne $null } |
  Select @{Name='Custom';Expression={('{0} {1}' -f $_.employeenumber,$_.mail).Trim()}} |
  Select -ExpandProperty Custom |
  Out-File allusers_email.txt