Powershell - 将Active Directory用户名与电子邮件地址进行比较

时间:2012-09-05 01:57:45

标签: loops powershell foreach where

我目前正在尝试查找使用“firstname@domain.com”模型创建的所有AD用户,而不是新标准“FirstInitialLastName@domain.com”。我正在使用Quest ActiveRoles模块,特别是Get-QADUser来提取我的用户详细信息:

Get-QADUser -enabled -IncludedProperties PrimarySMTPAddress | ?{$_.Type -match "User"} | Select-Object FirstName,PrimarySMTPAddress ...

它为我提供了用户名和他们的SMTP地址列表。我难倒的地方是如何比较结果。

我认为规范化值(将“@ domain.com”添加到第一个名称字符串或从SMTP字符串中删除“@ domain.com”)然后执行-ieq测试将是最好的方法。我发现我可以做第一个:

%{ $address=$($_.FirstName + "@domain.com";) }

但我无法弄清楚如何针对PrimarySMTPAddress字符串测试$ address。我可以用:

创建第二个变量
%{ $smtp=$($_.PrimarySMTPAddress); }

并得到结果:

[PS] C:\>$addy -ieq $smtp
True

我只是不清楚如何在流中完成所有操作,以便我可以立即处理我的树。如果这是一个更适合脚本而不是单行的东西,那也没关系。来自BASH辉煌的世界,我的大脑只想把它排成一行。

2 个答案:

答案 0 :(得分:1)

Get-QADUser -Enabled -Email * -SizeLimit 0 | 
Where-Object {$_.Email.Split('@')[0] -eq $_.FirstName }

答案 1 :(得分:0)

试试这个:

Get-QADUser -enable -IncludedProperties PrimarySMTPAddress |
? { $_.PrimarySMTPAddress -match ("^"+[regex]::escape("$($_.firstname)")+"@domain.com") }