কম্পিউটার টিউটোরিয়াল

PowerShell দিয়ে Excel ফাইলে ডেটা পড়া ও লেখা

এই আর্টিকেলে আমরা দেখাব কীভাবে PowerShell স্ক্রিপ্ট সরাসরি Excel ওয়ার্কশীট থেকে ডেটা পড়া ও লেখা যায়। আপনি Excel কে PowerShell-সহ ব্যবহার করে কম্পিউটার, সার্ভার, ইনফ্রাস্ট্রাকচার, Active Directory, ইত্যাদির ইনভেন্টরি ও berbagai রিপোর্ট জেনারেট করতে পারেন।

আপনি Excel শীটগুলোকে PowerShell-এ একটি আলাদা COM অবজেক্ট (Component Object Model) দিয়ে অ্যাক্সেস করতে পারেন। এর জন্য কম্পিউটারে Excel ইনস্টল করা থাকতে হবে।

Excel সেলে ডেটা অ্যাক্সেস করার পদ্ধতি দেখানোর আগে, Excel ফাইলে প্রেজেন্টেশন লেয়ারের আর্কিটেকচার বুঝতে হবে। নিচের চিত্রটি Excel অবজেক্ট মডেলের ৪টি নেস্টেড প্রেজেন্টেশন লেয়ার দেখাচ্ছে:

  • Application Layer – চলমান Excel অ্যাপ্লিকেশন নিয়ে কাজ করে;
  • WorkBook Layer – একসাথে একাধিক ওয়ার্কবুক (Excel ফাইল) খোলা থাকতে পারে;
  • WorkSheet Layer – প্রতিটি XLSX ফাইলে একাধিক শীট থাকতে পারে;
  • Range Layer – এখানে আপনি নির্দিষ্ট সেল বা সেল রেঞ্জের ডেটা অ্যাক্সেস করতে পারেন।

PowerShell দিয়ে Excel ফাইলে ডেটা পড়া ও লেখা

PowerShell ব্যবহার করে Excel স্প্রেডশীট থেকে ডেটা পড়া

চলুন একটি সহজ উদাহরণ দেখি কীভাবে PowerShell ব্যবহার করে একটি কর্মচারীদের লিস্ট ধারণকারী Excel ফাইলের ডেটা অ্যাক্সেস করা যায়।

PowerShell দিয়ে Excel ফাইলে ডেটা পড়া ও লেখা

প্রথমে, COM অবজেক্ট ব্যবহার করে আপনার কম্পিউটারে Excel অ্যাপ (Application Layer) চালু করুন:
$ExcelObj = New-Object -comobject Excel.Application

কমান্ড চালানোর পর, Excel আপনার কম্পিউটারে ব্যাকগ্রাউন্ডে লঞ্চ হবে। Excel উইন্ডো দেখাতে, COM অবজেক্টের Visible প্রপার্টি পরিবর্তন করুন:

$ExcelObj.visible=$true

আপনি সব Excel অবজেক্ট প্রপার্টি এইভাবে দেখতে পারেন:

$ExcelObj| fl

তারপর একটি Excel ফাইল (একটি ওয়ার্কবুক) খুলুন:

$ExcelWorkBook = $ExcelObj.Workbooks.Open("C:\PS\corp_ad_users.xlsx")

প্রতিটি Excel ফাইলে একাধিক ওয়ার্কশীট থাকতে পারে। চলুন বর্তমান Excel ওয়ার্কবুকের ওয়ার্কশীটের লিস্ট দেখি:

$ExcelWorkBook.Sheets| fl Name, index

PowerShell দিয়ে Excel ফাইলে ডেটা পড়া ও লেখা

তারপর আপনি যা চান সেই শীট খুলুন (তার নাম বা ইনডেক্স দিয়ে):

$ExcelWorkSheet = $ExcelWorkBook.Sheets.Item("CORP_users")

ব وحده ম কারেন্ট (এ্যাক্টিভ) Excel ওয়ার্কশীটের নাম এই কমান্ড দিয়ে পেতে পারেন:

$ExcelWorkBook.ActiveSheet | fl Name, Index

