如何在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"
关键逻辑说明
- 空值判断:用
[string]::IsNullOrWhiteSpace()替代简单的空值检查,能覆盖空白字符的场景,判断更严谨。 - AD用户查询:添加
-ErrorAction SilentlyContinue避免查询不到用户时抛出错误,返回$null便于后续状态判断;指定-Properties ObjectGuid确保获取到用户的唯一标识符。 - ObjectGuid比对:AD中每个用户的
ObjectGuid是全局唯一的,直接用-eq即可完成类型安全的比对,确保两个标识指向同一用户。
内容的提问来源于stack exchange,提问作者Alex Tofan
相关产品推荐
相关产品推荐

