পাওয়ারশেল: Get সহ গেট-এডিউজার বৈশিষ্ট্য åäö


8

আমি get-ADUser ব্যবহারকারীর কয়েকটি নির্বাচিত সেট বের করার চেষ্টা করছি। ব্যবহারকারীরা এমন সংস্থার অন্তর্ভুক্ত যার নামগুলিতে অ-এসসিআইআই অক্ষর অন্তর্ভুক্ত রয়েছে, যেমন "গার্ডেট"। দুর্ভাগ্যক্রমে, আমাদের এই কাজের জন্য সংস্থার সম্পত্তি ব্যবহার করতে হবে এবং আমাদের এটির কোনও স্ক্রিপ্ট থেকে কাজ করাও দরকার।

নিম্নলিখিতটি একটি ইন্টারেক্টিভ সেশনে দুর্দান্ত কাজ করে তবে কোনও স্ক্রিপ্টের মধ্যে সম্পাদন করার সময় কোনও ডেটা ফেরত দেয় না:

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

যে কাজের ক্ষেত্রগুলি আমি কাজ পেয়েছি কিন্তু যথেষ্ট নির্ভরযোগ্য নয় (ভুল জিনিস নির্বাচন করার ঝুঁকি):

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

... অথবা ...

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

অতিরিক্ত নোটের জন্য: অক্ষর এনকোডিং এখানে সমস্যা নাও হতে পারে। একটি মন্তব্যে পরামর্শ হিসাবে আমি এটি একটি স্ক্রিপ্ট মধ্যে রেখেছি। প্রতিটি 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

আমি আশা করছিলাম আপনারা কেউ কেউ এই জটলা থেকে আরও ভাল সমাধান দিতে পারেন offer


আপনাকে ধন্যবাদ @ রায়ানআরিজ, দুর্ভাগ্যক্রমে এটি সাহায্য করেছে বলে মনে হয় নি। আরও তথ্যের জন্য আমার সম্পাদনা পড়ুন।
তানেল রেবেনে

1
সুতরাং আমি (দুর্ভাগ্যক্রমে) LDP.exe এর সাথে এই আচরণটি পুনরুত্পাদন করতে পারি, সুতরাং আমাদের সমস্যাটি পাওয়ারশেলের চেয়ে আরও গভীর স্তরে হতে পারে।
রায়ান রেস

ফিল্টার পরিবর্তে -LdapFilter ব্যবহার করবে? উদাহরণ: -LdapFilter "(কোম্পানী = $ সংস্থা)"
ব্যবহারকারী 2320464

@ টেসেল্লাটিংহেকলার, এখনও "গার্ডেট" এর সাথে কোনও মিল নেই।
তানেল রেবেন

@ user2320464, LdapFilter কোনও মিল নেই।
তানেল রেবেন

উত্তর:


7

এখানে সমস্ত সহায়তার জন্য ধন্যবাদ আমি এই বিজোড় আচরণের নীচে পেয়েছি, অনেক প্রশংসা!

"-ফিল্টার" আর্গুমেন্টটি "a" কে "আও" এর সাথে বিনিময়যোগ্য হিসাবে গ্রহণ করে। এটি পাওয়ারশেলের কাজ নয় বরং স্ট্যাকটি আরও নিচে রেখে দেওয়া হয়েছে (এটি দেখার জন্য ধন্যবাদ @ রায়ানআরআইস)। নিম্নলিখিত স্নিপেট কাজ করার কারণেই এটি:

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

এটি অনুসন্ধানে কেস সংবেদনশীল নয় এটিও প্রমাণিত হয়েছে, সুতরাং এটি খুব কার্যকর:

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

আসলে, "åäö" ততক্ষণ কাজ করে যতক্ষণ না এটি ইউনিকোড ক্যোয়ারী হয় (ধন্যবাদ @ ড্যানিয়েল):

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

শেষ পর্যন্ত এটি দুটি বিকল্প সহ আমাদের ছেড়ে যায়:

  • আপনার প্রশ্নের "" আও "দিয়ে" åäö "প্রতিস্থাপন করুন। আউটপুট "The" ব্যবহারের অনুরূপ হবে।
  • ইউনিকোড (@ জোয়েল-কোয়েল, নজ দেওয়ার জন্য ধন্যবাদ) দিয়ে "åäö" প্রতিস্থাপন করুন, যেমন স্ক্রিপ্টের সাহায্যে।

আমি দ্বিতীয় বিকল্পের সাথে যেতে বেছে নিয়েছি এবং ফলাফলটি কিছুটা এরকম দেখাচ্ছে:

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

আমার ধারণা এটি এখনকার মতোই ভাল।


2

আমি আপনাকে একদম সাহায্য করতে পারি।

একটি ইউনিকোড এনকোডযুক্ত পাঠ্য ফাইল তৈরি করুন এবং কোম্পানির নাম .োকান। তারপরে Get-Contentএকটি ভেরিয়েবলের মধ্যে কোম্পানির নাম সঞ্চয় করতে ব্যবহার করুন ।

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

আমি এটি চাইনিজ পাঠ্য (中國 哲學 書 電子 化 計劃) দিয়ে পরীক্ষা করেছি এবং এটি আমার সার্ভারে কাজ করেছে।


ধন্যবাদ @ ড্যানিয়েল, সত্যিকার অর্থে কাজ করেছে। তবে এটি মারাত্মক নোংরা। অন্য কারও কাছে কিছু ইনপুট থাকলে তা দেখতে দিন।
তানেল রেবেনে

হ্যাঁ আমি জানি. আমি আশা করি কেউ আপনার প্রার্থনা - এর - সমস্যার সঠিক উত্তর পেয়েছে। :)
ড্যানিয়েল

@ টেসেল্লাটিংহেকলার, আপনার পরীক্ষাগুলি করার সময়, আপনি কোন অ-এএসসিআইআই অক্ষর মেলে যাবার চেষ্টা করছেন?
তানেল রেবেন

1

আপনি কোড পয়েন্ট সারোগেটের মাধ্যমে নামগুলি তৈরির চেষ্টা করতে পারেন:

/programming/4834291/how-to-encode-32-bit-unicode-characters-in-a-powershell-string-literal

এটি খুব ভাল নয়, তবে কমপক্ষে এটি আপনাকে সোর্স ফাইলের মধ্যে পুরো স্ক্রিপ্টটি ধারণ করতে দেয়।


এই ছিল বড় সাহায্য। আমি এখনই এই বিষয়ে একটি লিখিত আপ করছি।
তানেল রেবেনে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.