如何修改PowerShell脚本以处理变量中的多对象匹配问题
问题:PowerShell判断用户是否在合规策略列表中失败的解决方法
我尝试用以下脚本判断指定用户是否在保留合规策略的OneDrive成员列表中:
$Guid = "59041b96-c71d-436c-8297-7af5fcf4e22a" $Members = Get-RetentionCompliancePolicy -identity $guid -DistributionDetail | Select -ExpandProperty OneDriveLocation | select name,displayname | sort displayname $User = "Humbert, Jason" $ODPolicy = $members.displayname | Select-String -Pattern "Humbert, Jason" if($User -like $ODPolicy){ Write-host "USer $($USer.primarysmtpaddress) is in" #$OD.RetentionSet = $True }else{ Write-Warning "User $($USer.primarysmtpaddress) not in Policy" }
执行后$ODPolicy返回两个相同的用户名称(因存在活跃和非活跃两个邮箱):
PS C:\Users\XYZ> $ODPolicy Humbert, Jason Humbert, Jason
但运行if($User -like $ODPolicy)时,脚本无法处理多个对象的情况,直接进入else分支输出警告。请问如何修改脚本,使条件判断为真并执行对应的成功输出?
解决方案
方法1:直接用集合包含检查(推荐)
跳过Select-String,直接用-contains操作符检查用户是否在displayname集合中,该操作符支持处理多元素集合,只要存在匹配就返回$true:
$Guid = "59041b96-c71d-436c-8297-7af5fcf4e22a" $Members = Get-RetentionCompliancePolicy -Identity $guid -DistributionDetail | Select-Object -ExpandProperty OneDriveLocation | Select-Object name, displayname | Sort-Object displayname $User = "Humbert, Jason" if ($Members.displayname -contains $User) { Write-Host "用户 $User 在策略中" # $OD.RetentionSet = $True } else { Write-Warning "用户 $User 不在策略中" }
方法2:检查Select-String的匹配结果
如果坚持使用Select-String,可以直接判断是否存在匹配结果(Select-String有匹配时返回对象,无匹配时返回$null),同时用[regex]::Escape()处理用户名称中的特殊字符,避免正则匹配异常:
$Guid = "59041b96-c71d-436c-8297-7af5fcf4e22a" $Members = Get-RetentionCompliancePolicy -Identity $guid -DistributionDetail | Select-Object -ExpandProperty OneDriveLocation | Select-Object name, displayname | Sort-Object displayname $User = "Humbert, Jason" $ODPolicy = $members.displayname | Select-String -Pattern [regex]::Escape($User) if ($ODPolicy) { Write-Host "用户 $User 在策略中" # $OD.RetentionSet = $True } else { Write-Warning "用户 $User 不在策略中" }
注意:原脚本中$USer.primarysmtpaddress存在问题——$User是字符串变量,并没有primarysmtpaddress属性,所以直接使用$User即可;如果需要获取用户的邮箱属性,需先通过Get-User或Get-Mailbox等命令获取用户对象。
内容的提问来源于stack exchange,提问作者Chabango
相关产品推荐
相关产品推荐

