【bat、PowerShell】(PCメンテナンス用)PC設定まとめて取得

【ツールの概要】
Windowsの設定をまとめて出力するbat。
・ほかにもいいコマンドがあると思います、たぶん。(netコマンドとかやたら多いですし、powershellで出来ることも多い。)
・クライアントPCの保守などで流すと後で見るのに楽、かも。
・ローカルグループポリシーのコマンドは諸々の理由から採用してません。
 (やり方は「グループポリシーをAD環境ではない他のPCへ適用する方法(MS TechNet)」とか参照するとよいです)
 

【環境(使っている環境)】
・Windows10Pro
 ※他のWindowsでも動くか→大抵は動くと思われる。powershell環境も要。(5.0以降、Windows10は標準で組込済。7zipとかで代替可能。)


【ソース(get_config.bat)】

SET Date_Tmp=%date:/=%
SET tempfol=C:\temp\%Date_Tmp%

If not exist %tempfol% ( mkdir %tempfol% )

SET logfile=%tempfol%\excfg.log
SET IPcfg=%tempfol%\IPCfg.txt
SET fwcfg=%tempfol%\Winfw.wfw
SET fwrule=%tempfol%\Winfwrule.txt
SET RegEx=%tempfol%\Regex.txt
SET SysInfo=%tempfol%\SysInfo.txt
SET Pinarp=%tempfol%\Pinarp.txt
SET netqw=%tempfol%\netst_qw.txt
SET netuser=%tempfol%\netuser.txt
SET tasklist=%tempfol%\tasklist.txt
SET msinfo=%tempfol%\msinfo.txt

echo.
echo 少々お待ちください。設定情報を出力中です。
echo 出力中 1/10
echo ======================== >%logfile%
echo ipconfig >>%logfile%
echo ======================== >>%logfile%
echo %time% >%IPcfg%
echo %COMPUTERNAME% >>%IPcfg%
ipconfig /all >>%IPcfg%
echo ipconfig出力完了 >>%logfile%
echo. >>%logfile%

echo 出力中 2/10
echo ======================== >>%logfile%
echo ファイアウォール設定 >>%logfile%
echo ======================== >>%logfile%
netsh advfirewall export %fwcfg%
echo ファイアウォール設定出力完了 >>%logfile%
echo. >>%logfile%

echo 出力中 3/10
echo ======================== >>%logfile%
echo ファイアウォールルール一覧 >>%logfile%
echo ======================== >>%logfile%
netsh advfirewall firewall show rule name=all >%fwrule%
echo ファイアウォールルール一覧出力完了 >>%logfile%
echo. >>%logfile%

echo 出力中 4/10
echo ======================== >>%logfile%
echo レジストリ一覧 >>%logfile%
echo ======================== >>%logfile%
reg export HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\SharedAccess\Parameters\FirewallPolicy %RegEx%
echo レジストリポリシーFW関係一覧出力完了 >>%logfile%
echo. >>%logfile%

echo 引き続き設定情報を出力中です。5/10
echo ======================== >>%logfile%
echo systeminfo出力 >>%logfile%
echo ======================== >>%logfile%
systeminfo > %SysInfo%
echo systeminfo出力完了 >>%logfile%
echo. >>%logfile%
echo.

echo 出力中 6/10
echo 他端末へのネットワーク状況確認。
echo ======================== >>%logfile%
echo ping出力 >>%logfile%
echo ======================== >>%logfile%
echo セグメントへのブロードキャストアドレスへ確認中。
ping 192.168.0.255 >>%Pinarp%
arp -a >>%Pinarp%
echo pingarp出力完了 >>%logfile%
echo. >>%logfile%
net view >>%Pinarp%
echo.>>%logfile%

echo 出力中 7/10
echo ======================== >>%logfile%
echo ネットワーク確認 >>%logfile%
echo ======================== >>%logfile%
netstat -an >>%netqw%
echo. >>%netqw%
echo. >>%netqw%
echo 「qwinsta.exe /server:localhost」の実行結果。「rdp-tcp」がリスニングセッションとしてあるか確認。 >>%netqw%
qwinsta.exe /server:localhost >>%netqw%
echo ネットワーク確認結果出力完了 >>%logfile%
echo. >>%logfile%
net share >>%netqw%
echo.>>%logfile%

echo 出力中 8/10
echo ======================== >>%logfile%
echo アカウント確認 >>%logfile%
echo ======================== >>%logfile%
net user >>%netuser%
query user>>%netuser%
query session>>%netuser%
net localgroup>>%netuser%
REM ドメイン環境の場合は以下を有効化。
REM net group >>%netuser%
echo アカウント確認結果出力完了 >>%logfile%
echo.>>%logfile%

