[英]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.