仮想マシンをシャットダウンする

スポンサーリンク

はじめに

指定した仮想マシンをシャットダウンするスクリプトです。PowerCLIを使用してvCenterサーバに接続して仮想マシンをシャットダウンします。

環境

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

ソースコード

VMShutdown.ps1

#######################################################################################
# 概要:仮想マシンをシャットダウンします。
# 作成者:ITStudy
# 作成日:2020/06/18
# 必要なファイル:VMShutdown.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
    
        #仮想マシンのシャットダウン
        $VMState = Get-VM $hn | Shutdown-VMGuest -Confirm:$false
        $Result += [pscustomobject]@{"HostName"=$hn; "Shutdown Execution Time"=(Get-Date).ToString("yyyy/MM/dd HH:mm:ss"); "ErrorMessage"=$error[0]}

        #進行状態を表示   
        Write-Host($hn + "を処理中です。")

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

    #結果表示
    $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

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

01000000d08c9ddf0115d1118c7a00c04fc297eb01000000b9f7ced8a7594b4d86b54083ef26ffa1000000000200000000001066000000010000200000002c726ca0a81e32eeaa8ba7bee3e5fe6e49df20c8c40e758fe94d96a7714adbb8000000000e80000000020000200000009e9778236aa96823e5e60335e9e56f21b22e6774eefc750f2536d65f25376707200000003343ef6d2684271d8910655b1737b18f0bcb937ee5eda370ddbbe27d357fc1dd40000000262c6f8706f77644e9fe894e13c0ca2d79986567d21955faf292d561b0d6422c282b5aa05f8409fa00887556af4bb6e0c076c86d9a930f545189de9027a7ff0c

結果

Report-YYYYMMDD.csv

仮想マシンをシャットダウンした結果が表示されます。

HostName     Shutdown DateTime   ErrorMessage
--------     -----------------   ------------
ewindows2003 2020/06/18 13:28:37
ewindows2008 2020/06/18 13:28:42
ewindows2012 2020/06/18 13:28:48
ewindows2016 2020/06/18 13:28:53
ewindows2019 2020/06/18 13:28:59

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