こんにちは。TYです。
私の最近のトレンドである、自動化の中からWindows Serverの設定をスクリプトで自動的に投入する方法を解説します。
まず、個人的に思う、設定自動化のメリットとデメリットを以下記載します。
メリット:
・設定工数の削減が可能。(手動で設定すると30分かかることが3分で終わるなど)
・設定ミスが減る (あらかじめ正しいスクリプトを書いておけば、設定ミスはまずありえない)
デメリット:
・スクリプトの対する知見がないと難しい。
・コード内に適切なコメントがないと、処理内容が不透明になる。
Windows環境の場合、一般的にはBATやPS1などのWindowsネイティブで利用できる形式でスクリプトを作成することが多いと思います。
以下、Windows Server環境で以下の設定を自動的に行う、スクリプトのサンプルを記載します。(5分程度で作成したものなので、最適なコードとは言えないかもしれません)
①コンピュータ名の変更
②IPアドレスの設定
③アカウントの作成
スクリプトとしては非常にシンプルなものです。応用次第でより高度な処理を実装することもできます。(ファイルから設定値を読み込んだり、ループ処理したりなど)
全体の処理をPowerShellのTranScript機能を用いて、PS1ファイルのディレクトリのlogフォルダ内に「Script.log」として出力します。
構成次第では、スクリプトからネットワークを経由して他のサーバの設定をリモート変更することも可能です。
処理のフローは以下の通りです。
①変数設定
②ログ取得開始
③コンピュータ名変更
④IPアドレス設定
⑤アカウント設定
⑥ログ取得終了
⑦OS再起動 (新しいコンピュータ名の適用のため)
=================================================================
#AutoServerConfigure.ps1
#2023/6/9
#変数設定 ここから
#スクリプトのログファイル名
$logFileName = "Script.log"
#新しいコンピュータ名
$newHostName = "Server01"
#新しいIPアドレス(IPv4)
$newIPAddress = "192.168.100.1"
$newIPAddressSubNet = "24"
$newIPAddressGateway = "192.168.100.254"
#新しいアカウント名
$newAccountName = "NewUser01"
#パスワード
$newAccountPassword = "Test12345"
#変数設定 ここまで
#本処理 ここから
#PS1の保存パスを取得
$currentScriptPath = Split-Path -Parent $MyInvocation.MyCommand.Path
#ログの保存先を指定
$scriptLogDir = $currentScriptPath + "\logs\" + $logFileName
#ログ取得開始
Start-Transcript -Path $scriptLogDir
#コンピュータ名変更
Rename-Computer $newHostName
#IPアドレス設定 (IPv4)
Get-NetAdapter | New-NetIPAddress -AddressFamily IPv4 -IPAddress $newIPAddress -PrefixLength $newIPAddressSubNet -DefaultGateway $newIPAddressGateway
#アカウント作成
New-LocalUser -Name $newAccountName -Password (ConvertTo-SecureString $newAccountPassword -AsPlainText -Force)
#ログ取得終了
Stop-Transcript
#設定適用のため再起動実行
Restart-Computer -Force
#本処理 ここまで
=================================================================
本スクリプトを使用してなにか問題が発生しても一切の責任を負いかねます。あくまでも参考程度にご利用ください。
以上