はじめに
指定したサーバを一括して再起動するスクリプトです。
環境
OS:Windows10
.Net Framework:4.7
PowerShellのバージョン:5.1.17763.1007
ソースコード
ServerRestart.ps1
#######################################################################################
# 概要:指定したサーバを再起動します。
# 作成者:ITStudy
# 作成日:2020/07/13
# 必要なファイル:ServerRestart.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
Restart-Computer -ComputerName $hn -Credential $credential -Force
$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
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 Start Execution Time ErrorMessage
-------- -------------------- ------------
ewindows2003 2020/07/13 15:16:09
ewindows2008 2020/07/13 15:16:19
ewindows2012 2020/07/13 15:16:29
ewindows2016 2020/07/13 15:16:39
ewindows2019 2020/07/13 15:16:50
もし何かしらのエラーが発生した場合は、「ErrorMessage」に内容が表示されます。必要なファイルがない、サーバの認証が通らない、 暗号化パスワードを復号化できないなどを想定してテストしています。