Powershellを用いて、Windows Serverの初期設定
はじめに
仕事でWindows Serverに触れる機会が少ないため、理解を深めるためにWindows Server 2022を勉強しようと考えています。
それに伴い、
Windows Serverをいくつか構築することが予想され、手動でWindows Serverの初期設定は非効率であり、設定漏れする可能性もあります。
そのため、Powershellを用いて個人的に必要な設定を自動化します。
前提
AWS上で、下記のAMIを用いてWindows Server 2022 日本語版でコードは検証済みです。(東京リージョン)
# 使用ami情報
ami-0783e9c9192caa28b
設定内容
設定項目としては下記です。パスワードとホスト名のところは、変更したい値の入力ができます!
・Administratorのパスワードを無期限に設定
・Administratorのパスワードを変更
・タイムゾーンを東京標準時間に変更
・地域を日本に変更
・Windowsファイアウォールを無効化設定
・ホスト名 (コンピュータ名)を変更
コード
# Windows Server 初期セットアップ
# ログ出力のパスを指定
$folderPath = "C:\Work"
$logPath = "C:\Work\setup-log.txt"
# フォルダの存在有無確認
if (-not (Test-Path -Path $folderPath -PathType Container)) {
# フォルダがなければ作成
New-Item -Path $folderPath -ItemType Directory
Write-Output "フォルダが作成されました:$folderPath"
} else {
Write-Output "フォルダは既に存在します:$folderPath"
}
# ログファイルの存在有無確認
if (Test-Path -Path $logPath) {
# 既存のファイルをリネーム
$timestamp = Get-Date -Format "yyyyMMdd"
$rename = $newName = [System.IO.Path]::ChangeExtension($logPath, ".old-$timestamp.log")
Rename-Item -Path $logPath -NewName $rename
Write-Output "既存のファイルをリネームしました:$rename"
}
# ファイル作成
New-Item -Path $logPath -ItemType File
Write-Output "ファイルが作成されました:$logPath"
################
# 設定変更開始 #
################
# Administratorのパスワードを無期限に設定
Set-LocalUser -Name Administrator -PasswordNeverExpires $true
Write-Output "Administratorのパスワード期限が無期限に変更されました" | Tee-Object -FilePath $logPath -Append
net user Administrator >> $logPath
# Administratorのパスワードを変更
$isValidInputPassword = $false
while (-not $isValidInputPassword) {
$newPassword = Read-Host "変更パスワードを入力してください (12文字以上)"
# 変更パスワードは空白ではなく、12文字以上が条件
if ($newPassword -ne "" -and $newPassword.Length -ge 12) {
$isValidInputPassword = $true
# パスワード変更実行
Set-LocalUser -Name Administrator -Password (ConvertTo-SecureString $newPassword -AsPlainText -Force)
Write-Output "Administratorのパスワードが変更されました" | Tee-Object -FilePath $logPath -Append
} elseif ($newPassword -eq "") {
Write-Host "空白のため、無効な入力です。再入力してください。"
} else {
Write-Host "無効な入力です。再入力してください。"
}
}
# タイムゾーンを東京標準時間に変更
Set-TimeZone -id "Tokyo Standard Time"
Write-Output "タイムゾーンが東京標準時間に変更されました" | Tee-Object -FilePath $logPath -Append
tzutil /g >> $logPath
# 地域を日本に変更
Set-WinHomeLocation -GeoId 122
Write-Output "地域が日本に変更されました" | Tee-Object -FilePath $logPath -Append
Get-WinHomeLocation >> $logPath
# Windowsファイアウォールを無効化設定
Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled False
Write-Output "Windowsファイアウォールが無効化に変更されました" | Tee-Object -FilePath $logPath -Append
Get-NetFirewallProfile -Profile Domain,Public,Private | Select-Object -Property Profile,Enabled | Tee-Object -FilePath $logPath -Append
# ホスト名 (コンピュータ名)を変更
$isValidInputHost = $false
while (-not $isValidInputHost) {
$newHost = Read-Host "変更ホスト名を入力してください (15文字以内で入力)"
if ($newHost -ne "" -and $newHost.Length -le 15) {
$isValidInputHost = $true
# ホスト名変更実行
Write-Output "ホスト名変更のため、再起動されました" | Tee-Object -FilePath $logPath -Append
Rename-Computer -NewName $newHost -Force -Restart
} elseif ($newHost -eq "") {
Write-Host "空白のため、無効な入力です。再入力してください。"
} else {
Write-Host "無効な入力です。15文字以内で再入力してください。"
}
}
使用イメージ
基本的には、下記です。
・ps1ファイルを配置
・Powershellで実行
・パスワードとホスト名入力
・自動的に再起動
・ログ等の設定内容確認
実行ポリシーの変更
実行ポリシーは、信頼されていないスクリプトからの保護に役立ちます。実行ポリシーを変更すると、about_Execution_Policies のヘルプ トピック (https://go.microsoft.com/fwlink/?LinkID=135170) で説明されているセキュリティ上の危険にさらされる可能性があります。実行ポリシーを変更しますか? [Y] はい(Y) [A] すべて続行(A) [N] いいえ(N) [L] すべて無視(L) [S] 中断(S) [?] ヘルプ (既定値は "N"): Y ディレクトリ: C:\
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2023/10/21 7:10 Work
フォルダが作成されました:C:\Work
ディレクトリ: C:\Work
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2023/10/21 7:10 0 setup-log.txt
ファイルが作成されました:C:\Work\setup-log.txt
Administratorのパスワード期限が無期限に変更されました
変更パスワードを入力してください (12文字以上): Password2023
Administratorのパスワードが変更されました
タイムゾーンが東京標準時間に変更されました
地域が日本に変更されました
Windowsファイアウォールが無効化に変更されました
Profile : Domain
Enabled : False
Profile : Private
Enabled : False
Profile : Public
Enabled : False
変更ホスト名を入力してください (15文字以内で入力): KANO-WIN2022
まとめ
自分の思い通りに、自動化できると楽しいですよね。
本記事が、誰かの一助になれば嬉しいかぎりです!