简体   繁体   English

将变量解析为Get-ADUser CMDLT-解析查询时出错

[英]Parsing variables into Get-ADUser CMDLT - Error parsing query

I am attempting to write some scripts to match a partial AD user account name into a get-aduser script to return the objects for another routine. 我正在尝试编写一些脚本,以将部分AD用户帐户名匹配到get-aduser脚本中,以为另一个例程返回对象。

However, the command when executed it returning a parse error 但是,该命令在执行时返回解析错误

The strange thing is that when checking the syntax of the output, it looks AOK: 奇怪的是,当检查输出的语法时,它看起来是AOK:

PS C:\\Users> $ADUserString = "dcro" PS C:\\ Users> $ ADUserString =“ dcro”

PS C:\\Users> write-host get-aduser -filter "{SAMAccountName -like '"$ADUserString*'"}" PS C:\\ Users> 写入主机get-aduser -filter“ {SAMAccountName -like'” $ ADUserString *'“}}”

get-aduser -filter {SAMAccountName -like "dcro*"} get-aduser -filter {SAMAccountName -like“ dcro *”}

Note: I have used the right-tick character ` prepeding the quotes on the variable to keep them as a string value 注意:我在变量的引号之前使用了右勾字符`来将其保留为字符串值

So when executing the command: 因此,在执行命令时:

PS C:\\Users> get-aduser -filter "{SAMAccountName -like "$ADUserString* "}" PS C:\\ Users> get-aduser -filter“ {SAMAccountName "$ADUserString* “}”

get-aduser : Error parsing query: '{SAMAccountName -like "dcro "}' Error Message: 'syntax error' at position: '1'. get-aduser: 解析查询时出错: '{SAMAccountName -like“ dcro ”}'错误消息:位置“ 1”处的“语法错误”。 At line:1 char:1 + get-aduser -filter "{SAMAccountName -like "$ADUserString* "}" + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : ParserError: (:) [Get-ADUser], ADFilterParsingException + FullyQualifiedErrorId : Error parsing query: '{SAMAccountName -like "dcro*"}' Error Message: 'syntax error' at position: '1'.,Microsoft.ActiveDirectory.Management.Commands.GetADUser* 在第1行:char:1 + get-aduser -filter“ {SAMAccountName "$ADUserString* “}” + + ~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + CategoryInfo:ParserError:(:) [Get-ADUser ],ADFilterParsingException + FullyQualifiedErrorId:错误分析查询:“ {SAMAccountName -like“ dcro *”}”错误消息:位置“ 1”上的“语法错误”。,Microsoft.ActiveDirectory.Management.Commands.GetADUser *

However, if I manually type the output from my 'write-host' above, it executes perfectly fine and returns the results I am after: 但是,如果我从上面的“ write-host”手动键入输出,它将执行得很好,并返回我想要的结果:

PS C:\\Users> get-aduser -filter {samaccountname -like "dcro*"} PS C:\\ Users> get-aduser -filter {samaccountname -like“ dcro *”}

DistinguishedName : CN=Dan*****,OU=A*****port,OU=Development***************** 专有名称:CN = Dan *****,OU = A ***** port,OU = Development *****************

Enabled : True 已启用:True

GivenName : D**** GivenName:D ****

Name : D*****Cro**** 名字:D ***** Cro ****

ObjectClass : user ObjectClass:用户

ObjectGUID : 796b**********413-558d*****d73 ObjectGUID:796b ********** 413-558d ***** d73

SamAccountName : dcro***** SamAccountName:dcro *****

SID : S-1******************67 SID:S-1 ****************** 67

Surname : Cro****** 姓:Cro ******

UserPrincipalName : dcro*********** UserPrincipalName:dcro ***********

It's pretty odd, and my feeling is that there are some weird special characters at play here..... 这很奇怪,我的感觉是这里有些奇怪的特殊角色在玩.....

Try this: 尝试这个:

$ADUserString = "dcro*"
write-host (Get-ADUser -Filter {SamAccountName -like $ADUserString} | Out-String)

Workaround I found was this (not so pretty). 我发现的解决方法是这样(不是很漂亮)。

$ADUserString = "dcro"
$AdUserStringWildCard = "$AdUserString*"
Get-ADUser -Filter {SamAccountName -like $AdUserStringWildCard}

Have you tried LDAPFilter anr instead? 您是否尝试过LDAPFilter anr? I know it tends to be iffy but might work in your scenario. 我知道它往往很不稳定,但在您的情况下可能会起作用。 It seems good at completing usernames. 似乎擅长填写用户名。

Get-ADUser -LDAPFilter "(anr=$ADUserString)"

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM