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

PowerShell中-like与-notlike逻辑结果不符问题求助

问题原因分析

你的问题核心出在PowerShell对$null/空值的-like/-notlike处理逻辑,以及遍历的用户属性存在空值的情况:

  • 使用-like '*CN=ACTIVESTUDENT*'时:

    • 仅当目标属性(比如用户的DistinguishedName或组成员的Member属性值)包含指定字符串时返回$true,计入匹配(25786个);
    • 若属性为$null或空字符串,-like会返回$false,计入不匹配(220917个)。
  • 改用-notlike '*CN=ACTIVESTUDENT*'时:

    • PowerShell中$null/空值与任何通配符模式进行-notlike比较,结果依然是$false;
    • 这就导致:属性包含指定字符串的用户返回$false,属性为空的用户也返回$false——最终所有用户都被计入“不匹配”,匹配数为0。
验证与解决方法
  1. 验证空值存在:先统计目标属性为空的用户数量

    $studentUsers | Where-Object { [string]::IsNullOrEmpty($_.YourTargetProperty) } | Measure-Object
    

    结果应该等于220917,和第一次统计的不匹配数一致。

  2. 修正逻辑:要实现“不包含指定字符串”的正确统计,可通过以下两种方式处理:

    • 方法1:先过滤空值,再用-notlike
      $notMatchUsers = $studentUsers | Where-Object { 
          !([string]::IsNullOrEmpty($_.YourTargetProperty)) -and $_.YourTargetProperty -notlike '*CN=ACTIVESTUDENT*' 
      }
      
    • 方法2:强制转为字符串,空值会转为空字符串,此时-notlike可正常返回$true
      $notMatchUsers = $studentUsers | Where-Object { 
          [string]$_.YourTargetProperty -notlike '*CN=ACTIVESTUDENT*' 
      }
      

    修正后统计的匹配数会和第一次的不匹配数(220917)一致,两者结果互为逆集。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 08:07:08