PowerShell判断AD组是否有Exchange2010邮箱权限的If语句失效如何解决
问题原因
Select-Object User返回的是带User属性的PS自定义对象数组,而非直接的用户名字符串,直接用对象和字符串做比较、直接输出对象都会显示属性表头,无法匹配预期。
方案1:展开属性直接获取字符串值
修改赋值语句,给Select-Object添加-ExpandProperty参数,直接提取User属性的字符串值:
# 直接提取所有User属性的字符串值到数组 $var = Get-MailboxPermission -identity "My-AD-Group" | Select-Object -ExpandProperty User if($var[1] -like "MyDomain\My-AD-Group"){ write-host "$($var[1]) has been added" }else{ $false }
注意:字符串插值输出数组元素时,要用$()包裹变量,否则会直接输出数组类型+[1]文本
方案2:判断时访问对象属性
如果不修改原有赋值逻辑,判断时显式访问对象的User属性即可:
$var = Get-MailboxPermission -identity "My-AD-Group" | select-object user # 显式访问User属性做比较 if($var[1].User -like "MyDomain\My-AD-Group"){ write-host "$($var[1].User) has been added" }else{ $false }
更稳妥的优化写法
不需要硬编码索引,直接过滤匹配目标账号即可,避免索引顺序变动导致的判断错误:
$targetAccount = "MyDomain\My-AD-Group" $matchPermission = Get-MailboxPermission -Identity "My-AD-Group" | Where-Object { $_.User -eq $targetAccount } if ($matchPermission) { Write-Host "$targetAccount has been added" } else { $false }
内容的提问来源于stack exchange,提问作者Zawardo ooo
相关产品推荐
相关产品推荐

