Computer >> คอมพิวเตอร์ >  >> ซอฟต์แวร์ >> Office

อ่านและเขียนข้อมูลไปยังไฟล์ Excel ด้วย PowerShell

ในบทความนี้ เราจะแสดงวิธีการอ่านและเขียนข้อมูลจากเวิร์กชีต Excel โดยตรงจากสคริปต์ PowerShell คุณสามารถใช้ Excel ร่วมกับ PowerShell เพื่อทำรายการและสร้างรายงานต่างๆ บนคอมพิวเตอร์ เซิร์ฟเวอร์ โครงสร้างพื้นฐาน Active Directory ฯลฯ

คุณสามารถเข้าถึงชีต Excel จาก PowerShell ผ่านออบเจ็กต์ COM แยกต่างหาก (โมเดลออบเจ็กต์คอมโพเนนต์) สิ่งนี้จำเป็นต้องติดตั้ง Excel บนคอมพิวเตอร์

ก่อนที่จะแสดงวิธีเข้าถึงข้อมูลในเซลล์ Excel คุณควรทำความเข้าใจสถาปัตยกรรมของเลเยอร์การนำเสนอในไฟล์ Excel เสียก่อน รูปด้านล่างแสดงเลเยอร์การนำเสนอที่ซ้อนกัน 4 ชั้นในโมเดลวัตถุ Excel:

  • ชั้นแอปพลิเคชัน – เกี่ยวข้องกับแอป Excel ที่ทำงานอยู่
  • เลเยอร์สมุดงาน – สมุดงานหลายเล่ม (ไฟล์ Excel) อาจเปิดพร้อมกันได้
  • เลเยอร์เวิร์กชีต – ไฟล์ XLSX แต่ละไฟล์สามารถมีได้หลายแผ่น
  • เลเยอร์ช่วง – คุณสามารถเข้าถึงข้อมูลในเซลล์หรือช่วงเซลล์ที่ต้องการได้ที่นี่

อ่านและเขียนข้อมูลไปยังไฟล์ Excel ด้วย PowerShell

จะอ่านข้อมูลจากสเปรดชีต Excel โดยใช้ PowerShell ได้อย่างไร

มาดูตัวอย่างง่ายๆ เกี่ยวกับวิธีใช้ PowerShell เพื่อเข้าถึงข้อมูลในไฟล์ Excel ที่มีรายชื่อพนักงาน

อ่านและเขียนข้อมูลไปยังไฟล์ Excel ด้วย PowerShell

ขั้นแรก ให้เรียกใช้แอป Excel (เลเยอร์แอปพลิเคชัน) บนคอมพิวเตอร์ของคุณโดยใช้วัตถุ COM:
$ExcelObj = New-Object -comobject Excel.Application

หลังจากรันคำสั่งแล้ว Excel จะเปิดขึ้นบนคอมพิวเตอร์ของคุณในเบื้องหลัง เมื่อต้องการแสดงหน้าต่าง Excel ให้เปลี่ยน มองเห็น คุณสมบัติของวัตถุ COM:

$ExcelObj.visible=$true

คุณสามารถแสดงคุณสมบัติของวัตถุ Excel ทั้งหมดได้ดังนี้:

$ExcelObj| fl

จากนั้นคุณสามารถเปิดไฟล์ Excel (สมุดงาน):

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

ไฟล์ Excel แต่ละไฟล์สามารถมีแผ่นงานได้หลายแผ่น มาแสดงรายการเวิร์กชีตในเวิร์กบุ๊ก Excel ปัจจุบันกันเถอะ:

$ExcelWorkBook.Sheets| fl Name, index

อ่านและเขียนข้อมูลไปยังไฟล์ Excel ด้วย PowerShell

จากนั้นคุณสามารถเปิดแผ่นงานที่คุณต้องการ (ตามชื่อหรือดัชนี):

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

คุณสามารถรับชื่อแผ่นงาน Excel ปัจจุบัน (ใช้งานอยู่) ได้โดยใช้คำสั่งนี้:

$ExcelWorkBook.ActiveSheet | fl Name, Index

อ่านและเขียนข้อมูลไปยังไฟล์ Excel ด้วย PowerShell

จากนั้น คุณจะได้รับค่าจากเซลล์ในเวิร์กชีต 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

อ่านและเขียนข้อมูลไปยังไฟล์ Excel ด้วย PowerShell

การส่งออกข้อมูลผู้ใช้ Active Directory ไปยังสเปรดชีต Excel โดยใช้ PowerShell

มาดูตัวอย่างการใช้งานจริงในการเข้าถึงข้อมูล Excel จาก PowerShell สมมติว่าเราต้องการรับข้อมูลบางส่วนจาก Active Directory สำหรับผู้ใช้แต่ละรายในไฟล์ Excel ตัวอย่างเช่น หมายเลขโทรศัพท์ (แอตทริบิวต์ phoneNumber) แผนก และที่อยู่อีเมล

ในการรับข้อมูลเกี่ยวกับแอตทริบิวต์ผู้ใช้ AD เราจะใช้ Get-ADUser cmdlet จากโมดูล PowerShell Active Directory

# 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 สำหรับผู้ใช้แต่ละรายในไฟล์ Excel

อ่านและเขียนข้อมูลไปยังไฟล์ Excel ด้วย PowerShell

ลองพิจารณาอีกตัวอย่างหนึ่งของการสร้างรายงานโดยใช้ PowerShell และ Excel สมมติว่าคุณต้องการสร้างรายงาน 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 ที่มีประโยชน์หรือสร้างสคริปต์ PowerShell เพื่ออัปเดตข้อมูล AD จาก Excel

ตัวอย่างเช่น คุณสามารถขอให้พนักงานของแผนกทรัพยากรบุคคลของคุณเก็บผู้ใช้ที่ลงทะเบียนไว้ใน Excel จากนั้นใช้สคริปต์ PowerShell และ Set-ADUser cmdlet พนักงานสามารถอัปเดตข้อมูลผู้ใช้ใน AD ได้โดยอัตโนมัติ (เพียงมอบสิทธิ์ให้พนักงานเปลี่ยนแอตทริบิวต์ผู้ใช้ AD และแสดงวิธีเรียกใช้สคริปต์ PowerShell) ดังนั้น คุณจึงสามารถเก็บสมุดที่อยู่ที่เป็นปัจจุบันพร้อมหมายเลขโทรศัพท์ ตำแหน่งงาน และแผนกที่เกี่ยวข้อง