You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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)存在逻辑错误:

  1. 未先提取UPN和Mail的域名部分,直接用原始字段比较会导致判断失效
  2. 逻辑表述混乱,$upn -and $mail -eq $cdomain实际是判断$upn非空且$mail等于正确域名,完全不符合需求的两个校验维度

使用上述函数中的域名提取+分层判断逻辑,才能准确覆盖所有场景。

内容的提问来源于stack exchange,提问作者victorR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 12:15:43