উইন্ডোজ সিস্টেমে উন্নত অটোমেশনের জন্য পাওয়ারশেল, WMI এবং CIM

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

পাওয়ারশেল WMI উন্নত অটোমেশন

আপনি যদি উইন্ডোজ সিস্টেম অ্যাডমিনিস্ট্রেশনের কাজ করেন, তাহলে আজ হোক বা কাল হোক আপনাকে পাওয়ারশেল, ডাব্লিউএমআই (WMI) এবং অ্যাডভান্সড অটোমেশনের সম্মুখীন হতেই হবে । ব্যাপারটা শুধু কয়েকটি কমান্ড চালানো জানার মধ্যে সীমাবদ্ধ নয়: যখন আপনি কয়েক ডজন বা শত শত সার্ভার পরিচালনা করেন, তখন মাথা খারাপ না করে বা কোনো কিছু নষ্ট না করে তথ্য সংগ্রহ, পরিবর্তন প্রয়োগ এবং একই কাজ বারবার করার জন্য আপনার একটি সুচিন্তিত, সুসংগঠিত এবং নিরাপদ পদ্ধতির প্রয়োজন হয়।

পরবর্তী অংশে, আমরা শান্তভাবে কিন্তু পুঙ্খানুপুঙ্খভাবে আলোচনা করব, কীভাবে সাধারণ কোয়েরি থেকে শুরু করে জটিল ইনফ্রাস্ট্রাকচার সিনারিও পর্যন্ত সবকিছু স্বয়ংক্রিয় করতে WMI, CIM, এবং PowerShell রিমোট কমিউনিকেশনকে কাজে লাগানো যায়। আমরা আরও দেখব, এই সবকিছু কীভাবে মডিউল, ব্যাকগ্রাউন্ড টাস্ক, Azure, Microsoft 365 এবং কিছু উন্নত ফিচারের সাথে সমন্বিত হয়, যা একজন সিস্টেম অ্যাডমিনিস্ট্রেটরের দৈনন্দিন কাজে একটি বড় পরিবর্তন নিয়ে আসে।

পাওয়ারশেলের উন্নয়ন এবং উন্নত অটোমেশনের একটি সংক্ষিপ্ত বিবরণ

উইন্ডোজ পাওয়ারশেল তার প্রাথমিক সংস্করণগুলো থেকে অনেক বিকশিত হয়েছে , এবং এই বিবর্তনের একটি বড় অংশ এসেছে উইন্ডোজ সার্ভার ২০১২-এর মাধ্যমে, যেখানে দূরবর্তী যোগাযোগ উন্নত করা হয়েছিল, উপলব্ধ কমান্ডলেটগুলোর পরিসর বাড়ানো হয়েছিল, এবং নিরাপত্তা বাড়ানোর জন্য ডিবাগিং, ব্যাকগ্রাউন্ড জব ও সীমাবদ্ধ এন্ডপয়েন্টের মতো বিষয়গুলোকে আরও সহজ করা হয়েছিল।

এই পরিবেশের পেছনের অন্যতম মূল ধারণাটি হলো, অ্যাডমিনিস্ট্রেটররা উন্নত ফিচার, পুনঃব্যবহারযোগ্য মডিউল এবং একটি ব্যাপক হেল্প সিস্টেম ব্যবহার করে বিস্তৃত কোডিং ছাড়াই কমান্ডলেট (cmdlet)-এর মতো আচরণ তৈরি করতে পারেন । এর মানে হলো, বিচ্ছিন্ন গ্রাফিক্যাল টুলের উপর নির্ভর করার পরিবর্তে, আপনি স্ক্রিপ্ট এবং মডিউলের একটি সুসংহত সেট তৈরি করতে পারেন যা সার্ভার, নেটওয়ার্ক, অ্যাক্টিভ ডিরেক্টরি, অ্যাজুর বা মাইক্রোসফট ৩৬৫ পরিচালনার প্রক্রিয়াগুলোকে স্বয়ংক্রিয় করে তোলে।

