🗒️
複数のvCenterのリソース状況を取得するスクリプト
はじめに
複数のvCenterを運用していて、リソースの状況(CPU、メモリ、DISK)を取得するPowerCLIスクリプトを作ってみましたので記事にしました。
概要
- 各vCenter上のVMホストごとのCPU/メモリの、使用量/空き/総量を取得してCSV出力します
- 各vCenter上のDatastoreごとの、使用量/空き/総容量を取得してCSV出力します
やってみた
環境
以前紹介した、VMwareハンズオンラボ環境で行います。
スクリプト・ファイル
ファイル構成は以下とします。10_run_get_resources.bat
をダブルクリックするだけで実行するようにしています。
─(適当なフォルダ)
│ get_resources.ps1
│ 10_run_get_resources.bat
└─conf/
vcenter_info.csv
各ファイルは以下です。
get_resources.ps1
get_resources.ps1
param (
[Parameter(Mandatory = $true)]
[string]$csvPath
)
# Initialize an array to store resource information
$resourcesInfo = @()
$disksInfo = @()
$vcInfo = Import-Csv -Path $csvPath
# Loop through each entry in the CSV file
foreach ($vc in $vcInfo) {
# Connect to vCenter
Write-Output "Connecting to vCenter $($vc.hostname)..."
Connect-VIServer -Server $vc.hostname -User $vc.username -Password $vc.password
# Get resource allocation and total amounts for CPU, Memory
$vmHosts = Get-VMHost
foreach ($vmHost in $vmHosts) {
$cpuUsageMhz = $vmHost.CpuUsageMhz
$cpuTotalMhz = $vmHost.CpuTotalMhz
$cpuFreeMhz = $cpuTotalMhz - $cpuUsageMhz
$memoryUsageBytes = $vmHost.MemoryUsageGB
$memoryTotalBytes = $vmHost.MemoryTotalGB
$memoryFreeBytes = $memoryTotalBytes - $memoryUsageBytes
# Store the information in the array
$resourcesInfo += [PSCustomObject]@{
VC_Hostname = $vc.hostname
VM_Hostname = $vmHost.Name
CPU_Usage_MHz = $cpuUsageMhz
CPU_Free_MHz = $cpuFreeMhz
CPU_Total_MHz = $cpuTotalMhz
Memory_Usage_GB = $memoryUsageBytes
Memory_Free_GB = $memoryFreeBytes
Memory_Total_GB = $memoryTotalBytes
}
}
# Get resource allocation and total amounts for Disk
$dataStore = Get-Datastore
foreach ($eachStore in $dataStore) {
$diskCapacityBytes = $eachStore.CapacityGB
$diskFreeBytes = $eachStore.FreeSpaceGB
$diskUsageBytes = $diskCapacityBytes - $diskFreeBytes
# Store the information in the array
$disksInfo += [PSCustomObject]@{
VC_Hostname = $vc.hostname
Datastore_Name = $eachStore.Name
Disk_Usage_GB = $diskUsageBytes
Disk_Free_GB = $diskFreeBytes
Disk_Capacity_GB = $diskCapacityBytes
}
}
# Disconnect from vCenter
Disconnect-VIServer -Server $vc.hostname -Confirm:$false
Write-Output "Disconnected to vCenter $($vc.hostname)"
}
# Export the resource information to a CSV file
$resourcesInfo | Export-Csv -Path "resource_info.csv" -NoTypeInformation
$disksInfo | Export-Csv -Path "disk_info.csv" -NoTypeInformation
Write-Output "Resource information has been exported to resource_info.csv and disk_info.csv"
10_run_get_resources.bat
10_run_get_resources.bat
@echo off
powershell.exe -File "get_resources.ps1" -csvPath "conf\vcenter_info.csv"
pause
vcenter_info.csv
conf/vcenter_info.csv
hostname,username,password,remarks
vcsa-01a.corp.vmbeans.com,administrator@vsphere.local,VMware1!,Primary vCenter
実行すると、同じフォルダにresource_info.csv
とdisk_info.csv
が作成され、それぞれに取得したリソースの状況が出力されます。
おわりに
今回もラボ環境を使い、リソース状況を取得するスクリプトを作ってみました。
前回と同様、ChatGPTにプロンプト文を投げて作ろうとしたのですが、今回はあまり出来が良くありませんでした。そのため生成に用いたプロンプト文は記載しておりません。
この記事がどなたかのお役に立てれば幸いです。
Discussion