先日、Linuxの設定情報を1つのテキストファイルに出力するスクリプトを作成した。
Linuxに引き続き、今回はWindows Serverの設定情報を1つのテキストファイルに出力し、一括取得するスクリプトを作ってみた。このスクリプトを使うことで、Windows Serverの設定に関しても、ネットワーク機器のように設定変更時の差分をdiffツールにて比較をできるようにする。
環境
本スクリプトの動作確認をしたOSは以下の通り。
- OS : Windows Server 2022 または 2019
- 実行シェル : PowerShell 5.1
Windows Server設定項目一覧
本スクリプトで取得する設定項目は以下となる。
取得設定項目 | 取得設定内容 |
---|---|
ホスト名・OSバージョン情報 | OSのバージョン、カーネル番号、稼働時間など |
ハードウェア情報 | CPUのコアやソケット数、メモリ容量、PCIデバイス一覧 |
OS基本設定 | Get-ComputerInfo で取得できる情報取得とページングファイルのサイズ設定 |
ネットワーク設定 | 各種ネットワーク関連設定。DNSやhosts ファイルの設定を含む |
ディスク設定 | 各種ディスク情報 |
光学ドライブ設定 | CD/DVDドライブ情報 |
ユーザ・グループ設定 | ローカルユーザー一覧、ローカルグループ一覧 |
リモートデスクトップ設定 | リモートデスクトップに関する設定 |
時刻設定 | タイムゾーン設定、時刻同期 (w32tm) に関する設定 |
OS言語設定 | 使用している言語 |
サービス設定 | サービス一覧 |
役割・機能 | Windowsの役割・機能の一覧 |
更新プログラム | 適用済み更新プログラムの一覧 |
インストールソフトウェア | インストールソフトウェア一覧 |
PowerShellモジュール | インストール済みPowerShellモジュールの一覧 |
イベントビューアー | イベントビューアーの設定情報。セキュリティイベントログの設定情報取得の際は管理者で実行が必要 |
Windows Defenderファイアウォール | Windows Defenderファイアウォールの設定・ルール一覧 |
上記は一般的なWindows Serverの設定項目となっている。追加した役割・機能に応じて、適宜情報取得コマンドを追加するといったカスタマイズが必要となる。
スクリプト
今回作成したスクリプトはGitHubに置いてあるので、そちらを参照いただきたい。なお。Gitからダウンロードした際は文字コードがUTF-8になるため、Shift JISに変換して保存しなおしてから実行すること。
スクリプトには以下の関数を用意しており、効率よく設定値を取得できるようにしている。以下に関数の動作概要を記載する。
関数名 | 内容 |
---|---|
show_title |
取得対象の設定項目のタイトルを表示 |
get_command |
コマンドを実行して、その結果を取得 |
get_command_bat |
コマンドを実行して、その結果を取得(コマンドプロンプト用) |
get_config |
設定ファイルからコメント(# から始まる行)及び空行を削除して内容を取得 |
使い方
任意のディレクトリに配置したのち、PowerShellを「管理者として実行」で開き、配置ディレクトリに移動する。あとは以下の通り実行すれば情報取得が開始する。実行時間は環境にもよるが、10秒程度もあれば終了する。
PS> .\get_windows_config.ps1
なお本スクリプトは、PowerShellを「管理者として実行」せずとも、Administrators権限があればほとんどの情報取得には成功するよう作ってある。
※セキュリティイベントログの設定情報のみ取得に失敗する。
同じディレクトリ内に以下のファイル名でログが出力される。
[ホスト名]_config_[yyyyMMdd-HHmmss].log
情報取得結果のサンプル
以下に取得とした設定情報を例として記載する。
※Start-Transcript
のヘッダーは省略している。
コマンドによる情報取得の場合は(command)# [実行コマンド]
または(command_bat)# [実行コマンド]
、設定ファイルの情報取得の場合は(config)# [ファイルのフルパス]
と表示することで、どのように情報取得をしたかわかるようにしている。
################################
ホスト名・OSバージョン情報
################################
(command_bat)# cmd /C 'hostname'
WIN-K7OLL2H57TT
(command_bat)# cmd /C 'whoami.exe /user'
USER INFORMATION
----------------
User Name SID
============================= =============================================
win-k7oll2h57tt\administrator S-1-5-21-3230081072-2687372604-3793060616-500
(command)# Get-WmiObject Win32_OperatingSystem | Select-Object Caption, OSArchitecture, Version, CodeSet, CountryCode, LastBootUpTime
Caption OSArchitecture Version CodeSet CountryCode LastBootUpTime
------- -------------- ------- ------- ----------- --------------
Microsoft Windows Server 2022 Standard Evaluation 64 ビット 10.0.20348 932 81 20220516063525.500000+540
~(中略)~
################################
ディスク設定
################################
(command)# Get-Disk
Number Friendly Name Serial Number HealthStatus OperationalStatus Total Size Partition Style
------ ------------- ------------- ------------ ----------------- ---------- ---------------
0 VMware Virtual disk 6000c29703b80e9e48cca37b8d165c0b Healthy Online 80 GB GPT
(command)# Get-WmiObject Win32_DiskDrive | Select-Object Index, DeviceID, Model, @{N='SizeGB'; E={[Math]::Round($_.Size/1GB, 2)}}, Partitions | sort Index
Index DeviceID Model SizeGB Partitions
----- -------- ----- ------ ----------
0 \\.\PHYSICALDRIVE0 VMware Virtual disk SCSI Disk Device 80 3
(command)# Get-WmiObject Win32_DiskPartition | Select-Object DiskIndex, Index, Name, BlockSize, Bootable, @{N='SizeGB'; E={[Math]::Round($_.Size/1GB, 2)}}, Type, Description | sort DiskIndex, Index
DiskIndex Index Name BlockSize Bootable SizeGB Type Description
--------- ----- ---- --------- -------- ------ ---- -----------
0 0 ディスク #0, パーティション #0 512 True 0.1 GPT: System GPT: システム
0 1 ディスク #0, パーティション #1 512 False 79.3 GPT: Basic Data GPT: ベーシック データ
0 2 ディスク #0, パーティション #2 512 False 0.58 GPT: Unknown GPT: 不明
~(以下略)~
以上。
更新履歴
- 2022/5/28 新規作成
- 2024/7/26 スクリプトの文字コードをShift JISにする旨を追記
式またはステートメントのトークンを使用できません。
返信削除的な表示がされてしまいましたね。終端記号‘がありません。とも表示されましたね。
ありがとうございます。
削除Gitからダウンロードすると文字コードがUTF-8になることが原因のようです。Shift JISに変換が必要な旨追記いたします。
そうなんですね。ありがとうございます。こちらも確認してみます
削除