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

Powershell 为什么不支持受支持的运算符?,powershell,active-directory,Powershell,Active Directory,为什么Powershell说不支持受支持的运算符 我有以下(简化)代码,其中包含: 在什么情况下,这会导致我看到的以下错误 Microsoft.ActiveDirectory.Management.ADFilterParsingException:分析查询时出错:“(sAMAccountName-eq$username)-and((GivenName-cne$GivenName))”错误消息:“不支持操作员:-cne”位于位置:“50”。 在Microsoft.ActiveDirectory.M

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

我有以下(简化)代码,其中包含:

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

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的筛选器参数支持。您的筛选器将/确实使用| Where()语句(它在我的本地系统上使用)


(将“ne”列为一个选项)

这是
Get ADUser
过滤器参数的限制,特别是PowerShell的。请尝试使用-ne。

我们希望在将来的版本中可以解决这个问题,它不是很一致。为了将来的参考,下面的代码可以工作,我还没有看过PowerShell3,但希望所有的操作符都可以使用。好主意,只在givenname上的哪个位置。应该避免你的代码太慢。请在你的答案中给出代码
| Where()
也不起作用,因为Get ADuser要求默认情况下有一个过滤器
$filter_accountchanged = { (sAMAccountName -eq $username) -and (GivenName -cne $givenname) }
try {
        if (Get-ADUser -filter $filter_accountchanged) { # update aduser }
catch {
        Write-host $_.Exception