echo 出力中 9/10
echo ======================== >>%logfile%
echo タスクリスト >>%logfile%
echo ======================== >>%logfile%
tasklist >>%tasklist%
tasklist /svc>>%tasklist%
qprocess >>%tasklist%
echo タスクリスト確認結果出力完了 >>%logfile%
echo.>>%logfile%

echo 出力中 10/10 キャンセルは押さずに少々お待ちください!
echo ======================== >>%logfile%
echo msinfo32出力 >>%logfile%
echo ======================== >>%logfile%
msinfo32 /report %msinfo%
echo msinfo32出力完了 >>%logfile%
echo.>>%logfile%

echo ファイルを送信しています。
REM ファイル圧縮・共有フォルダへコピー
REM 下記ではeveryone接続可能なパスへユーザ認証なしでドライブ割り当て
cd /d %~dp0
powershell -Command "Compress-Archive -Path %tempfol% -DestinationPath C:\temp\%COMPUTERNAME%_%Date_Tmp%.zip"

SET PATH_1=\\192.168.XXX.XXX\e$
SET DRIVE_LETTER_1=M
SET DRIVE_LETTER_2=N
If exist %DRIVE_LETTER_1%:\ (
	echo %DRIVE_LETTER_1%:\ はすでに利用されています。 >>%LogFile%
	If exist %DRIVE_LETTER_2%:\ (
		echo %DRIVE_LETTER_2%:\ もすでに利用されています。 >>%LogFile%
		echo 処理を中止します。使用可能なドライブを確認しスクリプトを修正してください。 >>%LogFile%
		goto End
	) else (
		net use %DRIVE_LETTER_2%: %PATH_1%
		SET TargetPath=%DRIVE_LETTER_2%:\設定ファイルパス\
	)
) else (
	net use %DRIVE_LETTER_1%: %PATH_1%
	SET TargetPath=%DRIVE_LETTER_1%:\設定ファイルパス\
)

xcopy C:\temp\%COMPUTERNAME%_%Date_Tmp%.zip %TargetPath% /s /h /r /d /y

REM 割り当て解除
If exist %DRIVE_LETTER_1%:\ (
	net use %DRIVE_LETTER_1%: /delete /y
	echo 本動作は正常な動作です。
	echo %time:~0,8% ライブ割当解除完了 %DRIVE_LETTER_1% >>%LogFile%
)
If exist %DRIVE_LETTER_2%:\ (
	net use %DRIVE_LETTER_2%: /delete /y
	echo 本動作は正常な動作です。
	echo %time:~0,8% ドライブ割当解除完了 %DRIVE_LETTER_1% >>%LogFile%
)

echo 何かキーを押すとフォルダを開き終了します。
pause > nul
start %tempfol%

 

【使用方法】
・パスやフォルダ名などは環境に沿って書き換えて管理者実行します。
・systeminfoはmsinfo32と情報的に被ることが多いため、不要なら削除。
・設定を各種テキストファイルに出力後、powershellで圧縮し、ネットワークドライブをここでは2個までドライブ割り当てしようとします。
・メールで送ったり圧縮ファイルを置いとくだけならドライブ割り当て以下の行も不要です。


【説明】
・以下のコマンドをそれぞれのテキストファイルに出力します。
 各コマンドの説明は実際に打つかMSのヘルプでも参照してください(え

 ipconfig /all
 netsh advfirewall export ファイルパス
 netsh advfirewall firewall show rule name=all
 reg export HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\SharedAccess\Parameters\FirewallPolicy ファイルパス
 systeminfo
 arp -a (ブロードキャストアドレスへのping後)
 net view
 netstat -an
 qwinsta.exe /server:localhost
 net share
 tasklist
 tasklist /svc
 qprocess
 msinfo32 /report ファイルパス

・zip圧縮ファイルの名前は、[コンピュータ名]_[日付].zipとなるため、コンピュータ名が被ることが想定される場合は、他のユニークな名前をファイル名に設定するべきです。
レジストリのエクスポートはいっそ全部とってもいいかもしれません。もしくはHKLMやHKCUを狙うとかもいいかも。
 

【総評】
管理人が入った会社の環境がワークグループ環境で()、端末配備時のキッティングなにそれという状況だったので、整理するため作ったbatです。
ワークグループ環境のため、ネットワーク設定をまず確認したかった意図がありました。(あとはリモートで覗ければなんとかなる、みたいな)
実際使用しているスクリプトでは、管理用IDやFWポリシー、リモデ設定とかもオプションで含んだりしてますね。
これらの設定ファイルをreadして設計書を作成できれば最高ですね。(白目)