PowerShell: Get-ADUser Properties with åäö
Thanks to all the help here I got to the bottom of this odd behavior, much appreciated!
Turns out the "-Filter" argument accepts "åäö" interchangeably with "aao". This is not the doing of PowerShell but further down the stack (thanks @RyanRies for looking into it). That's the reason why the following snippet works:
$Company = "aao"
Get-ADUser -Filter "company -eq '$Company'" # Matches company "åäö"
It also turns out the query is not case sensitive, so this works too:
$Company = "AaO"
Get-ADUser -Filter "company -eq '$Company'" # Matches company "åäö"
Actually, "åäö" works too as long as it is a unicode query (thanks @Daniel):
$Company = "$([char]0x00E4)$([char]0x00E5)$([char]0x00F6)" # "åäö"
Get-ADUser -Filter "company -eq '$Company'" # Matches company "åäö"
In the end this leaves us with two options:
- Replace "åäö" with "aao" in your queries. The output will be identical to using "åäö".
- Replace "åäö" with unicode (@joel-coel, thanks for the nudge), e.g. with a script.
I chose to go with the second option and the outcome looks a bit like this:
function UniReplace($n){
[char][int]"0x$n"
}
$Company = "åäö"
$Company = $Company -Replace 'ä',"$(UniReplace E4)"
$Company = $Company -Replace 'Ä',"$(UniReplace C4)"
$Company = $Company -Replace 'å',"$(UniReplace E5)"
$Company = $Company -Replace 'Å',"$(UniReplace C5)"
$Company = $Company -Replace 'ö',"$(UniReplace F6)"
$Company = $Company -Replace 'Ö',"$(UniReplace D6)"
echo "This is the content of string `$Company: $Company"
Get-ADUser -Filter "company -eq '$Company'"
I guess that is as good as it gets for now.
I might help you with a workaround.
Create a Unicode encoded text file and insert the Company name. Then use Get-Content
to store the company name in a variable.
$companyName = Get-Content .\companyName-unicode.txt
Get-ADUser -Filter { company -eq $companyName }
I tested with chinese text (中國哲學書電子化計劃) it and it worked on my server.
You might try building the names via code point surrogates:
https://stackoverflow.com/questions/4834291/how-to-encode-32-bit-unicode-characters-in-a-powershell-string-literal
It's not much better, but at least it allows you to contain the entire script within the source file.