複数のサーバを一括してシャットダウンする

はじめに

指定したサーバを一括してシャットダウンするスクリプトです。

環境

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

ソースコード

ServerStop.ps1

#######################################################################################
# 概要:指定したサーバをシャットダウンします。
# 作成者:ITStudy
# 作成日:2020/07/13
# 必要なファイル:ServerStop.ps1(このファイルです)
#                 ServersList.csv(対象サーバを記載したファイルです)
#                 SecurePassword.csv(暗号化したパスワードファイルです)
#######################################################################################

$CurrentDir      = $PSScriptRoot
$ServersList     = "ServersList.csv"
$SecurePassword  = "SecurePassword.csv"
$Report          = "Report-$(Get-Date -f yyyyMMdd).csv"
$Result          = @()
$ErrorActionPreference = "SilentlyContinue"

function Decryption($un, $sp){
    #暗号化された標準文字列をSecureStringオブジェクトに変換する
    $secure = ConvertTo-SecureString $sp

    #Credentialオブジェクトを作成する
    $credential = New-Object System.Management.Automation.PSCredential($un,$secure)

    return $credential
}

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

    #エラー配列を初期化
    $error.Clear()
    #ホスト名の取得(HostName)
    $hn = $_.HostName
    #資格情報(Credential)の生成
    $cd = Import-Csv (Join-Path $CurrentDir $SecurePassword) -Encoding Default | ? {$_.HostName -eq $hn}
    $credential = Decryption $cd.UserName $cd.Password

    Stop-Computer -ComputerName $hn -Credential $credential -Force
    $Result += [pscustomobject]@{"HostName"=$hn; "Stop 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

ServersList.csv

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

HostName
ewindows2003
ewindows2008
ewindows2012
ewindows2016
ewindows2019

SecurePassword.csv

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

"HostName","IP","UserName","Password"
"windows2003","192.168.xxx.xxx",administrator,N&Y7rkV%i4EGmtZx
"windows2008","192.168.xxx.xxx",administrator,N&Y7rkV%i4EGmtZx
"windows2012","192.168.xxx.xxx",administrator,N&Y7rkV%i4EGmtZx
"windows2016","192.168.xxx.xxx",administrator,N&Y7rkV%i4EGmtZx
"windows2019","192.168.xxx.xxx",administrator,N&Y7rkV%i4EGmtZx

結果

Report-YYYYMMDD.csv

仮想マシンを再起動した結果が表示されます。

HostName     Stop Execution Time ErrorMessage
--------     ------------------- ------------
ewindows2003 2020/07/13 15:37:48
ewindows2008 2020/07/13 15:37:59
ewindows2012 2020/07/13 15:38:42
ewindows2016 2020/07/13 15:38:53
ewindows2019 2020/07/13 15:39:03

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

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