Saw a question on the forums that revolved around Get-ADUser filtering.
Initial code was like this
Import-Csv .\users.txt |
foreach {
Get-ADUser -Filter {Name -like $_.Name}
}
which on the face of it seems reasonable. However, you get errors like this
Get-ADUser : Property: ‘Name’ not found in object of type:
‘System.Management.Automation.PSCustomObject’.
At line:3 char:3
+ Get-ADUser -Filter {Name -like $_.Name}
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [Get-ADUser], ArgumentException
+ FullyQualifiedErrorId : ActiveDirectoryCmdlet:System.ArgumentException,Microsoft
.ActiveDirectory.Management.Commands.GetADUser
Change –like to –eq and you’ll still get the error.
This won’t work either:
Import-Csv .\users.txt |
foreach {
Get-ADUser -Filter {Name -like $($_.Name)}
}
You get messages about path errors.
Import-Csv .\users.txt |
foreach {
Get-ADUser -Filter {Name -like "$($_.Name)"}
}
will run but won’t return any data.
This will run and return the correct data.
Import-Csv .\users.txt |
foreach {
$name = $_.Name
Get-ADUser -Filter {Name -like $name}
}
Alternatively, you can use quotes so that the filter is a string
Import-Csv .\users.txt |
foreach {
Get-ADUser -Filter "Name -like ‘$($_.Name)’"
}
Another option is to use the LDAP filter syntax
Import-Csv .\users.txt |
foreach {
$name = $_.Name
Get-ADUser -LDAPFilter "(Name=$name)"
}
Import-Csv .\users.txt |
foreach {
Get-ADUser -LDAPFilter "(Name=$($_.Name))"
}
The help file about_activedirectory_filter is well worth reading. It doesn’t seem to be installed with the AD module on Windows Server 2016. You can read it on line at https://technet.microsoft.com/en-us/library/hh531527(v=ws.10).aspx
You’ll also see links to
about_ActiveDirectory – overview of module
about_ActiveDirectory_Identity
about_ActiveDirectory_ObjectModel
Get-ADUser filtering isn’t the most obvious of topics to get your head round but these examples should help you make your filters work. If you’re building a complex filter build it up a step at a time so you can test each stage.