仮想マシンのディスク容量をチェックする

はじめに

指定した仮想マシンのディスク容量をチェックするスクリプトです。PowerCLIを使用してvCenterサーバに接続して仮想マシンのディスク使用率を調べます。

環境

OS:Windows10
.Net Framework:4.7
PowerShellのバージョン:5.1.17763.1007

ソースコード

DiskCapacityCheck.ps1

#######################################################################################
# 概要:仮想マシンのディスク容量をチェックします。
# 作成者:ITStudy
# 作成日:2020/07/07
# 必要なファイル:DiskCapacityCheck.ps1(このファイルです)
#                 ServersList.csv(対象サーバを記載したファイルです)
#                 SecurePassword.txt(暗号化したパスワードファイルです)
#######################################################################################

$CurrentDir      = $PSScriptRoot
$vCenterServer   = "xxx.xxx.xxx.xxx" #ホスト名 or IP
$ServersList     = "ServersList.csv"
$SecurePassword  = "SecurePassword.txt"
$Report          = "Report-$(Get-Date -f yyyyMMdd).csv"
$UserName        = "administrator@vsphere.local" #環境に合わせて変更
$Pass            = Get-Content (Join-Path $CurrentDir $SecurePassword) | ConvertTo-SecureString
$Cred            = New-Object System.management.Automation.PsCredential($UserName, $Pass)
$Result          = @()
$ErrorActionPreference = "SilentlyContinue"

try{
    #vCenterサーバに接続
    #Connect-VIServer -Server $vCenterServer -Credential $Cred -Force

    Import-Csv (Join-Path $CurrentDir $ServersList) -Encoding Default | %{

        #エラー配列を初期化
        $error.Clear()
        #ホスト名の取得(HostName)
        $hn = $_.HostName
    
        #仮想マシンの起動
        $VMDisks = Get-VMGuest $hn | select Disks
        $VMDisks.Disks | % {
            $Drive = $_.Path
            $Capacity = $_.CapacityGB.ToString("0.0")
            $FreeSpace = $_.FreeSpaceGB.ToString("0.0")
            $Usage = (100 - ([float]$FreeSpace / [float]$Capacity) * 100).ToString("0.0")
            $Result += [pscustomobject]@{"HostName"=$hn; "Drive"=$Drive; "Capacity(GB)"=$Capacity; "FreeSpace(GB)"=$FreeSpace; "Usage(%)"=$Usage; "Start Execution Time"=(Get-Date).ToString("yyyy/MM/dd HH:mm:ss"); "ErrorMessage"=$error[0]}
        }
        #進行状態を表示   
        Write-Host($hn + "を処理中です。")

        #待ち時間(1秒)
        #Start-Sleep -s 1
    }

    #結果表示
    $Result | Format-Table -AutoSize -Wrap
    #レポート出力
    $Result | Export-Csv -NoTypeInformation (Join-Path $CurrentDir $Report) -Encoding Default

}Catch{
    $Error
}finally{
    #vCenterサーバの切断
    #Disconnect-VIServer -Server $vCenterServer -Confirm:$false
}

ServersList.csv

対象サーバのホスト名、もしくはIPアドレスを入力します。ヘッダーの「HostName」は削除しないで下さい。

HostName
ewindows2003
ewindows2008
ewindows2012
ewindows2016
ewindows2019

SecurePassword.txt

vCenterサーバのパスワードが保存されています。このファイルは事前に作成しておいて下さい。作成方法は「パスワードの暗号化・復号化」の「Get-Credentialを使ったやり方」を参照して下さい。

01000000d08c9ddf0115d1118c7a00c04fc297eb01000000b9f7ced8a7594b4d86b54083ef26ffa1000000000200000000001066000000010000200000002c726ca0a81e32eeaa8ba7bee3e5fe6e49df20c8c40e758fe94d96a7714adbb8000000000e80000000020000200000009e9778236aa96823e5e60335e9e56f21b22e6774eefc750f2536d65f25376707200000003343ef6d2684271d8910655b1737b18f0bcb937ee5eda370ddbbe27d357fc1dd40000000262c6f8706f77644e9fe894e13c0ca2d79986567d21955faf292d561b0d6422c282b5aa05f8409fa00887556af4bb6e0c076c86d9a930f545189de9027a7ff0c

結果

Report-YYYYMMDD.csv

仮想マシンのディスク容量をチェックした結果が表示されます。

HostName     Drive Capacity(GB) FreeSpace(GB) Usage(%) Start Execution Time ErrorMessage
--------     ----- ------------ ------------- -------- -------------------- ------------
ewindows2003 C:\   8.0          3.3           58.8     2020/07/07 16:05:43              
ewindows2008 C:\   39.9         17.8          55.4     2020/07/07 16:05:43              
ewindows2012 C:\   39.7         25.5          35.8     2020/07/07 16:05:43              
ewindows2016 C:\   39.4         24.9          36.8     2020/07/07 16:05:43              
ewindows2016 D:\   5.0          3.9           22.0     2020/07/07 16:05:43              
ewindows2019 C:\   39.4         28.1          28.7     2020/07/07 16:05:43             

もし何かしらのエラーが発生した場合は、「ErrorMessage」に内容が表示されます。必要なファイルがない、vCenterサーバにアクセスできない、サーバの認証が通らない、 暗号化パスワードを復号化できないなどを想定してテストしています。

タイトルとURLをコピーしました