0
votes

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.

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:

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

PS C:\Users> write-host get-aduser -filter "{SAMAccountName -like '"$ADUserString*'"}"

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*"}"

get-aduser : Error parsing query: '{SAMAccountName -like "dcro"}' Error Message: 'syntax error' at position: '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*

However, if I manually type the output from my 'write-host' above, it executes perfectly fine and returns the results I am after:

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

DistinguishedName : CN=Dan*****,OU=A*****port,OU=Development*****************

Enabled : True

GivenName : D****

Name : D*****Cro****

ObjectClass : user

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

SamAccountName : dcro*****

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

Surname : Cro******

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

It's pretty odd, and my feeling is that there are some weird special characters at play here.....

2

2 Answers

0
votes

Try this:

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

Workaround I found was this (not so pretty).

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

Have you tried LDAPFilter anr instead? I know it tends to be iffy but might work in your scenario. It seems good at completing usernames.

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