Report Datastore with Powershell

หลังจากที่เราได้ทำ Report VM กันไปแล้ว ก็มาถึงคราวการทำ Report Datastore ว่ามีการใช้งานไปเท่าไหร่ เหลือพื้นที่เท่าไหร่ และบอกรายละเอียดว่าในแต่ละ Datastore ประกอบไปด้วย VM / Template เท่าไหร่, มี VM PowerOn และ VM PowerOff เท่าไหร่


Design Report

สิ่งที่เราต้องการก็คือ รายงาน Capacity และ Used Space ของ Datastore ทั้งหมด ซึ่งจะบอกถึงรายละเอียดตั้งแต่ Name, Capacity, UsedSpace, VM Space Used, VM Space Provisioned นอกจากนี้ยังบอกถึง VM ที่อยู่ใน Datastore นั้น ได้แก่ VM All, VM PowerOn, VM PowerOff

ความแตกต่างระหว่าง VM Space Used และ VM Space Provisioned คือ Provision เป็นการจองพื้นที่บน Datastore ว่าจะเป็น ( Thin or Thick ) ของ VM ส่วน UsedSpace เป็นการใช้งานจริง ๆ ของ VM

Directory Structure

เราจะใช้ Directory Structure เดิมที่เคยสร้างไว้ โดยจะประกอบไปด้วยโครงสร้างดังนี้

C:\powershell-script
├───Credential/
│   └───vcsa.lab.local.clixml
├───VM-Report/
│   └───Datastore/
└───VM-Script/
    ├───Configuration.ps1
    └───Report-Datastore.ps1

Get Started

  • ทำการเพิ่ม Global Variable ขึ้นในไฟล์ Configuration.ps1
# VM-Report
$Global:report_datastore = $root + 'VM-Report\Datastore\Report-Datastore-' + $date + '.csv'

# PowerBI
$Global:powerbi_datastore = $root + 'PowerBI\Dataset\Dataset-Datastore.csv'
  • ทำการสร้างไฟล์ Report-Datastore.ps1
. "$PSScriptRoot\Configuration.ps1"
Connect-VIServer -Server $server -Credential $credential

$report = $report_datastore
$powrebi = $powerbi_datastore

$query = Get-Datastore | Where {$_.type -eq "VMFS"} | Select Name,  
    	@{N="CanonicalName"; E={($_.ExtensionData.Info.Vmfs.Extent[0]).DiskName}},
	@{N="DisplayName"; E={(Get-ScsiLun -CanonicalName ($_.ExtensionData.Info.Vmfs.Extent[0]).DiskName -VMHost (Get-VIObjectByVIView $_.ExtensionData.Host[0].Key)).ExtensionData.DisplayName}},
	Id, CapacityGB,
	@{N='Datastore Used Space GB'; E={[math]::Round($_.CapacityGB - $_.FreeSpaceGB)}},
  	@{N='VM Space Used GB'; E={ [math]::Round((($_ | Get-VM | Select -Expand UsedSpaceGB | measure -Sum).Sum) + 
   	((($_ | Get-Template).ExtensionData.Summary.Storage.Committed | measure -Sum).Sum) / 1GB) } },
  	@{N='VM Space Provisioned GB'; E={ [math]::Round((($_ | Get-VM | Select -Expand ProvisionedSpaceGB | measure -Sum).Sum) +
	((($_ | Get-Template).ExtensionData.Summary.Storage.Uncommitted | measure -Sum).Sum) / 1GB) } },
	@{N="VM / All"; E={@($_ | Get-VM).Count}},
	@{N="VM / ON"; E={@($_ | Get-VM | Where-Object {$_.PowerState -eq "PoweredOn"}).Count}},
	@{N="VM / OFF"; E={@($_ | Get-VM | Where-Object {$_.PowerState -eq "PoweredOff"}).Count}},
	@{N="VM / Backup"; E={@($_ | Get-VM | Where-Object {$_.Name -like "Backup*"}).Count}},
	@{N="Month"; E={$month}},
	@{N="Year"; E={$year}} |
Where-Object {$_.DisplayName -notlike 'Local*'} | Sort Name

$query | Export-Csv -Path $report -NoTypeInformation
$query | Export-Csv -Path $powrebi -Append -NoTypeInformation

Disconnect-VIServer -Server $server -Confirm:$false

อ่านเพิ่มเติม : https://bit.ly/2TC5Isg

Leave a Reply

Your email address will not be published. Required fields are marked *