PowerShell দিয়ে Excel ফাইলে ডেটা পড়া ও লেখা

তারপর আপনি Excel ওয়ার্কশীটের সেল থেকে মান পেতে পারেন। আপনি বর্তমান Excel ওয়ার্কশীটে সেল মান পেতে বিভিন্ন মেথড ব্যবহার করতে পারেন: রেঞ্জ, সেল, কলাম বা রো ব্যবহার করে। নিচে একই সেল থেকে ডেটা পাওয়ার উদাহরণগুলো দেওয়া হলো:

$ExcelWorkSheet.Range("B4").Text
$ExcelWorkSheet.Range("B4:B4").Text
$ExcelWorkSheet.Range("B4","B4").Text
$ExcelWorkSheet.cells.Item(4, 2).text
$ExcelWorkSheet.cells.Item(4, 2).value2
$ExcelWorkSheet.Columns.Item(2).Rows.Item(4).Text
$ExcelWorkSheet.Rows.Item(4).Columns.Item(2).Text

PowerShell দিয়ে Excel ফাইলে ডেটা পড়া ও লেখা

PowerShell ব্যবহার করে Active Directory ইউজার ইনফো Excel স্প্রেডশীটে এক্সপোর্ট করা

চলুন PowerShell থেকে Excel ডেটা অ্যাক্সেসের একটি প্রায়োগিক উদাহরণ দেখি। ধরুন, আমরা একটি Excel ফাইলের প্রতিটি ব্যবহারকারীর জন্য Active Directory থেকে কিছু তথ্য পেতে চাই। উদাহরণস্বরূপ, তাদের ফোন নম্বর (telephoneNumber অ্যাট্রিবিউট), ডিপার্টমেন্ট এবং ইমেইল অ্যাড্রেস।

AD ইউজার অ্যাট্রিবিউট সম্পর্কে তথ্য পেতে, আমরা PowerShell Active Directory মডিউল থেকে Get-ADUser cmdlet ব্যবহার করব।

# Importing Active Directory module into PowerShell session
import-module activedirectory
# Open an Excel workbook first:
$ExcelObj = New-Object -comobject Excel.Application
$ExcelWorkBook = $ExcelObj.Workbooks.Open("C:\PS\corp_ad_users.xlsx")
$ExcelWorkSheet = $ExcelWorkBook.Sheets.Item("CORP_Users")
# Get the number of filled in rows in the XLSX worksheet
$rowcount=$ExcelWorkSheet.UsedRange.Rows.Count
# Loop through all rows in Column 1 starting from Row 2 (these cells contain the domain usernames)
for($i=2;$i -le $rowcount;$i++){
$ADusername=$ExcelWorkSheet.Columns.Item(1).Rows.Item($i).Text
# Get the values of user attributes in AD
$ADuserProp = Get-ADUser $ADusername -properties telephoneNumber,department,mail|select-object name,telephoneNumber,department,mail
# Fill in the cells with the data received from AD
$ExcelWorkSheet.Columns.Item(4).Rows.Item($i) = $ADuserProp.telephoneNumber
$ExcelWorkSheet.Columns.Item(5).Rows.Item($i) = $ADuserProp.department
$ExcelWorkSheet.Columns.Item(6).Rows.Item($i) = $ADuserProp.mail
}
# Save the XLS file and close Excel
$ExcelWorkBook.Save()
$ExcelWorkBook.close($true)

ফলস্বরূপ, Excel ফাইলে প্রতিটি ব্যবহারকারীর জন্য AD ইনফো ধারণকারী কলামগুলো যোগ হয়েছে।

PowerShell দিয়ে Excel ফাইলে ডেটা পড়া ও লেখা

PowerShell এবং Excel ব্যবহার করে রিপোর্ট তৈরির আরেক উদাহরণ দেখি। ধরুন, আপনি সকল ডোমেন সার্ভারে Print Spooler সার্ভিসের স্টেট নিয়ে একটি Excel রিপোর্ট তৈরি করতে চান।

