- WMI এবং PowerShell-এর CIM cmdlet-গুলো আপনাকে স্থানীয় এবং দূরবর্তী ব্যবস্থাপনার তথ্য দক্ষতার সাথে জিজ্ঞাসা করতে এবং পরিবর্তন করতে দেয়।
- WSMan বা DCOM সহ CimSessions আধুনিক এবং পুরোনো নেটওয়ার্ক সরঞ্জামগুলিতে নিরাপদ ও সামঞ্জস্যপূর্ণ অ্যাক্সেস সহজতর করে।
- উন্নত ফাংশন, মডিউল, জব এবং ডিএসসি-এর ব্যবহার পাওয়ারশেলকে একটি পূর্ণাঙ্গ ইনফ্রাস্ট্রাকচার অটোমেশন ল্যাঙ্গুয়েজে পরিণত করে।
- পাওয়ারশেল স্থানীয়, দূরবর্তী, অ্যাজুর এবং মাইক্রোসফট ৩৬৫ ব্যবস্থাপনাকে একটি একক পরিবেশে একীভূত করে, যার ফলে পুনরাবৃত্তিমূলক ম্যানুয়াল কাজ কমে যায়।

আপনি যদি উইন্ডোজ সিস্টেম পরিচালনার কাজ করেন, তবে আজ হোক বা কাল হোক আপনি সমস্যায় পড়বেন পাওয়ারশেল, WMI, এবং উন্নত অটোমেশনশুধু চারটি কমান্ড চালাতে জানলেই হবে না: যখন আপনি কয়েক ডজন বা শত শত সার্ভার পরিচালনা করছেন, তখন মাথা খারাপ না করে... বা কোনো কিছু নষ্ট না করে তথ্য সংগ্রহ, পরিবর্তন প্রয়োগ এবং একই কাজ বারবার করার জন্য আপনার একটি সুচিন্তিত, সুসংগঠিত এবং নিরাপদ পদ্ধতির প্রয়োজন।
পরবর্তী অংশে আমরা শান্তভাবে কিন্তু পুঙ্খানুপুঙ্খভাবে আলোচনা করব, কীভাবে সুবিধা গ্রহণ করা যায়। WMI, CIM এবং PowerShell দূরবর্তী যোগাযোগ সাধারণ কোয়েরি থেকে শুরু করে জটিল ইনফ্রাস্ট্রাকচার সিনারিও পর্যন্ত সবকিছু স্বয়ংক্রিয় করতে। আমরা আরও দেখব কিভাবে এই সবকিছু মডিউল, ব্যাকগ্রাউন্ড টাস্ক, অ্যাজুর, মাইক্রোসফট ৩৬৫ এবং কিছু উন্নত ফিচারের সাথে সমন্বিতভাবে কাজ করে, যা একজন সিস্টেম অ্যাডমিনিস্ট্রেটরের দৈনন্দিন কাজে প্রকৃত পার্থক্য গড়ে তোলে।
পাওয়ারশেলের উন্নয়ন এবং উন্নত অটোমেশনের একটি সংক্ষিপ্ত বিবরণ
উইন্ডোজ পাওয়ারশেল ব্যাপকভাবে বিকশিত হয়েছে এর একেবারে প্রথম সংস্করণগুলো থেকেই, এবং এই বিবর্তনের একটি বড় অংশ এসেছিল উইন্ডোজ সার্ভার ২০১২-এর হাত ধরে, যেখানে দূরবর্তী যোগাযোগ উন্নত করা হয়েছিল, উপলব্ধ কমান্ডলেটগুলোর পরিসর বাড়ানো হয়েছিল, এবং নিরাপত্তা বাড়ানোর জন্য ডিবাগিং, ব্যাকগ্রাউন্ড জব ও সীমাবদ্ধ সংযোগ পয়েন্টের মতো বিষয়গুলোকে আরও সহজ করে তোলা হয়েছিল।
এই পরিবেশের অন্যতম মূল ধারণাটি হলো যে প্রশাসকরা পারেন গভীর প্রোগ্রামিং ছাড়াই কমান্ডলেট-সদৃশ আচরণ তৈরি করুনউন্নত বৈশিষ্ট্যের উপর নির্ভর করে, পুনর্ব্যবহারযোগ্য মডিউল এবং একটি অত্যন্ত বিস্তারিত হেল্প সিস্টেম। এর মানে হলো, বিক্ষিপ্ত গ্রাফিক্যাল টুলের উপর নির্ভর করার পরিবর্তে, আপনি স্ক্রিপ্ট এবং মডিউলের একটি সুসংহত সেট তৈরি করতে পারেন যা সার্ভার, নেটওয়ার্ক, অ্যাক্টিভ ডিরেক্টরি, অ্যাজুর বা মাইক্রোসফট ৩৬৫ পরিচালনার প্রক্রিয়াগুলোকে স্বয়ংক্রিয় করে তোলে।
ক্ষেত্রে উন্নত অটোমেশন এছাড়াও উল্লেখযোগ্য বৈশিষ্ট্যগুলো হলো অ্যাসিঙ্ক্রোনাসভাবে টাস্ক চালানোর জন্য জব, ওয়ার্কফ্লো, পাওয়ারশেল ডিএসসি (PowerShell DSC) ব্যবহার করে কনফিগারেশন-ভিত্তিক অ্যাডমিনিস্ট্রেশন, এবং জেএএ (JEA - Just Enough Administration) বা পাওয়ারশেল ওয়েব অ্যাক্সেস (PowerShell Web Access)-এর মতো নিরাপত্তা বিকল্প, যেগুলোর মাধ্যমে প্রত্যেক ব্যক্তি কী করতে পারবে এবং কোথা থেকে করতে পারবে, তার ওপর বিস্তারিত নিয়ন্ত্রণ রাখা যায়।
এই সম্পূর্ণ বাস্তুতন্ত্রটি WMI এবং CIM-এর সাথে বিশেষভাবে ভালোভাবে খাপ খায়, কারণ অপারেটিং সিস্টেম দ্বারা প্রকাশিত ব্যবস্থাপনার তথ্য হার্ডওয়্যার, পরিষেবা, প্রসেস(নেটওয়ার্ক কনফিগারেশন, ইনস্টল করা সফ্টওয়্যার, ইত্যাদি) একগুচ্ছ অবজেক্টে পরিণত হয়, যেগুলোকে আপনি ব্যাপক অটোমেশনের জন্য ডিজাইন করা পাওয়ারশেল কমান্ড ব্যবহার করে কোয়েরি, ফিল্টার এবং মডিফাই করতে পারেন।
WMI ও CIM: মূল ধারণা এবং ব্যবহারিক পার্থক্য
উইন্ডোজ ম্যানেজমেন্ট ইন্সট্রুমেন্টেশন, যা আরও পরিচিত WMI হলো PowerShell থেকে স্বাধীন একটি প্রযুক্তি। এটি বহু বছর ধরে উইন্ডোজের একটি অংশ এবং অপারেটিং সিস্টেম, হার্ডওয়্যার ও বিভিন্ন অ্যাপ্লিকেশন সম্পর্কিত প্রশাসনিক তথ্যের একটি ভান্ডার উন্মোচন করে। এটি পাওয়ারশেলের উপর নির্ভরশীল নয়, কিন্তু পাওয়ারশেল বিভিন্ন কাজ স্বয়ংক্রিয় করতে এটিকে ব্যাপকভাবে ব্যবহার করে।
পাওয়ারশেল ইকোসিস্টেমে WMI-এর স্বাভাবিক উত্তরসূরি হল CIM (কমন ইনফরমেশন মডেল) কমান্ডলেটপাওয়ারশেল ৩.০-এর সাথে প্রবর্তিত এই cmdlet-গুলো CimCmdlets মডিউলের অধীনে শ্রেণীবদ্ধ করা হয়েছে এবং এর মধ্যে Get-CimInstance, Get-CimClass, New-CimInstance, Invoke-CimMethod, Register-CimIndicationEvent, Set-CimInstance, এবং Remove-CimInstance-এর মতো কমান্ডগুলো অন্তর্ভুক্ত রয়েছে।
উইন্ডোজ পাওয়ারশেলের পুরোনো সংস্করণগুলিতে, যেমন উইন্ডোজ ১০ বা উইন্ডোজ ১১-এর সংস্করণ ৫.১-এ, আপনি এখনও খুঁজে পেতে পারেন ক্লাসিক WMI কমান্ডলেট (Get-WmiObject, Invoke-WmiMethod, Register-WmiEvent, Remove-WmiObject, Set-WmiInstance)। তবে, এই cmdlet-গুলো অপ্রচলিত এবং PowerShell 6 ও এর পরবর্তী সংস্করণগুলোতে আর অন্তর্ভুক্ত নয়, তাই এগুলো শুধুমাত্র পুরোনো স্ক্রিপ্ট রক্ষণাবেক্ষণ বা পুরোনো কোড পর্যালোচনার জন্য প্রাসঙ্গিক।
কারো পক্ষে “CIM cmdlet ব্যবহার করে WMI কোয়েরি করা” নিয়ে কথা বলাটা পরস্পরবিরোধী নয়: CIM cmdlet-গুলো WMI তথ্য অ্যাক্সেস করা অব্যাহত রাখে।তবে, তারা WSMan-এর মতো আরও আধুনিক প্রোটোকল এবং একটি অধিক সামঞ্জস্যপূর্ণ API ব্যবহার করে এটি করে থাকে। বাস্তবসম্মতভাবে বলতে গেলে, নতুন ডেভেলপমেন্টের জন্য আপনার CIM-এর উপর মনোযোগ দেওয়া উচিত এবং শুধুমাত্র লিগ্যাসি স্ক্রিপ্ট মাইগ্রেট বা বোঝার প্রয়োজনে WMI cmdlet-গুলো বিবেচনা করা উচিত।
ঐতিহাসিকভাবে, অনেক প্রশাসক WMI-কে কোয়েরি করার জন্য VBScript-এর সাথে WQL কোয়েরি ল্যাঙ্গুয়েজ ব্যবহার করতেন, উদাহরণস্বরূপ নেমস্পেসের সাথে সংযোগ স্থাপনের মাধ্যমে। রুট\CIMV2 এবং Win32_BIOS-এর মতো ক্লাস কোয়েরি করা। সেই একই WQL কোয়েরি আজ Get-CimInstance-এর সাথে -Query প্যারামিটারটি পাস করে পুনরায় ব্যবহার করা যেতে পারে, যা প্রথম থেকে লজিকটি পুনরায় লেখার প্রয়োজন ছাড়াই VBScript থেকে PowerShell-এ রূপান্তরকে ব্যাপকভাবে সহজ করে তোলে।
Get-CimInstance-এর বাস্তব ব্যবহার এবং কার্যকরী কোয়েরি
দৈনন্দিন কাজের জন্য, পাওয়ারশেল দিয়ে WMI কোয়েরি করার সবচেয়ে স্বাভাবিক উপায় হলো ব্যবহার করা -ClassName প্যারামিটার সহ Get-CimInstanceসম্পূর্ণ WQL কোয়েরি লেখার পরিবর্তে, আপনি BIOS তথ্য পেতে Get-CimInstance -ClassName Win32_BIOS ব্যবহার করতে পারেন। এটি Manufacturer, Name, SerialNumber, বা SMBIOSBIOSVersion-এর মতো প্রোপার্টিসহ একটি অবজেক্ট রিটার্ন করবে।
যেহেতু পাওয়ারশেলে সবকিছুই অবজেক্ট, তাই এটি খুবই সহজ। ফিল্টার করে শুধু আপনার প্রয়োজনীয় জিনিসগুলোই বেছে নিন।যদি আপনি শুধুমাত্র সিরিয়াল নম্বরটি পেতে আগ্রহী হন, তাহলে আপনি ফলাফলটিকে `Select-Object -Property SerialNumber`-এ পাইপ করতে পারেন, অথবা প্রপার্টিসহ একটি অবজেক্টের পরিবর্তে একটি সাধারণ স্ট্রিং আউটপুট করতে `Select-Object -ExpandProperty SerialNumber` ব্যবহার করতে পারেন। আরেকটি প্রচলিত উপায় হলো সরাসরি মানটি অ্যাক্সেস করার জন্য ডট সিনট্যাক্স (`Get-CimInstance ...`).SerialNumber` ব্যবহার করা।
এটি লক্ষণীয় যে, ডিফল্টরূপে, WMI কোয়েরিগুলো আপনার প্রকৃত ব্যবহারের চেয়ে বেশি প্রোপার্টি ফেরত দেয়।স্থানীয় মেশিনে এটি সাধারণত কোনো সমস্যা সৃষ্টি করে না, কিন্তু যখন আপনি অনেকগুলো দূরবর্তী মেশিন থেকে ডেটা কোয়েরি করা শুরু করেন, তখন এর ফলে অতিরিক্ত প্রসেসিং সময় এবং অপ্রয়োজনীয় নেটওয়ার্ক ট্র্যাফিক তৈরি হয়। এখানেই `Get-CimInstance`-এর `-Property` প্যারামিটারটি কাজে আসে, যা আপনাকে উৎস থেকে কোন প্রোপার্টিগুলো আনা হবে তা সীমিত করার সুযোগ দেয়।
উদাহরণস্বরূপ, -Property SerialNumber উল্লেখ করার মাধ্যমে, আপনি স্থানান্তরিত তথ্যের পরিমাণ হ্রাস করেন, যা কোয়েরিটিকে আরও সহজ করে তোলে। বিশেষ করে বৃহৎ পরিসরে দ্রুততর এবং অধিক কার্যকর।কয়েক ডজন বা শত শত মেশিনে চালিত ইনভেন্টরি বা অডিট স্ক্রিপ্ট ডিজাইন করার সময় "শুধু প্রয়োজনীয় জিনিসই অর্ডার করো" এই মানসিকতাটি অত্যন্ত গুরুত্বপূর্ণ।
সংক্ষেপে, Get-CimInstance আপনাকে একটি অত্যন্ত শক্তিশালী ভারসাম্য প্রদান করে। সরলতা (একটি কমান্ড লাইন) এবং নমনীয়তানির্দিষ্ট ক্লাস, পুরোনো WQL কোয়েরি, বা পুনরুদ্ধারের জন্য অপ্টিমাইজ করতে চান এমন নির্দিষ্ট প্রোপার্টি নিয়ে কাজ করার ক্ষেত্রেই হোক না কেন।
CIM, সেশন এবং WSMan/DCOM প্রোটোকল ব্যবহার করে দূরবর্তী পরামর্শ
যখন আপনি স্থানীয় টিম থেকে সরে গিয়ে রিমোট মেশিনগুলোতে কোয়েরি করা শুরু করেন, তখন বেশ কিছু বিষয় সামনে আসে: অনুমতি, যোগাযোগ প্রোটোকল এবং কর্মক্ষমতাযদিও অনেকে পাওয়ারশেলকে "বিপজ্জনক" কিছু হিসেবে দেখে, আসল সত্য হলো এটি আপনাকে কোনো অতিরিক্ত সুবিধা দেয় না: গ্রাফিক্যাল ইন্টারফেস বা অন্য যেকোনো টুলের মতোই আপনার ঠিক একই অনুমতি থাকে, এর বেশিও নয়, কমও নয়।
যদি আপনি সেই কম্পিউটারে পর্যাপ্ত অধিকার না থাকা সত্ত্বেও Get-CimInstance -ComputerName Server -ClassName Win32_BIOS চালানোর চেষ্টা করেন, আপনি “অ্যাক্সেস প্রত্যাখ্যাত” ত্রুটি বার্তাটি পাবেন।বিষয়টা এমন নয় যে পাওয়ারশেল কাজ করছে না; বরং আসল কারণ হলো, আপনি যে ব্যবহারকারী হিসেবে সেশনটি চালাচ্ছেন, WMI-তে থাকা সেই তথ্য অ্যাক্সেস করার অধিকার তার নেই। আপনি অবশ্যই একজন ডোমেইন অ্যাডমিনিস্ট্রেটর হিসেবে কনসোল খুলতে পারেন, কিন্তু তার মানে হলো যেকোনো কমান্ড সেই বিশেষাধিকারগুলো নিয়েই কার্যকর হবে, যা অনেক পরিবেশে একটি অপ্রয়োজনীয় ঝুঁকি।
সুপারিশটি হলো নীতি প্রয়োগ করা। ন্যূনতম সুযোগ-সুবিধা এবং শুধুমাত্র প্রয়োজনে তা বৃদ্ধি করুন।যেসব cmdlet-এ -Credential প্যারামিটারটি সাপোর্ট করে, সেগুলোতে আপনি শুধুমাত্র সেই কমান্ডের জন্যই বিকল্প ক্রেডেনশিয়াল নির্দিষ্ট করতে পারেন। তবে, Get-CimInstance সরাসরি -Credential গ্রহণ করে না, এবং এখানেই CimSessions একটি চমৎকার সমাধান হিসেবে কাজে আসে।
একটি CimSession হলো দূরবর্তী কম্পিউটারের সাথে একটি স্থায়ী সংযোগ, যা আপনি New-CimSession কমান্ড ব্যবহার করে কম্পিউটারের নাম এবং ক্রেডেনশিয়াল (যেমন, New-CimSession -ComputerName dc01 -Credential (Get-Credential)) দিয়ে তৈরি করতে পারেন। এই সেশনটি একটি ভেরিয়েবলে সংরক্ষিত থাকে, যেমন $CimSession, এবং তারপর এটি Get-CimInstance এর সাথে পুনরায় ব্যবহার করা হয়। -ComputerName-এর পরিবর্তে -CimSession প্যারামিটার ব্যবহার করে, যা আপনাকে একাধিক কোয়েরিকে একটিমাত্র কানেকশনে কেন্দ্রীভূত করার সুযোগ দেয়।
ক্রেডেনশিয়াল সমস্যা ছাড়াও, Get-CimInstance ডিফল্ট ব্যবহার করে। WSMan প্রোটোকল (WinRM-এর উপর ভিত্তি করে)এর অর্থ হলো, রিমোট কম্পিউটারে অবশ্যই WSMan স্ট্যাক ভার্সন ৩.০ বা তার বেশি থাকতে হবে, যা সাধারণত PowerShell ৩.০ এবং তার পরবর্তী সংস্করণগুলোতে দেখা যায়। এই সংযোগ পদ্ধতিটি ব্যবহার করার জন্য, আপনি `Test-WSMan -ComputerName RemoteComputer` কমান্ডের মাধ্যমে একটি কম্পিউটারে WSMan স্ট্যাক ভার্সন পরীক্ষা করতে পারেন এবং "Stack" ভ্যালুটি ৩.০ বা তার বেশি কিনা তা যাচাই করে নিতে পারেন।
DCOM এবং পশ্চাৎ সামঞ্জস্য সহ CIM সেশন
Get-WmiObject ভিত্তিক পুরোনো WMI cmdlet-গুলো নির্ভর করে DCOM প্রোটোকল, যা এখনও উইন্ডোজের পুরোনো সংস্করণগুলোর সাথে সামঞ্জস্যপূর্ণ।সমস্যাটি হলো যে, আধুনিক সিস্টেমগুলোতে ফায়ারওয়াল সাধারণত ডিফল্টভাবে DCOM ব্লক করে রাখে, এবং যদি আপনি এটি সরাসরি ব্যবহার করতে চান, তবে আপনাকে নির্দিষ্ট পোর্ট খুলতে হয়, যা প্রতিষ্ঠানের নিরাপত্তা নীতির পরিপন্থী হতে পারে।
CIM cmdlet-গুলো একটি শক্তিশালী মধ্যপন্থা প্রদান করে: আপনি এর মাধ্যমে সেশন অপশন তৈরি করতে পারেন New-CimSessionOption -Protocol Dcomআপনি সেগুলোকে একটি ভেরিয়েবলে (যেমন, $DCOM) সংরক্ষণ করতে পারেন এবং তারপর New-CimSession-এর সাথে একত্রিত করে এমন একটি CimSession তৈরি করতে পারেন যা WSMan-এর পরিবর্তে DCOM ব্যবহার করে। এর ফলে আপনি খুব পুরোনো সার্ভারগুলোতেও সংযোগ করতে পারবেন, এমনকি Windows Server 2000-এরও আগের সার্ভারগুলোতে, যেখানে PowerShell ইনস্টল করা নেই।
সাধারণত একজন ডোমেইন অ্যাডমিনিস্ট্রেটর বা উচ্চতর বিশেষাধিকার সম্পন্ন কোনো অ্যাকাউন্টের ক্রেডেনশিয়াল একটি ভেরিয়েবলে সংরক্ষণ করা সুবিধাজনক (উদাহরণস্বরূপ $Cred = Get-Credentialযাতে প্রতিবার সেগুলো টাইপ করার ঝামেলা এড়ানো যায়। তারপর, New-CimSession -ComputerName sql03 -SessionOption $DCOM -Credential $Cred-এর মতো কোনো কমান্ড ব্যবহার করে আপনি এমন একটি পুরোনো সার্ভারে DCOM-এর মাধ্যমে একটি CimSession শুরু করতে পারেন, যেটি WSMan সাপোর্ট করে না কিন্তু WMI আছে।
চিত্রনাট্যকারের দৃষ্টিকোণ থেকে এর সবচেয়ে বড় সুবিধা হলো যে প্রোটোকলের ওপর নির্ভর করে Get-CimInstance-এর আউটপুট পরিবর্তিত হয় না।আপনি WSMan বা DCOM, যেটাই ব্যবহার করুন না কেন, একই অবজেক্ট এবং প্রোপার্টি পাবেন। এটি লজিককে অনেক সহজ করে তোলে, কারণ আপনি উপযুক্ত প্রোটোকল শনাক্ত করার কাজটি একটি ফাংশনের মধ্যে রাখতে পারেন এবং বাকি কোডকে CimSessions-এর সাথে সবসময় স্বচ্ছভাবে কাজ করতে দিতে পারেন।
প্রকৃতপক্ষে, এমন কাস্টম ফাংশন তৈরি করা বেশ প্রচলিত যা Test-WSMan ব্যবহার করে WSMan পরীক্ষা করে এবং, যদি তা অনুপলব্ধ থাকে, তাহলে New-CimSessionOption ব্যবহার করে স্বয়ংক্রিয়ভাবে DCOM-এ চলে যায়। এইভাবে আপনি পারেন মিশ্র পরিবেশে CimSessions তৈরির প্রক্রিয়াকে প্রমিত করুন আপনার সমস্ত স্ক্রিপ্টে সংযোগ লজিকের পুনরাবৃত্তি না করেই আধুনিক এবং পুরোনো সার্ভারগুলির সাথে সংযোগ স্থাপন করুন।
CimSessions-এর ব্যবস্থাপনা, তালিকাভুক্তকরণ এবং পরিচ্ছন্নতা
যখন আপনি নিবিড়ভাবে CimSessions ব্যবহার করা শুরু করেন, তখন অপ্রয়োজনীয় সংযোগ জমা হওয়া এড়াতে এর উপর নজর রাখা জরুরি। Get-CimSession আপনাকে সমস্ত খোলা সেশন তালিকাভুক্ত করতে দেয়।তারা কোন ডিভাইসটি নির্দেশ করছে তা দেখুন এবং তারা কোন প্রোটোকল (WSMAN বা DCOM) ব্যবহার করছে তা পরীক্ষা করুন, যা সংযোগ বা প্রমাণীকরণ সমস্যা নির্ণয়ের জন্য খুবই সহায়ক।
আপনি চাইলে বিদ্যমান সেশনগুলো একটি ভেরিয়েবলেও পুনরুদ্ধার করতে পারেন, উদাহরণস্বরূপ। $CimSession = Get-CimSessionএবং একই সাথে একাধিক কম্পিউটার থেকে তথ্য সংগ্রহের জন্য, WSMan ও DCOM সেশনগুলোকে একই অপারেশনে একত্রিত করে একটিমাত্র Get-CimInstance -CimSession $CimSession -ClassName Win32_BIOS কমান্ডে এগুলো ব্যবহার করুন।
সেই তথ্যগুলো খতিয়ে দেখা শেষ হলে, অপ্রয়োজনীয়ভাবে রিসোর্স খোলা রাখা এড়াতে সেশনগুলো বন্ধ করে দেওয়াই শ্রেয়। Get-CimSession | Remove-CimSession এটি বর্তমান প্রোফাইল থেকে সমস্ত সক্রিয় CimSession একবারে মুছে ফেলে। বিকল্পভাবে, আপনি Remove-CimSession cmdlet-এ নির্দিষ্ট সেশনগুলো পাস করে সেগুলোর মধ্যে কেবল কয়েকটি বন্ধ করতে পারেন।
এইভাবে কাজ করলে আপনি পাবেন নিয়ন্ত্রিত সংযোগ এবং বিচ্ছিন্নকরণ চক্রনির্ধারিত কাজ, অটোমেশন রানবুক, বা কন্টিনিউয়াস ইন্টিগ্রেশন পাইপলাইনের মধ্যে স্ক্রিপ্ট ব্যবহার করার সময় এটি বিশেষভাবে সুপারিশ করা হয়, কারণ এগুলোর জন্য সুস্পষ্টভাবে পরিষ্করণ বা ক্লিনআপের পরিকল্পনা না করা হলে সেশনগুলো আটকে যেতে পারে।
একটি ব্যাপক অটোমেশন ভাষা হিসেবে পাওয়ারশেল
WMI এবং CIM ছাড়াও, PowerShell হয়ে উঠেছে একটি সাধারণ-উদ্দেশ্য অটোমেশন ভাষা এটি সাধারণ উইন্ডোজ অ্যাডমিনিস্ট্রেশন স্ক্রিপ্টের চেয়ে অনেক উন্নত। এর উন্নত সক্ষমতাগুলো নিয়ে বই এবং সম্পূর্ণ কোর্স রয়েছে, যেখানে লিনাক্স ও উইন্ডোজে ইনস্টলেশন থেকে শুরু করে NuGet-এর মাধ্যমে বিতরণযোগ্য মডিউল তৈরি, এবং ভিজ্যুয়াল স্টুডিও কোডের মতো আধুনিক ডেভেলপমেন্ট এনভায়রনমেন্ট পর্যন্ত সবকিছুই অন্তর্ভুক্ত।
একটি সাধারণ সূচনা বিন্দু হলো বোঝা উন্নত পাওয়ারশেল বৈশিষ্ট্যএই মডিউলগুলো আপনাকে প্রায় একটি নেটিভ কমান্ডলেটের সমপর্যায়ে প্যারামিটার, ভ্যালিডেশন, স্ট্রাকচার্ড আউটপুট এবং ইন্টিগ্রেটেড হেল্প সংজ্ঞায়িত করার সুযোগ দেয়। এর ফলে, কোডকে মডিউলে সাজিয়ে রাখলে অপারেশনস টিমের মধ্যে সহযোগিতামূলক কাজ সহজ হয়, কারণ আপনি এই মডিউলগুলোর ভার্সন তৈরি করে সেগুলোকে অভ্যন্তরীণ বা পাবলিক নিউগেট-ভিত্তিক রিপোজিটরিতে প্রকাশ করতে পারেন।
একসাথে কাজ করাও গুরুত্বপূর্ণ। কাস্টম অবজেক্ট এবং ক্লাসএটি সাধারণ লিনিয়ার স্ক্রিপ্টের চেয়ে অনেক বেশি সমৃদ্ধ ডেটা মডেলের পথ খুলে দেয়। এটি আপনাকে বিজনেস লজিক এনক্যাপসুলেট করতে, স্ট্রাকচার পুনঃব্যবহার করতে এবং আপনার নিজস্ব ম্যানেজমেন্ট টিমের জন্য অভ্যন্তরীণ এপিআই ডিজাইন করতে দেয়, যার সবকিছুই পাওয়ারশেল ইঞ্জিন দ্বারা চালিত।
উন্নত অটোমেশনের ক্ষেত্রে নিম্নলিখিত বিষয়গুলো গুরুত্বপূর্ণ ভূমিকা পালন করে: পটভূমির কাজ এবং কর্মপ্রবাহএই সক্ষমতাগুলো আপনাকে অ্যাসিঙ্ক্রোনাস টাস্ক পরিচালনা করতে, কনসোল ব্লক না করে দীর্ঘ অপারেশন চালু করতে এবং একাধিক মেশিনে জটিল সিকোয়েন্স সমন্বয় করতে সাহায্য করে। এগুলো বাল্ক WMI/CIM কোয়েরি এবং রিমোট অ্যাডমিনিস্ট্রেশন সিনারিওর জন্য বিশেষভাবে উপযোগী, যেখানে প্রায়শই সিস্টেমের পরিবর্তন বাস্তবায়ন বা ডেটা ফেরত দেওয়ার জন্য অপেক্ষা করতে হয়।
আরেকটি গুরুত্বপূর্ণ উপাদান হলো পাওয়ারশেল ডিএসসি (ডিজায়ার্ড স্টেট কনফিগারেশন), যা আপনাকে একটি অবকাঠামোর কাঙ্ক্ষিত কনফিগারেশন সংজ্ঞায়িত করুন (ভূমিকা, বৈশিষ্ট্য, পরিষেবা, ফাইল, নিরাপত্তা সেটিংস…) এবং সেই অবস্থাগুলো বারবার প্রয়োগ করুন। WMI/CIM-এর মাধ্যমে প্রাপ্ত তথ্যের সাথে একত্রিত করে, আপনি বিচ্যুতি শনাক্ত করতে, সক্রিয়ভাবে সেগুলো সংশোধন করতে এবং কম কায়িক পরিশ্রমে সামঞ্জস্যপূর্ণ পরিবেশ বজায় রাখতে পারেন।
পাওয়ারশেলের মাধ্যমে স্থানীয়, দূরবর্তী এবং ক্লাউড ব্যবস্থাপনা
সম্পূর্ণরূপে স্থানীয় স্তরে, পাওয়ারশেল এর জন্য কমান্ডলেট সরবরাহ করে অ্যাক্টিভ ডিরেক্টরি ডোমেইন সার্ভিসেস প্রশাসননেটওয়ার্ক কনফিগারেশন এবং সার্ভার ম্যানেজমেন্ট। Windows 10 এবং এর পরবর্তী সংস্করণগুলিতে এই ইন্টিগ্রেশন আরও গভীর, যা আপনাকে ওয়েবসাইট তৈরি থেকে শুরু করে অ্যাক্টিভ ডিরেক্টরি অবজেক্ট ম্যানেজমেন্ট এবং নেটওয়ার্ক অ্যাডাপ্টার কনফিগারেশন পর্যন্ত সবকিছু স্বয়ংক্রিয় করতে দেয়।
একটি কম পরিচিত কিন্তু খুব দরকারী জিনিস হল PSProviders এবং PSDrivesএই বৈশিষ্ট্যগুলো আপনাকে বিভিন্ন স্টোরেজ লোকেশনকে (ফাইল সিস্টেম, রেজিস্ট্রি, অ্যাক্টিভ ডিরেক্টরি, ইত্যাদি) এমনভাবে ব্যবহার করার সুযোগ দেয়, যেন সেগুলো নেভিগেটযোগ্য ড্রাইভ। এর ফলে, উদাহরণস্বরূপ, আপনি হার্ড ড্রাইভ নেভিগেট করার জন্য যে সিনট্যাক্স ব্যবহার করেন, ঠিক সেই সিনট্যাক্স ব্যবহার করেই দূরবর্তী কম্পিউটারে অ্যাক্টিভ ডিরেক্টরি গ্রুপ, রেজিস্ট্রি কী, বা ফোল্ডার স্ট্রাকচার তৈরি করতে পারেন।
রিমোট অ্যাডমিনিস্ট্রেশনের ক্ষেত্রে, পাওয়ারশেল অত্যন্ত শক্তিশালী কিছু ফাংশন সমন্বিত করে। এক বা একাধিক কম্পিউটারের সাথে সংযোগ স্থাপন করুন এবং কমান্ড চালান আপনার নামেআপনি পারসিস্টেন্ট পিএসএসেশন সেশন, অ্যাডভান্সড রিমোটিং টেকনিক, ওয়ান-টু-মেনি সিনারিও (একই সাথে একাধিক সার্ভার ম্যানেজ করার জন্য), অথবা নির্দিষ্ট কেস ডিবাগ করার জন্য ওয়ান-টু-ওয়ান সিনারিও ব্যবহার করতে পারেন। অবশ্যই, এই সবকিছুই রিমোট অ্যাক্সেসের আর্কিটেকচার এবং সিকিউরিটি মডেলকে সম্মান করে করা হয়।
আজ ক্লাউডও একটি মৌলিক ভূমিকা পালন করে। সাথে অ্যাজুর পাওয়ারশেল এবং অ্যাজুর ক্লাউড শেল আপনি সরাসরি কমান্ড লাইন থেকে ভার্চুয়াল মেশিন, স্টোরেজ এবং সাবস্ক্রিপশন পরিচালনা করতে পারেন। আপনি যদি হাইব্রিড বা সম্পূর্ণ অ্যাজুর-হোস্টেড এনভায়রনমেন্ট পরিচালনা করেন, তবে অ্যাজুর পাওয়ারশেল মডিউলগুলো ইনস্টল করা এবং সেগুলোর সাথে কাজ করতে অভ্যস্ত হওয়া প্রায় বাধ্যতামূলক।
অন্যদিকে, পাওয়ারশেলও নিজেকে প্রতিষ্ঠিত করেছে মাইক্রোসফট ৩৬৫ পরিচালনার জন্য রেফারেন্স টুল (এক্সচেঞ্জ অনলাইন, শেয়ারপয়েন্ট অনলাইন, টিমস, ব্যবহারকারী এবং লাইসেন্স)। অ্যাকাউন্ট তৈরি ও পরিচালনা থেকে শুরু করে গ্রুপ, শেয়ারপয়েন্ট সাইট এবং মাইক্রোসফট টিমস-সহ এক্সচেঞ্জ অনলাইন রিসোর্সসমূহ পরিচালনা পর্যন্ত সবকিছুই স্ক্রিপ্টের মাধ্যমে সমন্বয় করা যায়, যা ওয়েব পোর্টালে ম্যানুয়াল কাজ ব্যাপকভাবে কমিয়ে দেয়।
স্ক্রিপ্টিং, পাইপলাইন এবং সর্বোত্তম কর্মপদ্ধতি
WMI এবং CIM-এর মাধ্যমে উন্নত অটোমেশনের সর্বোচ্চ সুবিধা পেতে হলে, নিম্নলিখিত বিষয়গুলিতে দক্ষতা অর্জন করা অপরিহার্য: পাওয়ারশেল পাইপলাইন মডেলঅন্যান্য শেলের মতো এখানে সাধারণ টেক্সট নয়, বরং সম্পূর্ণ অবজেক্ট পাস করতে হয়, যা আপনাকে অত্যন্ত নির্ভুলভাবে তথ্য নির্বাচন, সাজানো, পরিমাপ, ফিল্টার, গণনা এবং রূপান্তর করার সুযোগ দেয়।
চ্যানেলিং নিয়ে কাজ করতে শেখার অর্থ হলো এটিকে সঠিকভাবে ব্যবহার করা। নির্বাচন এবং ফিল্টারিং কমান্ডলেটগুলিএর মধ্যে রয়েছে জটিল অবজেক্ট গণনা করার পদ্ধতি এবং তথ্য না হারিয়ে কমান্ড ও স্ক্রিপ্টের মধ্যে ডেটা আদান-প্রদান করার কৌশল বোঝা। ভেরিয়েবল, অ্যারে এবং হ্যাশ টেবিলের কাঠামোগত ব্যবহারের মাধ্যমে এই বিষয়টি আরও জোরদার হয়, যেগুলো অস্থায়ী ডেটা স্ট্রাকচার হিসেবে কাজ করে এবং যার উপর ভিত্তি করে আরও উন্নত লজিক তৈরি করা যায়।
পরবর্তী ধাপ হল স্ক্রিপ্টিং বলতে বোঝায় কমান্ডগুলোকে পুনঃব্যবহারযোগ্য স্ক্রিপ্টে প্যাকেজ করা।ফ্লো কন্ট্রোল (if, for, foreach), CSV ফাইল বা অন্যান্য ফরম্যাট থেকে ডেটা ইম্পোর্ট, ব্যবহারকারীর ইনপুট হ্যান্ডলিং, এরর হ্যান্ডলিং এবং ইভেন্ট লগিং-এর মাধ্যমে, এটি আপনাকে বিচ্ছিন্ন কমান্ড থেকে আরও শক্তিশালী অভ্যন্তরীণ টুলের দিকে যেতে সাহায্য করে।
WMI/CIM সহ ব্যাপক অটোমেশন পরিবেশে সমস্যা সমাধান এবং ত্রুটি পরিচালনা বিশেষভাবে গুরুত্বপূর্ণ, কারণ নেটওয়ার্ক বিভ্রাট, ভুলভাবে কনফিগার করা অনুমতি, অথবা অস্তিত্বহীন ক্লাস সঠিকভাবে পরিচালনা করা না হলে এগুলি একটি প্রক্রিয়াকে ব্যাহত করতে পারে। try/catch ব্লক, কনফিগারযোগ্য এরর অ্যাকশন এবং বিস্তারিত লগিং-এর মাধ্যমে আপনি এই পরিস্থিতিগুলি আগে থেকে অনুমান করতে এবং সে অনুযায়ী আরও ভালোভাবে ব্যবস্থা নিতে পারেন।
অবশেষে, সম্পর্কিত সবকিছু ফাংশন এবং মডিউলগুলো বৃত্তটি সম্পূর্ণ করে।আপনি স্ক্রিপ্টগুলোর অখণ্ডতা নিশ্চিত করতে সেগুলোতে স্বাক্ষর করেন, ফাংশনগুলোকে মডিউলে প্যাকেজ করেন, সেই মডিউলগুলো অভ্যন্তরীণ বা পাবলিক রিপোজিটরিতে বিতরণ করেন এবং আপনার প্রতিষ্ঠানের মধ্যে শেয়ার করা টুলের একটি ইকোসিস্টেম তৈরি করেন। এইভাবে, WMI, CIM বা রিমোটিং-এর উপর যেকোনো নতুন উন্নয়ন একটি সুসংহত এবং সহজে রক্ষণাবেক্ষণযোগ্য স্যুটের সাথে সমন্বিত হয়।
যখন আপনি উপরের সবকিছু—WMI/CIM, রিমোট সেশন, স্ক্রিপ্টিং, অ্যাসিঙ্ক্রোনাস জব, DSC, Azure, এবং Microsoft 365—একত্রিত করেন, তখন আপনি এমন একটি পরিবেশ পান যেখানে পাওয়ারশেলের মাধ্যমে উন্নত অটোমেশন এটি প্রশাসনের কেন্দ্রীয় কেন্দ্রবিন্দুতে পরিণত হয়। সেরা অনুশীলনগুলোর একটি মজবুত ভিত্তি, CimSessions-এর বুদ্ধিদীপ্ত ব্যবহার (WSMan এবং DCOM উভয়ের সাথে), এবং একটি মডিউলার স্ক্রিপ্ট ডিজাইনের মাধ্যমে, আপনি শুধুমাত্র গ্রাফিক্যাল উইজার্ড বা বিচ্ছিন্ন টুলের উপর নির্ভর করার চেয়ে অনেক বেশি দক্ষতার সাথে, ধারাবাহিকভাবে এবং নিরাপদে বিভিন্ন ধরনের পরিকাঠামো পরিচালনা করতে পারেন।
সুচিপত্র
- পাওয়ারশেলের উন্নয়ন এবং উন্নত অটোমেশনের একটি সংক্ষিপ্ত বিবরণ
- WMI ও CIM: মূল ধারণা এবং ব্যবহারিক পার্থক্য
- Get-CimInstance-এর বাস্তব ব্যবহার এবং কার্যকরী কোয়েরি
- CIM, সেশন এবং WSMan/DCOM প্রোটোকল ব্যবহার করে দূরবর্তী পরামর্শ
- DCOM এবং পশ্চাৎ সামঞ্জস্য সহ CIM সেশন
- CimSessions-এর ব্যবস্থাপনা, তালিকাভুক্তকরণ এবং পরিচ্ছন্নতা
- একটি ব্যাপক অটোমেশন ভাষা হিসেবে পাওয়ারশেল
- পাওয়ারশেলের মাধ্যমে স্থানীয়, দূরবর্তী এবং ক্লাউড ব্যবস্থাপনা
- স্ক্রিপ্টিং, পাইপলাইন এবং সর্বোত্তম কর্মপদ্ধতি

