仮想マシンを再起動する

スポンサーリンク

はじめに

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

環境

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

ソースコード

VMRestart.ps1

#######################################################################################
# 概要:仮想マシンを再起動します。
# 作成者:ITStudy
# 作成日:2020/06/18
# 必要なファイル:VMRestart.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
    
        #仮想マシンの再起動
        $VMStatus = Get-VM $hn | Restart-VMGuest -Confirm:$false
        $Result += [pscustomobject]@{"HostName"=$hn; "Start 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     ReStart DateTime    ErrorMessage
--------     ----------------    ------------
ewindows2003 2020/06/18 13:35:32
ewindows2008 2020/06/18 13:35:44
ewindows2012 2020/06/18 13:35:49
ewindows2016 2020/06/18 13:35:55
ewindows2019 2020/06/18 13:36:02

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