পাওয়ারশেলে নেমস্পেস ব্যবহার করা


9

এই প্রশ্নের উত্তর দেওয়ার সময় এটি সম্পর্কে ভেবেছিলাম ।

আপনি কীভাবে একটি নেমস্পেসে প্রতিটি একক ধরণের পুরোপুরি যোগ্যতা অর্জনের প্রয়োজনীয়তা এড়াতে পারেন?

এটি সত্যিই, System.Security.Cryptography.X509Certificates.X509Storeপরিবর্তে X509Storeবা [System.Security.Cryptography.X509Certificates.StoreName]::Myপরিবর্তে লিখতে সত্যিই ক্লান্তিকর [StoreName]::My

সি # তে আপনার usingনির্দেশনা আছে ... পাওয়ারশেলের কী হবে?


সম্পাদনা 1 - এটি ধরণের জন্য কাজ করে:

$ns = "System.Security.Cryptography.X509Certificates"
$store = New-Object "$ns.X509Store"(StoreName,StoreLocation)

নিউ-অবজেক্ট টাইপ সংজ্ঞা হিসাবে একটি স্ট্রিং আক্ষরিক লাগে, তাই এটি প্রোগ্রামিকভাবে নির্মিত যেতে পারে।


সম্পাদনা 2 - এটি প্যারামেট হিসাবে ব্যবহৃত গণনার সদস্যদের জন্য কাজ করে:

$store = New-Object "$ns.X509Store"("My","LocalMachine")

যেখানে "আমার" [System.Security.Cryptography.X509Certificates.StoreName]::Myএবং "লোকালম্যাচাইন" [System.Security.Cryptography.X509Certificates.StoreLocation]::LocalMachine
আক্ষরিক নামগুলি স্বয়ংক্রিয়ভাবে গণনার সদস্যগুলিতে রূপান্তরিত হয়, যদি এমন একটি স্থানে রাখা হয় যেখানে একটি গণনা সদস্যের প্রত্যাশিত হয়।


ঠিক এই সাথে আপনার সাথে।
জোসেফ কার্ন

উত্তর:


11

আমি জানি, এটি কিছুটা দেরি হয়েছে, তবে পাওয়ারশেল ভি 5 টি প্রচুর শীতল ভাষার স্টাফ যুক্ত করেছে। এর একটি হ'ল 'নেমস্পেস ব্যবহার করা'।

PS> using namespace System.Security.Cryptography.X509Certificates; [X509Store]


IsPublic IsSerial Name                                     BaseType                                     
-------- -------- ----                                     --------                                     
True     False    X509Store                                System.Object                                

6

গণনার জন্য আপনাকে পুরো টাইপের নাম নির্দিষ্ট করতে হবে না। উদাহরণ স্বরূপ:

তুমি এটি করতে পারো:

New-Object System.DirectoryServices.ActiveDirectory.DirectoryContext([System.DirectoryServices.ActiveDirectory.DirectoryContextType]::Domain)

বা আরও সহজ সংস্করণ:

New-Object System.DirectoryServices.ActiveDirectory.DirectoryContext('Domain')

সম্পূর্ণ সজ্জিত নামটি ব্যবহার না করে আপনি যেসব সূত্র ব্যবহার করতে চান তা সনাক্ত করতে আপনি স্ট্রিং ব্যবহার করতে পারেন। পাওয়ারশেল টাইপকাস্টিংটি আপনার জন্য স্ট্রিংগুলিকে অঙ্কের মানগুলিতে রূপান্তর করতে পরিচালনা করে। আপনি উপরে উল্লিখিত নির্দিষ্ট উদাহরণটি ব্যবহার করে এর অর্থ আপনি এটি করতে পারেন:

[System.Security.Cryptography.X509Certificates.OpenFlags]'ReadWrite'

এবং পাওয়ারশেল এটিকে যথাযথ রূপান্তর করবে (সুতরাং 'রিড রাইট' কে এমন একটি পরামিতিতে পাঠানো হবে যা একটি ওপেনফ্ল্যাজগুলির মান মূল্য নেয় যা ঠিক কাজ করবে)। আপনি যদি একাধিক মান পাস করতে চান তবে আপনি এটি এর মতো করতে পারেন:

[System.Security.Cryptography.X509Certificates.OpenFlags]@('ReadWrite','IncludeArchived')

মনে রাখবেন যে আমি এই কমান্ডগুলি নামের সাথে প্রিফিক্স করছি, তবে আপনি যদি এগুলি কোনও টাইপ করা প্যারামিটারে দিয়ে যাচ্ছেন তবে আপনি কেবল এটিকে ছেড়ে চলে যাবেন।

এটি আপনাকে সমস্ত নাম সজ্জিত না করে নির্দিষ্ট স্ক্রিপ্টগুলি লিখতে সক্ষম হতে পারে যা নির্দিষ্ট নামের জায়গার সাথে কাজ করে।


ধন্যবাদ এটি দুর্দান্ত কাজ করে। আমি কেবলমাত্র ওভারলোডেড পদ্ধতিটি খুঁজে পাব না যা প্যারামিটার হিসাবে একই নামের সদস্য থাকা দুটি পৃথক গণনা নিতে পারে :-)
ম্যাসিমো

টিপটি কার্যকর হওয়ায় এটিকে গ্রহণ করুন, তবে সমস্যাটি এখনও সমাধান থেকে অনেক দূরে ...: - /
ম্যাসিমো

0

সঠিক পথ?

$_m = [math]
$_m::sin((45*($_m::pi/180))) 

এবং এটি কাজ করে বলে মনে হচ্ছে:

[Reflection.Assembly]::Load("System.Security, Version=2.0.0.0, Culture=Neutral, PublicKeyToken=b03f5f7f11d50a3a")

$stoopidnamespace = 'System.Security.Cryptography.X509Certificates.X509Store'
New-Object $stoopidnamespace($null)

আপনি যখন এটি করেন তবে এটি কুৎসিত:

$stoopidnamespace = 'System.Security.Cryptography.X509Certificates'
New-Object $stoopidnamespace'.X509Store'($null)

3
$ কিছু = [প্রকার] কেবলমাত্র একটি একক ধরণের সংজ্ঞা জন্য কাজ করে, পুরো নামস্থানটির জন্য নয়। এটি "ম্যাথ" এর জন্য কাজ করে কারণ এটি একটি শ্রেণি।
ম্যাসিমো

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