【问题标题】:Why is the supported operator not supported?为什么不支持支持的运算符?
【发布时间】:2012-10-22 14:14:26
【问题描述】:

为什么 Powershell 说不支持受支持的运算符?

我有以下(简化的)代码,其中包含 case-sensitive not-equal operator

$filter_accountchanged = { (sAMAccountName -eq $username) -and (GivenName -cne $givenname) }
try {
        if (Get-ADUser -filter $filter_accountchanged) { # update aduser }
catch {
        Write-host $_.Exception

在什么情况下这会导致我看到以下错误?

Microsoft.ActiveDirectory.Management.ADFilterParsingException:解析查询时出错:'(sAMAccountName -eq $username) -and ((GivenName -cne $givenname))' 错误消息:'不支持操作员:-cne' 在位置:' 50'。 在 Microsoft.ActiveDirectory.Management.QueryParser.yyparse() 在 Microsoft.ActiveDirectory.Management.QueryParser..ctor(字符串查询,VariableExpressionConverter varExpressionConverter,ConvertSearchFilterDelegate searchFilterConverterDelegate) 在 Microsoft.ActiveDirectory.Management.Commands.ADGetCmdletBase`3.BeginProcessingOverride()

当我从cne 中删除c 时,查询成功。

【问题讨论】:

    标签: powershell active-directory


    【解决方案1】:

    不幸的是,Powershell 的过滤器参数并不支持所有运算符。您的过滤器将/确实与 | 一起使用Where() 语句(它在我的本地系统上执行)。

    Powershell filter support list from 2011(将“ne”列为选项)

    【讨论】:

    • 希望在以后的版本中解决这个问题,不是很一致。以供将来参考,以下代码适用于pastebin.com/vDcJEvXu
    • 我还没有看过 Powershell 3,但希望所有运算符都可用。只在给定名称上的 WHERE 是个好主意。应该防止你的代码变慢。
    • 能否请您在答案中提供代码。 | Where () 也不起作用,因为 Get-ADuser 要求您默认有一个过滤器
    【解决方案2】:

    这是Get-ADUser Filter 参数的限制,而不是 PowerShell 的限制。试试 -ne。

    【讨论】:

      猜你喜欢
      • 2015-09-26
      • 1970-01-01
      • 1970-01-01
      • 2016-06-24
      • 2023-03-26
      • 1970-01-01
      • 2011-07-06
      • 2020-10-15
      • 2014-07-31
      相关资源
      最近更新 更多