উন্নত অটোমেশনের ক্ষেত্রে , অ্যাসিঙ্ক্রোনাসভাবে কাজ সম্পাদনের জন্য জব, ওয়ার্কফ্লো, পাওয়ারশেল ডিএসসি (PowerShell DSC) সহ কনফিগারেশন-ভিত্তিক অ্যাডমিনিস্ট্রেশন এবং জেএএ (JEA - জাস্ট এনাফ অ্যাডমিনিস্ট্রেশন) বা পাওয়ারশেল ওয়েব অ্যাক্সেসের মতো নিরাপত্তা বিকল্পগুলির মতো বৈশিষ্ট্যগুলিও উল্লেখযোগ্য, যা প্রত্যেক ব্যক্তি কী করতে পারবে এবং কোথা থেকে করতে পারবে তার উপর বিস্তারিত নিয়ন্ত্রণ প্রদান করে।

এই সম্পূর্ণ ইকোসিস্টেমটি WMI এবং CIM-এর সাথে বিশেষভাবে খাপ খায়, কারণ অপারেটিং সিস্টেম দ্বারা প্রকাশিত ম্যানেজমেন্ট তথ্য (হার্ডওয়্যার, সার্ভিস, প্রসেস , নেটওয়ার্ক কনফিগারেশন, ইনস্টল করা সফটওয়্যার, ইত্যাদি) একগুচ্ছ অবজেক্টে পরিণত হয়, যেগুলোকে আপনি ব্যাপক অটোমেশনের জন্য ডিজাইন করা পাওয়ারশেল কমান্ড ব্যবহার করে কোয়েরি, ফিল্টার এবং মডিফাই করতে পারেন।

WMI ও CIM: মূল ধারণা এবং ব্যবহারিক পার্থক্য

পাওয়ারশেলে WMI এবং CIM

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

পাওয়ারশেল ইকোসিস্টেমে WMI-এর স্বাভাবিক উত্তরসূরি হলো CIM (কমন ইনফরমেশন মডেল) cmdlet-সমূহ , যা পাওয়ারশেল ৩.০-এর সাথে প্রবর্তিত হয়েছে। এই cmdlet-গুলো CimCmdlets মডিউলে একত্রিত করা হয়েছে এবং এর মধ্যে Get-CimInstance, Get-CimClass, New-CimInstance, Invoke-CimMethod, Register-CimIndicationEvent, Set-CimInstance, এবং Remove-CimInstance-এর মতো কমান্ডগুলো অন্তর্ভুক্ত রয়েছে।

উইন্ডোজ পাওয়ারশেলের পুরোনো সংস্করণগুলিতে, যেমন উইন্ডোজ ১০ পাওয়ারশেল ৫.১ বা উইন্ডোজ ১১ পাওয়ারশেলে, আপনি এখনও ক্লাসিক WMI cmdlet-গুলি (Get-WmiObject, Invoke-WmiMethod, Register-WmiEvent, Remove-WmiObject, Set-WmiInstance) খুঁজে পেতে পারেন। তবে, এই cmdlet-গুলি এখন অপ্রচলিত এবং পাওয়ারশেল ৬ ও তার পরবর্তী সংস্করণগুলিতে আর অন্তর্ভুক্ত নয়, তাই এগুলি শুধুমাত্র লিগ্যাসি স্ক্রিপ্ট রক্ষণাবেক্ষণ বা পুরোনো কোড পর্যালোচনার জন্য প্রাসঙ্গিক।

যখন কেউ 'CIM cmdlet ব্যবহার করে WMI কোয়েরি করার' কথা বলে, তখন বিষয়টি পরস্পরবিরোধী নয়: CIM cmdlet-গুলোও WMI তথ্য অ্যাক্সেস করে , কিন্তু তারা WSMan-এর মতো আরও আধুনিক প্রোটোকল এবং একটি অধিক সামঞ্জস্যপূর্ণ API ব্যবহার করে তা করে থাকে। বাস্তবিক অর্থে, নতুন ডেভেলপমেন্টের জন্য আপনার CIM-এর উপর মনোযোগ দেওয়া উচিত এবং শুধুমাত্র লিগ্যাসি স্ক্রিপ্ট মাইগ্রেট বা বোঝার প্রয়োজনে WMI cmdlet-এর কথা বিবেচনা করা উচিত।

ঐতিহাসিকভাবে, অনেক প্রশাসক WMI কোয়েরি করার জন্য VBScript-এর সাথে WQL কোয়েরি ল্যাঙ্গুয়েজ ব্যবহার করতেন; উদাহরণস্বরূপ, root\CIMV2 নেমস্পেসে সংযোগ স্থাপন করে Win32_BIOS-এর মতো ক্লাস কোয়েরি করার মাধ্যমে। সেই একই WQL কোয়েরি আজ Get-CimInstance-এর সাথে -Query প্যারামিটারটি পাস করে পুনরায় ব্যবহার করা যেতে পারে, যা প্রথম থেকে লজিকটি পুনরায় লেখার প্রয়োজন ছাড়াই VBScript থেকে PowerShell-এ রূপান্তরকে ব্যাপকভাবে সহজ করে তোলে।

