使用-notcontains运算符排除多个用户许可证无效,如何解决?
许可证过滤失效问题解决方法
问题原因
你的代码逻辑搞反了-notcontains的使用方向:$_.SkuPartNumber是单个字符串(每个许可证的SKU编号),而$Skip是数组。PowerShell中-contains/-notcontains是数组匹配单个值,反过来用单个值匹配数组会导致过滤逻辑失效,所以结果仍包含指定的许可证。
修正后的代码
# 需要忽略的许可证 $Skip = 'M365_E5', 'FLOW_FREE' $SKU = @(Get-MgUserLicenseDetail -UserId 'Username@domain.com') | Where-Object { $Skip -notcontains $_.SkuPartNumber }
或者用更直观的-notin语法(判断单个值是否不在数组内):
# 需要忽略的许可证 $Skip = 'M365_E5', 'FLOW_FREE' $SKU = @(Get-MgUserLicenseDetail -UserId 'Username@domain.com') | Where-Object { $_.SkuPartNumber -notin $Skip }
相关参数说明(翻译自官方文档)
Get-MgUserLicenseDetail的-Filter参数用于指定OData过滤条件,可提前筛选返回的许可证信息,减少后续处理的数据量,示例:
$SKU = Get-MgUserLicenseDetail -UserId 'Username@domain.com' -Filter "skuPartNumber ne 'M365_E5' and skuPartNumber ne 'FLOW_FREE'"
内容的提问来源于stack exchange,提问作者Senior Systems Engineer
相关产品推荐
相关产品推荐

