PowerShell: Dapatkan-ADUser Properties dengan åäö


8

Saya mencoba mengekstraksi set pengguna dengan Get-ADUser. Pengguna milik perusahaan yang namanya termasuk karakter non-ASCII, misalnya "Gåäördet". Sayangnya, kami harus menggunakan properti perusahaan untuk tugas ini dan kami juga membutuhkannya untuk bekerja dari skrip.

Berikut ini berfungsi dengan baik dalam sesi interaktif tetapi tidak mengembalikan data saat dijalankan dalam skrip:

$Company = "Gåäördet"
Get-ADUser -Filter "company -eq '$Company'"

Solusi yang saya temukan berhasil tetapi tidak cukup andal (berisiko memilih objek yang salah):

# Work-around 1:
$Company = "Gaaordet" # Replace åäö with aao in the variable
Get-ADUser -Filter "company -eq '$Company'" # Matches the company "Gåäördet", but why?

...atau...

# Work-around 2: 
$Company = "G...rdets" # Use regex for åäö
Get-ADUser -Filter * -Properties Company | ? Company -match "$Company"

Untuk catatan tambahan: pengodean karakter mungkin bukan masalah di sini. Seperti yang disarankan dalam komentar saya memasukkan ini ke dalam skrip. Baca komentar untuk setiap Get-ADUser-line:

$OutputEncoding = [Console]::OutputEncoding

$Company = "aao"
Get-ADUser -Filter "company -eq '$Company'" # Matches company "åäö"

$Company = "åäö"
Get-ADUser -Filter "company -eq '$Company'" # No matches

Saya berharap beberapa dari Anda dapat menawarkan solusi yang lebih baik untuk teka-teki ini.


Terima kasih @RyanRies, sayangnya sepertinya tidak membantu. Baca edit saya untuk info lebih lanjut.
Tanel Rebane

1
Jadi saya (sayangnya) dapat mereproduksi perilaku ini dengan LDP.exe, jadi masalah kami mungkin berada pada level yang lebih dalam dari Powershell.
Ryan Ries

Alih-alih Filter akan menggunakan -LdapFilter bekerja? Contoh: -LdapFilter "(perusahaan = $ Perusahaan)"
user2320464

@TessellatingHeckler, masih belum ada yang cocok di "Gåäördet".
Tanel Rebane

@ user2320464, LdapFilter juga tidak menghasilkan yang cocok.
Tanel Rebane

Jawaban:


7

Terima kasih atas semua bantuan di sini, saya sampai ke dasar perilaku aneh ini, sangat dihargai!

Ternyata argumen "-Filter" menerima "åäö" secara bergantian dengan "aao". Ini bukan melakukan PowerShell tetapi lebih jauh ke bawah tumpukan (terima kasih @RyanRies untuk melihatnya). Itulah alasan mengapa cuplikan berikut ini berfungsi:

$Company = "aao"
Get-ADUser -Filter "company -eq '$Company'" # Matches company "åäö"

Ternyata kueri juga tidak peka terhadap huruf besar-kecil, jadi ini juga berfungsi:

$Company = "AaO"
Get-ADUser -Filter "company -eq '$Company'" # Matches company "åäö"

Sebenarnya, "åäö" bekerja terlalu lama asalkan itu adalah permintaan unicode (terima kasih @Daniel):

$Company = "$([char]0x00E4)$([char]0x00E5)$([char]0x00F6)" # "åäö"
Get-ADUser -Filter "company -eq '$Company'" # Matches company "åäö"

Pada akhirnya ini meninggalkan kita dengan dua opsi:

  • Ganti "åäö" dengan "aao" di kueri Anda. Outputnya akan identik dengan menggunakan "åäö".
  • Ganti "åäö" dengan unicode (@ joel-coel, terima kasih atas dorongannya), misalnya dengan skrip.

Saya memilih untuk menggunakan opsi kedua dan hasilnya terlihat seperti ini:

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'"

Saya kira itu sama baiknya dengan saat ini.


2

Saya dapat membantu Anda dengan solusi.

Buat file teks yang disandikan Unicode dan masukkan nama Perusahaan. Kemudian gunakan Get-Contentuntuk menyimpan nama perusahaan dalam suatu variabel.

$companyName = Get-Content .\companyName-unicode.txt
Get-ADUser -Filter { company -eq $companyName }

Saya mengujinya dengan teks China (中國 哲學 書 電子 化 計劃) dan berhasil pada server saya.


Terima kasih @aniel, solusi itu memang berhasil. Namun, itu sangat kotor. Mari kita lihat apakah ada orang lain yang juga memiliki beberapa masukan.
Tanel Rebane

Ya aku tahu. Saya harap seseorang mendapat jawaban yang tepat untuk doa Anda - eh - masalah. :)
Daniel

@TessellatingHeckler, saat melakukan tes, karakter non-ASCII apa yang Anda coba cocokkan?
Tanel Rebane

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.