Get-CimInstance-এর বাস্তব ব্যবহার এবং কার্যকরী কোয়েরি

Get-CimInstance ব্যবহার করে WMI কোয়েরি

দৈনন্দিন কাজের জন্য, সম্পূর্ণ WQL কোয়েরি লেখার পরিবর্তে, PowerShell দিয়ে WMI কোয়েরি করার সবচেয়ে স্বাভাবিক উপায় হলো -ClassName প্যারামিটারসহ Get-CimInstance ব্যবহার করা । উদাহরণস্বরূপ, 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` কমান্ডটি চালানোর চেষ্টা করেন, তাহলে আপনি একটি "Access is denied" এরর পাবেন । এর কারণ এই নয় যে PowerShell কাজ করছে না; বরং এর সহজ কারণ হলো, আপনি যে ইউজার হিসেবে সেশনটি চালাচ্ছেন, WMI-তে থাকা ওই তথ্য অ্যাক্সেস করার অধিকার তার নেই। আপনি অবশ্যই একজন ডোমেইন অ্যাডমিনিস্ট্রেটর হিসেবে কনসোল খুলতে পারেন, কিন্তু তার মানে হলো যেকোনো কমান্ড সেই প্রিভিলেজগুলো নিয়েই এক্সিকিউট হবে, যা অনেক পরিবেশে একটি অপ্রয়োজনীয় ঝুঁকি।

পরামর্শ হলো সর্বনিম্ন বিশেষাধিকারের নীতি প্রয়োগ করা এবং শুধুমাত্র প্রয়োজনের সময় বিশেষাধিকার বৃদ্ধি করা । যে সমস্ত cmdlet-এ -Credential প্যারামিটারটি সমর্থিত, সেগুলিতে আপনি শুধুমাত্র নির্দিষ্ট কমান্ডটির জন্য বিকল্প ক্রেডেনশিয়াল উল্লেখ করতে পারেন। তবে, Get-CimInstance সরাসরি -Credential গ্রহণ করে না, এবং এখানেই CimSessions একটি চমৎকার সমাধান হিসেবে কাজে আসে।

একটি CimSession হলো একটি রিমোট কম্পিউটারের সাথে একটি স্থায়ী সংযোগ, যা আপনি New-CimSession কমান্ড ব্যবহার করে তৈরি করতে পারেন। এর জন্য কম্পিউটারের নাম এবং ক্রেডেনশিয়াল (credentials) পাস করতে হয় (উদাহরণস্বরূপ, New-CimSession -ComputerName dc01 -Credential (Get-Credential))। এই সেশনটি $CimSession-এর মতো একটি ভেরিয়েবলে সংরক্ষিত থাকে এবং পরে -ComputerName-এর পরিবর্তে -CimSession প্যারামিটার ব্যবহার করে Get-CimInstance-এর মাধ্যমে পুনরায় ব্যবহার করা যায়, যা আপনাকে একাধিক কোয়েরিকে একটিমাত্র সংযোগে একত্রিত করার সুযোগ দেয়।

ক্রেডেনশিয়াল আবশ্যকতার পাশাপাশি, Get-CimInstance ডিফল্টরূপে WSMan প্রোটোকল (WinRM-ভিত্তিক) ব্যবহার করে । এর মানে হলো, রিমোট মেশিনে অবশ্যই WSMan স্ট্যাক ভার্সন ৩.০ বা তার বেশি থাকতে হবে, যা সাধারণত PowerShell ৩.০ এবং তার পরবর্তী সংস্করণগুলোতে পাওয়া যায়। এই সংযোগ পদ্ধতিটি ব্যবহার করার জন্য, আপনি `Test-WSMan -ComputerName RemoteComputer` কমান্ডের মাধ্যমে একটি মেশিনে WSMan স্ট্যাক ভার্সন পরীক্ষা করতে পারেন এবং "Stack" ভ্যালুটি ৩.০ বা তার বেশি কিনা তা যাচাই করতে পারেন।

DCOM এবং পশ্চাৎ সামঞ্জস্য সহ CIM সেশন

Get-WmiObject-এর উপর ভিত্তি করে তৈরি পুরোনো WMI cmdlet-গুলো DCOM প্রোটোকলের উপর নির্ভর করে, যা এখনও Windows-এর পুরোনো সংস্করণগুলোতে সমর্থিত । সমস্যাটি হলো, আরও আধুনিক সিস্টেমগুলোতে ফায়ারওয়ালগুলো প্রায়শই ডিফল্টরূপে 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-এ চলে যায়। এটি আপনাকে আপনার সমস্ত স্ক্রিপ্টে সংযোগের লজিক পুনরাবৃত্তি না করেই, আধুনিক এবং পুরোনো উভয় ধরনের সার্ভারযুক্ত মিশ্র পরিবেশে CimSession তৈরিকে প্রমিত করতে সাহায্য করে।

CimSessions-এর ব্যবস্থাপনা, তালিকাভুক্তকরণ এবং পরিচ্ছন্নতা

যখন আপনি ব্যাপকভাবে CimSessions ব্যবহার করা শুরু করেন, তখন অপ্রয়োজনীয় সংযোগ জমা হওয়া এড়াতে সেগুলোর হিসাব রাখা জরুরি। Get-CimSession ব্যবহার করে, আপনি সমস্ত খোলা সেশনের তালিকা দেখতে পারেন , সেগুলো কোন মেশিনের দিকে নির্দেশ করছে তা দেখতে পারেন, এবং সেগুলো কোন প্রোটোকল (WSMAN বা DCOM) ব্যবহার করছে তা পরীক্ষা করতে পারেন, যা সংযোগ বা প্রমাণীকরণের সমস্যা নির্ণয়ের জন্য খুবই উপযোগী।

আপনি বিদ্যমান সেশনগুলোকে একটি ভেরিয়েবলে, যেমন $CimSession = Get-CimSession , পুনরুদ্ধার করতে পারেন এবং একই অপারেশনে WSMan ও DCOM সেশন একত্রিত করে, Get-CimInstance -CimSession $CimSession -ClassName Win32_BIOS-এর মতো একটিমাত্র কমান্ডে ব্যবহার করে একসাথে একাধিক কম্পিউটারে কোয়েরি করতে পারেন।

তথ্য বিশ্লেষণ করা শেষ হলে, অপ্রয়োজনীয়ভাবে রিসোর্স খোলা রাখা এড়াতে সেশনগুলো বন্ধ করে দেওয়া ভালো। Get-CimSession | Remove-CimSession cmdlet-টি বর্তমান প্রোফাইল থেকে সমস্ত সক্রিয় CimSession একবারে মুছে ফেলে। বিকল্পভাবে, আপনি Remove-CimSession cmdlet-এ নির্দিষ্ট সেশনগুলো পাস করে সেগুলোর মধ্যে শুধু কয়েকটি বন্ধ করতে পারেন।

এইভাবে কাজ করলে আপনি সংযোগ এবং সংযোগ বিচ্ছিন্ন করার চক্রকে নিয়ন্ত্রণ করতে পারেন , যা নির্ধারিত কাজ (scheduled tasks), অটোমেশন রানবুক (automation runbooks), বা কন্টিনিউয়াস ইন্টিগ্রেশন পাইপলাইনের (continuous integration pipelines) মধ্যে স্ক্রিপ্ট ব্যবহার করার সময় অত্যন্ত সুপারিশযোগ্য। কারণ, এগুলোর জন্য সুস্পষ্টভাবে পরিকল্পনা না করা হলে সেশনগুলো আটকে যেতে পারে।

একটি ব্যাপক অটোমেশন ভাষা হিসেবে পাওয়ারশেল

WMI এবং CIM ছাড়াও, PowerShell একটি সাধারণ অটোমেশন ল্যাঙ্গুয়েজে পরিণত হয়েছে যা গতানুগতিক উইন্ডোজ ম্যানেজমেন্ট স্ক্রিপ্টের চেয়ে অনেক বেশি কার্যকর। এর উন্নত সক্ষমতাগুলো নিয়ে বই এবং সম্পূর্ণ কোর্স রয়েছে, যেখানে লিনাক্স ও উইন্ডোজে ইনস্টলেশন থেকে শুরু করে NuGet-এর মাধ্যমে বিতরণযোগ্য মডিউল তৈরি, এমনকি ভিজ্যুয়াল স্টুডিও কোডের মতো আধুনিক ডেভেলপমেন্ট এনভায়রনমেন্ট পর্যন্ত সবকিছুই অন্তর্ভুক্ত।

এর একটি সাধারণ সূচনা হলো পাওয়ারশেলের উন্নত বৈশিষ্ট্যগুলো পুঙ্খানুপুঙ্খভাবে বোঝা , যা আপনাকে প্রায় একটি নেটিভ কমান্ডলেটের সমপর্যায়ে প্যারামিটার নির্ধারণ, যাচাইকরণ, কাঠামোগত আউটপুট তৈরি এবং সমন্বিত সাহায্য ব্যবহারের সুযোগ দেয়। এরপর, কোডকে মডিউলে সংগঠিত করা অপারেশনস টিমের মধ্যে সহযোগিতামূলক কাজকে সহজ করে তোলে, কারণ আপনি এই মডিউলগুলোর ভার্সন তৈরি করে সেগুলোকে অভ্যন্তরীণ বা পাবলিক নিউগেট-ভিত্তিক রিপোজিটরিতে প্রকাশ করতে পারেন।

কাস্টম অবজেক্ট এবং ক্লাস নিয়ে কাজ করাও অত্যন্ত গুরুত্বপূর্ণ , যা সাধারণ লিনিয়ার স্ক্রিপ্টের চেয়ে অনেক বেশি সমৃদ্ধ ডেটা মডেল তৈরির সুযোগ করে দেয়। এর মাধ্যমে আপনি বিজনেস লজিককে এনক্যাপসুলেট করতে, স্ট্রাকচার পুনঃব্যবহার করতে এবং আপনার নিজস্ব ম্যানেজমেন্ট টিমের জন্য অভ্যন্তরীণ এপিআই ডিজাইন করতে পারবেন, যার সবকিছুই পাওয়ারশেল ইঞ্জিন দ্বারা চালিত হয়।

উন্নত অটোমেশনের ক্ষেত্রে, ব্যাকগ্রাউন্ড জব এবং ওয়ার্কফ্লো একটি অত্যন্ত গুরুত্বপূর্ণ ভূমিকা পালন করে , যা অ্যাসিঙ্ক্রোনাস টাস্ক পরিচালনা, কনসোল ব্লক না করে দীর্ঘ অপারেশন সম্পাদন এবং একাধিক মেশিনে জটিল সিকোয়েন্সের সমন্বয় সাধন করতে সক্ষম করে। এই সক্ষমতাগুলো WMI/CIM-এ বাল্ক কোয়েরি এবং রিমোট অ্যাডমিনিস্ট্রেশন সিনারিওগুলোর জন্য বিশেষভাবে উপযোগী, যেখানে প্রায়শই সিস্টেমের পরিবর্তন বাস্তবায়ন বা ডেটা ফেরত দেওয়ার জন্য অপেক্ষা করতে হয়।

আরেকটি গুরুত্বপূর্ণ উপাদান হলো পাওয়ারশেল ডিএসসি (ডিজায়ার্ড স্টেট কনফিগারেশন), যা আপনাকে একটি ইনফ্রাস্ট্রাকচারের (রোল, ফিচার, সার্ভিস, ফাইল, সিকিউরিটি সেটিংস ইত্যাদি) কাঙ্ক্ষিত কনফিগারেশন নির্ধারণ করতে এবং সেই স্টেটগুলো বারবার প্রয়োগ করতে দেয়। WMI/CIM-এর মাধ্যমে প্রাপ্ত তথ্যের সাথে এটিকে একত্রিত করে, আপনি বিচ্যুতিগুলো শনাক্ত করতে, সক্রিয়ভাবে সেগুলো সংশোধন করতে এবং কম ম্যানুয়াল পরিশ্রমে সামঞ্জস্যপূর্ণ পরিবেশ বজায় রাখতে পারেন।

পাওয়ারশেলের মাধ্যমে স্থানীয়, দূরবর্তী এবং ক্লাউড ব্যবস্থাপনা

স্থানীয় পর্যায়ে, পাওয়ারশেল অ্যাক্টিভ ডিরেক্টরি ডোমেইন সার্ভিসেস পরিচালনা , নেটওয়ার্ক কনফিগার করা এবং সার্ভার অ্যাডমিনিস্টার করার জন্য কমান্ডলেট প্রদান করে। উইন্ডোজ ১০ এবং এর পরবর্তী সংস্করণগুলিতে এই ইন্টিগ্রেশন আরও গভীর, যা আপনাকে ওয়েবসাইট তৈরি করা থেকে শুরু করে অ্যাক্টিভ ডিরেক্টরি অবজেক্ট পরিচালনা এবং নেটওয়ার্ক অ্যাডাপ্টার কনফিগার করা পর্যন্ত সবকিছু স্বয়ংক্রিয় করতে দেয়।

  কিভাবে একটি সম্পূর্ণ Firefox প্রোফাইল Windows 10 থেকে Windows 11 এ স্থানান্তর করবেন

তুলনামূলকভাবে কম পরিচিত কিন্তু অত্যন্ত দরকারি একটি উপাদান হলো PSProviders এবং PSDrives , যা আপনাকে বিভিন্ন স্টোরেজ লোকেশনকে (ফাইল সিস্টেম, রেজিস্ট্রি, অ্যাক্টিভ ডিরেক্টরি, ইত্যাদি) এমনভাবে ব্যবহার করার সুযোগ দেয়, যেন সেগুলো নেভিগেবল ড্রাইভ। এর ফলে, উদাহরণস্বরূপ, আপনি হার্ড ড্রাইভ নেভিগেট করার জন্য ব্যবহৃত একই সিনট্যাক্স ব্যবহার করে দূরবর্তী কম্পিউটারে অ্যাক্টিভ ডিরেক্টরি গ্রুপ, রেজিস্ট্রি কী বা ফোল্ডার স্ট্রাকচার তৈরি করতে পারেন।

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

বর্তমানে ক্লাউডও একটি মৌলিক ভূমিকা পালন করে। Azure PowerShell এবং Azure Cloud Shell-এর মাধ্যমে আপনি সরাসরি কমান্ড লাইন থেকে ভার্চুয়াল মেশিন, স্টোরেজ এবং সাবস্ক্রিপশন পরিচালনা করতে পারেন। আপনি যদি হাইব্রিড বা সম্পূর্ণ Azure-হোস্টেড এনভায়রনমেন্ট পরিচালনা করেন, তবে Azure PowerShell মডিউল ইনস্টল করা এবং সেগুলোর সাথে পরিচিত হওয়া প্রায় বাধ্যতামূলক।

অন্যদিকে, মাইক্রোসফট ৩৬৫ (এক্সচেঞ্জ অনলাইন, শেয়ারপয়েন্ট অনলাইন, টিমস, ব্যবহারকারী এবং লাইসেন্স) পরিচালনার জন্য পাওয়ারশেলও একটি অপরিহার্য টুল হিসেবে নিজেকে প্রতিষ্ঠিত করেছে । অ্যাকাউন্ট তৈরি ও পরিচালনা থেকে শুরু করে গ্রুপ, শেয়ারপয়েন্ট সাইট এবং মাইক্রোসফট টিমস-সহ এক্সচেঞ্জ অনলাইন রিসোর্সসমূহ পরিচালনা পর্যন্ত সবকিছুই স্ক্রিপ্টের মাধ্যমে নিয়ন্ত্রণ করা যায়, যা ওয়েব পোর্টালে ম্যানুয়াল কাজ ব্যাপকভাবে কমিয়ে দেয়।

স্ক্রিপ্টিং, পাইপলাইন এবং সর্বোত্তম কর্মপদ্ধতি

WMI এবং CIM ব্যবহার করে উন্নত অটোমেশনের সর্বোচ্চ সুবিধা পেতে হলে, পাওয়ারশেলের পাইপলাইন মডেলে দক্ষতা অর্জন করা অপরিহার্য । অন্যান্য শেলের মতো এখানে সাধারণ টেক্সট পাস করা হয় না, বরং সম্পূর্ণ অবজেক্ট পাস করতে হয়, যা আপনাকে অত্যন্ত নির্ভুলভাবে তথ্য নির্বাচন, সাজানো, পরিমাপ, ফিল্টার, গণনা এবং রূপান্তর করার সুযোগ দেয়।

পাইপলাইন নিয়ে কাজ করতে শেখার জন্য সিলেকশন ও ফিল্টারিং কমান্ডলেটগুলো সঠিকভাবে ব্যবহার করা , জটিল অবজেক্ট গণনা করার পদ্ধতি বোঝা এবং তথ্য না হারিয়ে কমান্ড ও স্ক্রিপ্টের মধ্যে ডেটা আদান-প্রদান করা শিখতে হয়। ভ্যারিয়েবল, অ্যারে এবং হ্যাশ টেবিলের সুসংগঠিত ব্যবহারের মাধ্যমে এই বিষয়টি আরও দৃঢ় হয়, যেগুলো অস্থায়ী ডেটা স্ট্রাকচার হিসেবে কাজ করে এবং যার উপর ভিত্তি করে আরও উন্নত লজিক তৈরি করা যায়।

পরবর্তী ধাপটি হলো স্ক্রিপ্টিং: ফ্লো কন্ট্রোল (if, for, foreach) ব্যবহার করে কমান্ডগুলোকে পুনঃব্যবহারযোগ্য স্ক্রিপ্টে সাজানো, CSV ফাইল বা অন্যান্য ফরম্যাট থেকে ডেটা ইম্পোর্ট করা, ব্যবহারকারীর ইনপুট গ্রহণ, ত্রুটি সামলানো এবং ইভেন্ট লগিং করা। এই সবকিছু আপনাকে বিচ্ছিন্ন কমান্ড থেকে আরও শক্তিশালী ও বিল্ট-ইন টুলের দিকে যেতে সাহায্য করে।

WMI/CIM সহ বৃহৎ পরিসরের অটোমেশন পরিবেশে ট্রাবলশুটিং এবং এরর হ্যান্ডলিং বিশেষভাবে গুরুত্বপূর্ণ, কারণ একটি নেটওয়ার্ক বিভ্রাট, ভুলভাবে কনফিগার করা পারমিশন, বা একটি অনুপস্থিত ক্লাস যদি সঠিকভাবে পরিচালনা করা না হয়, তবে তা একটি প্রসেসকে ভেঙে দিতে পারে। try/catch ব্লক, কনফিগারযোগ্য এরর অ্যাকশন এবং বিস্তারিত লগিং-এর মাধ্যমে আপনি এই পরিস্থিতিগুলো আগে থেকে অনুমান করতে এবং আরও কার্যকরভাবে প্রতিক্রিয়া জানাতে পারেন।

অবশেষে, ফাংশন এবং মডিউল সম্পর্কিত সবকিছু একটি চক্র সম্পূর্ণ করে : আপনি স্ক্রিপ্টগুলোর অখণ্ডতা নিশ্চিত করতে সেগুলোতে স্বাক্ষর করেন, ফাংশনগুলোকে মডিউলে প্যাকেজ করেন, সেই মডিউলগুলো অভ্যন্তরীণ বা পাবলিক রিপোজিটরিতে বিতরণ করেন এবং আপনার প্রতিষ্ঠানের মধ্যে শেয়ার করা টুলের একটি ইকোসিস্টেম তৈরি করেন। এইভাবে, WMI, CIM বা রিমোটিং-এর উপর যেকোনো নতুন উন্নয়ন একটি সুসংহত এবং সহজে রক্ষণাবেক্ষণযোগ্য স্যুটের সাথে সমন্বিত হয়।

যখন আপনি উপরের সবকিছু—WMI/CIM, রিমোট সেশন, স্ক্রিপ্টিং, অ্যাসিঙ্ক্রোনাস জব, DSC, Azure, এবং Microsoft 365—একত্রিত করেন, তখন আপনি এমন একটি পরিবেশ পান যেখানে PowerShell-এর মাধ্যমে উন্নত অটোমেশনই অ্যাডমিনিস্ট্রেশনের মূল ভিত্তি হয়ে ওঠে। সেরা অনুশীলনগুলোর একটি মজবুত ভিত্তি, CimSessions-এর বুদ্ধিদীপ্ত ব্যবহার (WSMan এবং DCOM উভয়ের সাথেই), এবং একটি মডিউলার স্ক্রিপ্ট ডিজাইনের সাহায্যে, আপনি শুধুমাত্র গ্রাফিক্যাল উইজার্ড বা বিচ্ছিন্ন টুলের উপর নির্ভর করার চেয়ে অনেক বেশি দক্ষতার সাথে, ধারাবাহিকভাবে এবং নিরাপদে বিভিন্ন ধরনের ইনফ্রাস্ট্রাকচার পরিচালনা করতে পারেন।

পাওয়ারশেল ডিসি অ্যান্সিবল অটোমেশন
সম্পর্কিত নিবন্ধ:
PowerShell DSC এবং Ansible সহ Windows-এ উন্নত অটোমেশন