[英]Comparing multiple email address using powershell match
我有一个包含 2000 个 email 地址的 CSV 文件。 我正在使用 PowerShell 检查用户是否在 AD 中处于活动状态。 另一位开发人员为我编写了 PowerShell 脚本来执行此操作,但他仅使用 email 格式的主域来匹配,他没有添加它可能具有的子域。 我们的一些 email 地址在 @ 符号后有一个 3 部分的 email 地址。
比如他的代码:
foreach ($user in $users) {
Write-Host $user.email
if ($user.email -match "\@mycompany\.com$") {
$status = "NOT FOUND"
# loop through possible AD domains until there is a hit
foreach ($domain in "na","au","eu","as") {
if ($status -eq "NOT FOUND") {
Write-Host " $($domain)" -NoNewline
$status = Get-UserFromEmail -EMail $user.email -ADDomain $domain
Write-Host $status
}
else {
break
}
}
Write-Host
Add-Content -Path $outcsv -Value "$($user.email),$($user.type),`"$($status)`""
}
else {
Add-Content -Path $outcsv -Value "$($user.email),$($user.type),NOT MYCOMPANY"
}
我需要做的是获取匹配以检查它是两部分还是三部分 email 地址。 @consultant.mycompany.com 或 @mycompany.com。
对此 PowerShell 新手的任何见解将不胜感激。
这是测试多个 email 域中成员资格的一种方法。 所有域都在同一个example.com
中,但它们很容易在testing.com
或wizbang.org
中。
这演示了这个想法,我想你可以根据需要将它插入到你的脚本中。 [咧嘴笑]
它能做什么...
$
以将模式锚定到 email 地址的末尾编码...
$EmailList = @(
'ABravo@example.com'
'BCharlie@more.example.com'
'CDelta@example.com'
'DEcho@zigzag.papers.com'
'EFoxtrot@even.more.example.com'
)
$DomainList = @(
'@example.com'
'@more.example.com'
'@even.more.example.com'
)
$Regex_DL = $DomainList.ForEach({
[regex]::Escape($_) + '$'
}) -join '|'
$ValidEmailAddressList = $EmailList -match $Regex_DL
$ValidEmailAddressList
output...
ABravo@example.com
BCharlie@more.example.com
CDelta@example.com
EFoxtrot@even.more.example.com
您始终可以使用-or
运算符在if
条件中链接多个表达式:
if ($user.email -match "\@mycompany\.com$" -or $user.email -match '@consultant\.mycompany\.com$'){
# ...
}
或者,您可以构建一个匹配两者的正则表达式模式:
if($user.email -match '@(?:consultant\.)?mycompany\.com$'){
# ...
}
如果您不确定如何在 reguar 表达式中转义文字字符串,请使用[regex]::Escape()
:
PS C:\> [regex]::Escape('@consultant.mycompany.com')
@consultant\.mycompany\.com
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.