我使用PowerShell进行有限的,自学成才的经验,所以这可能是基本的,但我似乎无法做到正确。
我在Active Directory中,我需要提取一个用户列表,其中的电子邮件地址并不是以他们的SamAccountName开头的。 (因此,如果您的登录名是jdoe,但您的电子邮件是johndoe@mycompany.com,那么您的个人资料将被退回)
我已经得到了我需要的大部分内容......但我无法弄清楚如何将两种属性相互比较。
现在我有
Get-ADUser -Filter 'enabled -eq $true' -Properties *|
Where {$_.PasswordNeverExpires -eq $false} |
Select Name, SamAccountName, EmailAddress, PasswordNeverExpires
我尝试了一些不同的东西来过滤我需要的东西,下面的命令显示了我想要的东西(但当然这种语法不起作用)
Get-ADUser -Filter 'enabled -eq $true' -Properties *|
Where {$_.PasswordNeverExpires -eq $false} |
Where-Object EmailAddress -Contains SamAccountName |
Select Name, SamAccountName, EmailAddress, PasswordNeverExpires
谢谢!
答案 0 :(得分:3)
在第二个管道元素中使用Where-Object
过滤器的脚本块:
Where-Object { $_.EmailAddress -notlike "$($_.SamAccountName)*" }
您甚至可以使用-and
运算符将其与第一个过滤器结合使用:
Where-Object { $_.PasswordNeverExpires -eq $false -and $_.EmailAddress -notlike "$($_.SamAccountName)*" }
最后,仅指定您需要的属性而不是-Properties *
(无需等待域控制器返回您不需要的数据):
$Properties = 'Name','SamAccountName','EmailAddress','PasswordNeverExpires'
Get-ADUser -Filter 'enabled -eq $true' -Properties $Properties |Where-Object {
$_.PasswordNeverExpires -eq $false -and
$_.EmailAddress -notlike "$($_.SamAccountName)*"
} |Select-Object $Properties