এই নিবন্ধে আমরা দেখাব কিভাবে এক্সেল ওয়ার্কশীট থেকে সরাসরি পাওয়ারশেল স্ক্রিপ্ট থেকে ডেটা পড়তে এবং লিখতে হয়। কম্পিউটার, সার্ভার, অবকাঠামো, অ্যাক্টিভ ডিরেক্টরি ইত্যাদিতে ইনভেন্টরি এবং বিভিন্ন রিপোর্ট তৈরি করতে আপনি PowerShell-এর সাথে Excel ব্যবহার করতে পারেন।
আপনি একটি পৃথক COM অবজেক্ট (কম্পোনেন্ট অবজেক্ট মডেল) এর মাধ্যমে PowerShell থেকে এক্সেল শীট অ্যাক্সেস করতে পারেন। এর জন্য কম্পিউটারে এক্সেল ইনস্টল করতে হবে।
এক্সেল সেলে কীভাবে ডেটা অ্যাক্সেস করা যায় তা দেখানোর আগে, এক্সেল ফাইলে উপস্থাপনা স্তরগুলির আর্কিটেকচার বোঝার মূল্য। নিচের চিত্রটি এক্সেল অবজেক্ট মডেলে 4টি নেস্টেড প্রেজেন্টেশন লেয়ার দেখায়:
- অ্যাপ্লিকেশন লেয়ার - চলমান এক্সেল অ্যাপ নিয়ে কাজ করে;
- ওয়ার্কবুক লেয়ার – একাধিক ওয়ার্কবুক (এক্সেল ফাইল) একই সময়ে খোলা হতে পারে;
- ওয়ার্কশীট স্তর – প্রতিটি XLSX ফাইলে একাধিক শীট থাকতে পারে;
- রেঞ্জ লেয়ার – এখানে আপনি নির্দিষ্ট সেল বা সেল পরিসরে ডেটা অ্যাক্সেস করতে পারবেন।
পাওয়ারশেল ব্যবহার করে এক্সেল স্প্রেডশীট থেকে ডেটা কীভাবে পড়তে হয়?
কর্মচারীদের একটি তালিকা সম্বলিত এক্সেল ফাইলে ডেটা অ্যাক্সেস করতে পাওয়ারশেল কীভাবে ব্যবহার করবেন তার একটি সহজ উদাহরণ দেখে নেওয়া যাক।
প্রথমে, COM অবজেক্ট ব্যবহার করে আপনার কম্পিউটারে Excel অ্যাপ (অ্যাপ্লিকেশন লেয়ার) চালান:$ExcelObj = New-Object -comobject Excel.Application
কমান্ডটি চালানোর পরে, পটভূমিতে আপনার কম্পিউটারে এক্সেল চালু হবে। এক্সেল উইন্ডো দেখাতে, দৃশ্যমান পরিবর্তন করুন COM অবজেক্টের বৈশিষ্ট্য:
$ExcelObj.visible=$true
$ExcelObj| fl
তারপর আপনি একটি এক্সেল ফাইল খুলতে পারেন (একটি ওয়ার্কবুক):
$ExcelWorkBook = $ExcelObj.Workbooks.Open("C:\PS\corp_ad_users.xlsx")
প্রতিটি এক্সেল ফাইলে বিভিন্ন ওয়ার্কশীট থাকতে পারে। চলুন বর্তমান এক্সেল ওয়ার্কবুকে ওয়ার্কশীটের তালিকা প্রদর্শন করি:
$ExcelWorkBook.Sheets| fl Name, index
তারপর আপনি আপনার পছন্দসই একটি শীট খুলতে পারেন (এর নাম বা সূচক দ্বারা):
$ExcelWorkSheet = $ExcelWorkBook.Sheets.Item("CORP_users")
আপনি এই কমান্ডটি ব্যবহার করে বর্তমান (সক্রিয়) এক্সেল ওয়ার্কশীটের নাম পেতে পারেন:
$ExcelWorkBook.ActiveSheet | fl Name, Index
তারপর আপনি এক্সেল ওয়ার্কশীটের সেল থেকে মান পেতে পারেন। বর্তমান এক্সেল ওয়ার্কশীটে সেলের মান পেতে আপনি বিভিন্ন পদ্ধতি ব্যবহার করতে পারেন:একটি পরিসর, একটি ঘর, একটি কলাম বা একটি সারি ব্যবহার করে। নীচে একই ঘর থেকে ডেটা কীভাবে পেতে হয় তার উদাহরণগুলি দেখুন:
$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 ব্যবহার করে এক্সেল স্প্রেডশীটে সক্রিয় ডিরেক্টরি ব্যবহারকারীর তথ্য রপ্তানি করা হচ্ছে
কিভাবে PowerShell থেকে এক্সেল ডেটা অ্যাক্সেস করতে হয় তার একটি বাস্তব উদাহরণ দেখা যাক। ধরুন, আমরা একটি এক্সেল ফাইলে প্রতিটি ব্যবহারকারীর জন্য অ্যাক্টিভ ডিরেক্টরি থেকে কিছু তথ্য পেতে চাই। উদাহরণস্বরূপ, তাদের ফোন নম্বর (টেলিফোন নম্বর বৈশিষ্ট্য), বিভাগ এবং ই-মেইল ঠিকানা।
AD ব্যবহারকারীর বৈশিষ্ট্য সম্পর্কে তথ্য পেতে, আমরা PowerShell অ্যাক্টিভ ডিরেক্টরি মডিউল থেকে 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)
ফলস্বরূপ, এক্সেল ফাইলে প্রতিটি ব্যবহারকারীর জন্য AD তথ্য সম্বলিত কলাম যোগ করা হয়েছে।
পাওয়ারশেল এবং এক্সেল ব্যবহার করে একটি প্রতিবেদন তৈরির আরেকটি উদাহরণ বিবেচনা করা যাক। ধরুন, আপনি সমস্ত ডোমেন সার্ভারে প্রিন্ট স্পুলার পরিষেবার অবস্থা সম্পর্কে একটি এক্সেল রিপোর্ট করতে চান৷
অ্যাক্টিভ ডিরেক্টরিতে সার্ভারের একটি তালিকা পেতে আপনি Get-ADComputer cmdlet ব্যবহার করতে পারেন এবং সার্ভারে একটি পরিষেবার অবস্থা দূরবর্তীভাবে চেক করতে 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 ব্যবহার করতে পারেন। উদাহরণস্বরূপ, আপনি এক্সেল থেকে AD ডেটা আপডেট করার জন্য সহজ সক্রিয় ডিরেক্টরি প্রতিবেদন তৈরি করতে বা পাওয়ারশেল স্ক্রিপ্ট তৈরি করতে পারেন৷
উদাহরণস্বরূপ, আপনি আপনার এইচআর বিভাগের একজন কর্মচারীকে এক্সেলে ব্যবহারকারী রেজিস্টার রাখতে বলতে পারেন। তারপর একটি PowerShell স্ক্রিপ্ট এবংSet-ADUser
ব্যবহার করে cmdlet, কর্মচারী স্বয়ংক্রিয়ভাবে AD তে ব্যবহারকারীর তথ্য আপডেট করতে পারে (শুধুমাত্র কর্মচারীকে AD ব্যবহারকারীর বৈশিষ্ট্যগুলি পরিবর্তন করার অনুমতি দিন এবং পাওয়ারশেল স্ক্রিপ্ট কীভাবে চালাতে হয় তা দেখান)। এইভাবে আপনি প্রাসঙ্গিক ফোন নম্বর, চাকরির শিরোনাম এবং বিভাগ সহ একটি আপ-টু-ডেট ঠিকানা বই রাখতে পারেন।