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

如何在PowerShell中比较两个AD用户变量的.objectguid属性?

PowerShell AD用户属性比对解决方案

完整实现代码

# 可替换为实际输入的用户标识
$var1 = "user@domain.com"  # UserPrincipalName
$var2 = "samaccount"       # SamAccountName

# 初始化状态与信息变量
$isSuccess = $false
$resultMsg = ""

# 核心逻辑处理
if (-not [string]::IsNullOrWhiteSpace($var1)) {
    # 条件1:仅验证UserPrincipalName
    $userFromUPN = Get-AdUser -Filter "UserPrincipalName -eq '$var1'" -Properties ObjectGuid -ErrorAction SilentlyContinue
    if ($userFromUPN) {
        $isSuccess = $true
        $resultMsg = "UserPrincipalName验证通过"
    } else {
        $isSuccess = $false
        $resultMsg = "未找到UserPrincipalName为`$var1的用户"
    }
} elseif (-not [string]::IsNullOrWhiteSpace($var2)) {
    # 条件2:UserPrincipalName为空,验证SamAccountName
    $userFromSAM = Get-AdUser -Filter "SamAccountName -eq '$var2'" -Properties ObjectGuid -ErrorAction SilentlyContinue
    if ($userFromSAM) {
        $isSuccess = $true
        $resultMsg = "SamAccountName验证通过"
    } else {
        $isSuccess = $false
        $resultMsg = "未找到SamAccountName为`$var2的用户"
    }
} else {
    # 两个标识均为空的情况
    $isSuccess = $false
    $resultMsg = "UserPrincipalName和SamAccountName均未输入"
}

# 条件3:两个标识均非空时,比对ObjectGuid
if (-not [string]::IsNullOrWhiteSpace($var1) -and -not [string]::IsNullOrWhiteSpace($var2)) {
    $userFromUPN = Get-AdUser -Filter "UserPrincipalName -eq '$var1'" -Properties ObjectGuid -ErrorAction SilentlyContinue
    $userFromSAM = Get-AdUser -Filter "SamAccountName -eq '$var2'" -Properties ObjectGuid -ErrorAction SilentlyContinue

    if (-not $userFromUPN) {
        $isSuccess = $false
        $resultMsg = "UserPrincipalName '$var1' 不存在"
    } elseif (-not $userFromSAM) {
        $isSuccess = $false
        $resultMsg = "SamAccountName '$var2' 不存在"
    } else {
        # 直接比对ObjectGuid(AD中用户唯一标识符)
        if ($userFromUPN.ObjectGuid -eq $userFromSAM.ObjectGuid) {
            $isSuccess = $true
            $resultMsg = "两个标识对应同一个用户"
        } else {
            $isSuccess = $false
            $resultMsg = "两个标识对应不同用户"
        }
    }
}

# 输出结果
Write-Host "验证状态: $isSuccess"
Write-Host "结果信息: $resultMsg"

关键逻辑说明

  1. 空值判断:用[string]::IsNullOrWhiteSpace()替代简单的空值检查,能覆盖空白字符的场景,判断更严谨。
  2. AD用户查询:添加-ErrorAction SilentlyContinue避免查询不到用户时抛出错误,返回$null便于后续状态判断;指定-Properties ObjectGuid确保获取到用户的唯一标识符。
  3. ObjectGuid比对:AD中每个用户的ObjectGuid是全局唯一的,直接用-eq即可完成类型安全的比对,确保两个标识指向同一用户。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 16:45:46