PowerShell多条件判断:AD用户UPN与Mail字段校验问题
PowerShell AD用户域名校验多场景判断实现
前提说明
假设已实现GetDomain函数用于拆分UPN或邮箱地址的域名部分,示例实现如下(若已有可直接复用):
function GetDomain { param( [string]$Address ) # 处理空值情况,直接返回空 if([string]::IsNullOrWhiteSpace($Address)) { return $null } # 拆分@后的域名部分 $split = $Address -split '@', 2 if($split.Count -eq 2) { return $split[1].Trim() } # 格式不正确时返回空 return $null }
GetCase函数实现
以下GetCase函数会根据AD用户的UPN和Mail字段域名情况,返回对应的场景标识:
function GetCase { param( [PSObject]$AdUser, [string]$CorrectDomain = 'correctdomain.com' ) # 提取UPN和Mail的域名 $upnDomain = GetDomain $AdUser.userPrincipalName $mailDomain = GetDomain $AdUser.Mail # 场景判断逻辑 if([string]::IsNullOrWhiteSpace($mailDomain)) { # Mail字段为空的场景 if($upnDomain -eq $CorrectDomain) { return 'Case3' # Robert Reyes场景:Mail空,UPN域名正确 } else { return 'Case_MailEmpty_UpnInvalid' # 扩展场景:Mail空,UPN域名错误 } } else { # Mail字段非空的情况 if($upnDomain -eq $mailDomain) { # UPN与Mail域名匹配 if($upnDomain -eq $CorrectDomain) { return 'Case_BothValid_Matched' # 扩展场景:两者域名都正确且匹配 } else { return 'Case1' # Victor Reyes场景:域名匹配但均错误 } } else { # UPN与Mail域名不匹配 if($upnDomain -eq $CorrectDomain) { return 'Case2' # Pablo Reyes场景:UPN正确,Mail错误 } elseif($mailDomain -eq $CorrectDomain) { return 'Case_MailValid_UpnInvalid' # 扩展场景:Mail正确,UPN错误 } else { return 'Case_BothInvalid_Unmatched' # 扩展场景:两者域名都错误且不匹配 } } } }
场景对应说明
- Case1:对应Victor Reyes场景,UPN与Mail的域名完全相同,但均不是指定的
correctdomain.com - Case2:对应Pablo Reyes场景,UPN域名是
correctdomain.com,但Mail域名是错误域名,二者不匹配 - Case3:对应Robert Reyes场景,Mail字段为空,且UPN域名是
correctdomain.com
原条件语句问题修正
你之前写的if($upn -and $mail -eq $cdomain)存在逻辑错误:
- 未先提取UPN和Mail的域名部分,直接用原始字段比较会导致判断失效
- 逻辑表述混乱,
$upn -and $mail -eq $cdomain实际是判断$upn非空且$mail等于正确域名,完全不符合需求的两个校验维度
使用上述函数中的域名提取+分层判断逻辑,才能准确覆盖所有场景。
内容的提问来源于stack exchange,提问作者victorR
相关产品推荐
相关产品推荐