আপনি Get-ADComputer cmdlet ব্যবহার করে Active Directory-এ সার্ভারের লিস্ট পেতে পারেন, এবং WinRM Invoke-Command cmdlet ব্যবহার করে সার্ভারগুলোতে রিমোটলি সার্ভিসের স্ট্যাটাস চেক করতে পারেন।

# Create an Excel object
$ExcelObj = New-Object -comobject Excel.Application
$ExcelObj.Visible = $true
# Add a workbook
$ExcelWorkBook = $ExcelObj.Workbooks.Add()
$ExcelWorkSheet = $ExcelWorkBook.Worksheets.Item(1)
# Rename a worksheet
$ExcelWorkSheet.Name = 'Spooler Service Status'
# Fill in the head of the table
$ExcelWorkSheet.Cells.Item(1,1) = 'Server Name'
$ExcelWorkSheet.Cells.Item(1,2) = 'Service Name'
$ExcelWorkSheet.Cells.Item(1,3) = 'Service Status'
# Make the table head bold, set the font size and the column width
$ExcelWorkSheet.Rows.Item(1).Font.Bold = $true
$ExcelWorkSheet.Rows.Item(1).Font.size=15
$ExcelWorkSheet.Columns.Item(1).ColumnWidth=28
$ExcelWorkSheet.Columns.Item(2).ColumnWidth=28
$ExcelWorkSheet.Columns.Item(3).ColumnWidth=28
# Get the list of all Windows Servers in the domain
$computers = (Get-ADComputer -Filter 'operatingsystem -like "*Windows server*" -and enabled -eq "true"').Name
$counter=2
# Connect to each computer and get the service status
foreach ($computer in $computers) {
$result = Invoke-Command -Computername $computer –ScriptBlock { Get-Service spooler | select Name, status }
# Fill in Excel cells with the data obtained from the server
$ExcelWorkSheet.Columns.Item(1).Rows.Item($counter) = $result.PSComputerName
$ExcelWorkSheet.Columns.Item(2).Rows.Item($counter) = $result.Name
$ExcelWorkSheet.Columns.Item(3).Rows.Item($counter) = $result.Status
$counter++
}
# Save the report and close Excel:
$ExcelWorkBook.SaveAs('C:\ps\Server_report.xlsx')
$ExcelWorkBook.close($true)

আপনি PowerShell দিয়ে Excel অ্যাক্সেস করতে পারেন বিভিন্ন পরিস্থিতিতে। উদাহরণস্বরূপ, আপনি সহজ Active Directory রিপোর্ট তৈরি করতে পারেন বা Excel থেকে AD ডেটা আপডেট করার PowerShell স্ক্রিপ্ট তৈরি করতে পারেন।

উদাহরণস্বরূপ, আপনি আপনার HR ডিপার্টমেন্টের একজন কর্মচারীরকে ইউজার রেজিস্টার Excel-এ মেইনটেইন করার জন্য বলতে পারেন। তারপর একটি PowerShell স্ক্রিপ্ট এবং Set-ADUser cmdlet ব্যবহার করে, সে কর্মচারী স্বয়ংক্রিয়ভাবে AD-এ ইউজার ইনফো আপডেট করতে পারবে (শুধু কর্মচারীরে AD ইউজার অ্যাট্রিবিউট পরিবর্তনের পারমিশন ডেলিগেট করুন এবং কীভাবে PowerShell স্ক্রিপ্ট চালাতে হয় তা দেখিয়ে দিন)। এভাব আপনি প্রাসঙ্গিক ফোন নম্বর, জব টাইটেল এবং ডিপার্টমেন্ট সহ একটি আপ-টু-ডেট অ্যাড্রেস বুক রক্ষা করতে পারেন।


  1. এক্সেল ডেটা এক্সপোর্ট করা সহজ: ২ প্রমাণিত পদ্ধতি

  2. দ্রুত CSV ফাইল এক্সেলে ইমপোর্ট: ৪টি প্রমাণিত টেকনিক

  3. এক্সেল ডেটা XML-এ এক্সপোর্ট: একটি সহজ ধাপে ধাপে গাইড

  4. এক্সেলে CSV ফরম্যাটিংে পারদর্শিতা: ২টি ধাপে ধাপে উদাহরণ