前回に引き続き応用編になります。自動化できると知っただけでは意味がありませんので、大変おこがましくはございますが、私が使っているバッチをほとんどそのまま文例として載せます。
私はこのブログはリファレンスや教則本ではございませんので、この記事にはこう書かれていますが私はこうしたいですには申しわけありませんが対応しておりません。
といっても、この記事だけでもそこそこのヒントにはなると思っています。詳しく知りたい人は、ググるなりリファレンス本を見るなりしてください。
前回の記事はこちらです。よろしければご覧ください。
流れ
バッチを使ってPCをセッティングをする上で、ある程度の流れを書いておきます。
PCを一番最初に起動したときの設定
ユーザー名、パスワード、秘密の質問などなど、青い画面でやるやつですね。それはさすがに手動でやる必要があります。ネットワークの設定もバッチでやりますのでスキップします。
一式はUSBメモリに保管して導入する
ネットワークの設定はバッチでやると言いました、ということはバッチファイル自体はネットワークで受け取れないということです。
ゆえに、作ったバッチファイルや各種プログラムのインストーラーなどは、前もってUSBメモリにを入れておき、Windows初期設定が終わった新品のPCに挿入するようにしています。
展開場所はデスクトップで
USBに入ったバッチファイルや各種ファイル群は、セッティングが終わったら消すので、とりあえず作業台として分かりやすいデスクトップに置けばいいでしょう。私の説明もデスクトップに置いている体で説明します。
注意点や気付き
作り方
基本的にはコマンドプロンプトで動くものはバッチでも動くので、先にコマンドプロンプトでちゃんと動くかテストすることをお勧めします。もちろんファイル化して動くかも重要ですが、1つ1つ作り込んで行けばいいと思います。
処理の中には再起動が必要なものがあります。処理の途中で再起動してしまっては以降のプログラムは走りません。再起動が必要なプログラムがあれば組み合わせを替えるか、バッチファイルを分けるようにしましょう。
バッチで出来ないことは諦める
バッチで出来ないことは仕方がないと諦め、後で手動でやることにしています。全てのバッチ終了後もしくは、その途中に手動による作業を挟みます。私の環境には、WindowsUpdateが終わらないとインストールできないプログラムがあるので、どうしてもそうなります。
手動と自動で誤差がないか確認すること
私の場合は社員が使うPCのセッティングなので特にそう思うのですが、設定が間違っていると皆さんに迷惑をかけてしまいます。
手作業で行った場合とバッチで行った場合で、同じ結果が得られているか確認しましょう。もちろんプログラムを作ったときの最初の1回だけで十分です。
バッチファイルは共通にすること
当たり前の話ですが、10台のPCに10台とも同じ設定をするわけがありません。だからといって、バッチファイルを10台分作っていては無駄が多すぎます。
その場合は環境変数を使います。後述しますが、%username%でWindows初期設定のときに入力したユーザ名を取得することができます。またバッチの途中で入力させる方法もあります。なるべくバッチは共通化して替えないようにすることを心掛けた方がいいと思います。
プログラム間の間隔を空ける必要がある?
プログラム間の間隔を空けないと、どんどん先に進んで手前の処理が追い付かないことがあるのでは?と思いましたが大丈夫のようです。基本的にバッチというものは、前のプログラムが終わってから、次のプログラムを実行するようにできているようです。
プログラムをストップするpauseやtimeoutという命令がありますが、基本的にそういう心配のために使う必要はなさそうです。私は使っていません。
各種操作プログラム
プログラムを走らせるときは、ある程度まとめてファイル化しますが、ここでは1つ1つ機能によって分割して書いています。
アカウントの追加
アカウント作成です。旧態のいわゆるMicrosoftアカウントを持たないユーザの追加です。
今回は管理者という意味でkanriという名前のアカウントを作ります。パスワードはプログラム上に記述したら漏洩するので、set /pで使い手に入力させます。あとアカウントに管理者権限付与し、パスワードの有効期限を無期限にします。
@echo off rem 使い手に入力させる set /p PASSWORD= rem ユーザーアカウントの追加 net user kanri %PASSWORD% /add rem ユーザアカウントの設定変更 wmic useraccount where Name="kanri" set PasswordExpires=False net localgroup "administrators" kanri /add
IPアドレスの設定
固定のIPアドレスとサブネットとデフォルトゲートウェイと、DNSサーバアドレスの登録です。
rem IPアドレスとサブネットとデフォルトゲートウェイ netsh interface ipv4 set add name="イーサネット" source=static addr="xxx.xxx.xxx.xxx" mask="xxx.xxx.xxx.xxx" gateway="xxx.xxx.xxx.xxx" gwmetric=1 rem 優先DNSサーバアドレスの登録 netsh interface ipv4 set dns name="イーサネット" source=static addr="xxx.xxx.xxx.xxx" register=non validate=no rem 代替DNSサーバアドレスの登録 netsh interface ipv4 add dns name="イーサネット" addr="xxx.xxx.xxx.xxx" index=2 validate=no
スクリーンセーバーをバブル30分にする
スクリーンセーバーをバブルに設定し、開始までの時間を30分に設定します。
rem 種類をバブルにする reg add "HKEY_CURRENT_USER\Control Panel\Desktop" /v "SCRNSAVE.EXE" /t REG_SZ /d "C:\Windows\System32\Bubbles.scr" /f rem 時間を30分にする reg add "HKEY_CURRENT_USER\Control Panel\Desktop" /v "ScreenSaveTimeOut" /t REG_SZ /d 1800 /f
尚、スクリーンセーバーは有効無効の設定があるそうで、下記は有効にする命令ですが、スクリーンセーバーは最初から有効になっているようなので、基本使わなくてよさそうです。一応備忘録にて。
reg add "HKEY_CURRENT_USER\Control Panel\Desktop" /v "ScreenSaveActive" /t REG_SZ /d 1 /f
UACを通知しないに設定する
ユーザーアカウント制御の通知設定です。セキュリティ上はONが望ましいようですが、いちいち表示されるとユーザビリティがどうかということで無効にしています。
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /v "ConsentPromprtBehaviorAdmin" /t "REG_DWORD" /d "0" /f reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /v "EnableLUA" /t "REG_DWORD" /d "0" /f reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /v "PromptOnSecureDesktop" /t "REG_DWORD" /d "0" /f
拡張子を表示する
拡張子の表示は必要ですね。うっかり拡張子を消しちゃうユーザーもいそうですが、拡張子が表示されていないと、怪しいexeを開いてしまうかもしれませんので・・。
reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d "0" /f
リモートアシスタンスを無効にする
ウチはリモートアシスタンスは無効にしています。基本的にシステムとユーザー間のリモートデスクトップがあれば事足りるという判断のようです。本当はユーザー間で助け合えるアシスタンスは使ってほしいところですが・・。
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Remote Assistance" /v "fAllowToGetHelp" /t REG_DWORD /d "0" /f
リモートデスクトップをONにする
これが使えないと管理者としては至極不便なのでガンガンに使っています。デフォルトはオフです。手動でONにすると、レジストリ値・ポート・ファイヤーウォール許可の3つが変更されるようですが、下記命令はそれを行っています。
rem この操作でレジストリ値を変更する(同時にTCP/UDPポートの3389が待ち受けになる) reg add "HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Terminal Server" /v "fDenyTSConnections" /t REG_DWORD /d "0" /f rem 「ファイヤーウォールの許可されたアプリ」のリモートデスクトップを許可チェック入れる netsh advfirewall firewall set rule group="リモート デスクトップ" new enable=Yes
自動ログオン
電源ONにするとパスワードを聞かれずに自動でログインする設定。昔はappwiz.cplやnetplwizで設定していましたが、最近Windows10ではセキュリティの関係でできなくなったみたいです。でもその抜け道があるのでその設定。
「ユーザーがこのコンピュータを使うには、ユーザー名とパスワードの入力が必要」の項目を表示
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t "REG_DWORD" /d "0" /f
レジストリのwinlogon項目に、必要な値を追加する。
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v "AutoAdminLogon" /t REG_SZ /d "1" /f reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v "DefaultUserName" /t REG_SZ /d "%username%" /f reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v "DefaultDomainName" /t REG_SZ /d "%computername%" /f reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v "DefaultPassword" /t REG_SZ /d "%username%" /f
変数として埋めこまれている、%username%や%computername%はPCを一番最初に起動したときに設定した名前。環境変数として取得できる。
ファイルの移動
USBからデスクトップに移したバッチ以外の必要ファイル群、特に設定に使うファイルなどは、デスクトップに置きっぱなしよりも、ドキュメントなどの各種フォルダに移動してあげた方がいいでしょう。
rem デスクトップのファイルをドキュメントフォルダに移動 move "%UserProfile%\Desktop\ファイル名" "%UserProfile%\Documents\"
フォルダの作成
フォルダを作ってからファイルを移動すれば、フォルダ分けも可能ですね。
rem フォルダの作成 mkdir %UserProfile%\フォルダ名
複合機から取り込むスキャン文書を受けるフォルダは、Cドライブ直下に作ることをお勧めします。
rem scanフォルダの作成 mkdir c:\scan
フォルダへのアクセス許可
下記はUsersからフォルダへのフルコントロール権限を与える命令
icacls "UserProfile%\フォルダ名 /grant Users:(OI)(CI)F
フォルダの共有
複合機からPCにアクセスさせるには共有設定が必要です。アクセス許可も含めて。
rem 共有設定 net share scan=c:\scan /grant:Everyone,full rem アクセス許可 icacls c:\scan /grant Users:(OI)(CI)F
スタートアップに登録する
スタートアップとはPC起動時に実行したい処理のことです。例えばPC起動時に会社のシステムを開かせたい、グループウェアを開かせたいなどが考えられます。
Startupというフォルダに実行したいファイルを置くだけなので、バッチの内容は、USBからデスクトップに移動したファイルをそのフォルダに移動するだけのプログラムです。
moveだと移動ですが、copyでも大丈夫です。
rem batを起動する move "%UserProfile%\Desktop\ファイル名.bat" "%UserProfile%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\" rem urlを起動しHPを開く move "%UserProfile%\Desktop\ファイル名.url" "%UserProfile%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\"
フルコンピューター名の変更
デフォルトのフルコンピューター名はわけの分からない英字なので変更します。PCによって異なる値を入れたいので手動で入力させるようにしています。
echo. echo フルコンピューター名を入力してください。 echo. set /p CN= rem フルコンピューター名設定 wmic computersystem where name="%computername%" call rename name="%CN%"
ワークグループの変更
ワークグループの設定ですね。いまいち何の役に立っているのか知らないのですが、登録するのが我が社の掟なので自動化します。これも手入力にて。
echo. echo ワークグループ名を入力してください。 echo. set /p WG= rem ワークグループ設定 wmic computersystem where name="%computername%" call joindomainorworkgroup name="%WG%"
アプリのインストール
PCのセッティング上、色々なアプリをインストールすると思います。ほとんどの場合はexeやmsiだと思いますが、それを実行するだけの命令文です。もちろん、インストーラーは自分で用意が必要です。
デスクトップに置いた、ファイル名.exeを実行する文です。
call "%~dp0\ファイル名.exe" /q
%~dp0はデスクトップ上を意味し、/qはサイレントインストールの指定を意味します。ファイルをダブルクォーテーションで囲っています。
サイレントインストールとは、次へ次へを押すだけの面倒くさい設定を飛ばしてくれるものですが、使えないアプリもあります。とりあえず/pを付けて実行してみてダメなら外せばいいでしょう。
差しあたって誰でも入れるのはGoogleChromeだと思いますが、通常はネットからChromeSetup.exeをダウンロードするはずですが、私の時は上手くいかなかったので、GoogleChromeStandaloneEnterprise64.msiというのを入手しました。ググれば出て来ると思います。
そのインストールは下記でやりました。
set PARAMETER=GoogleChromeStandaloneEnterprise64.msi msiexec /i "%~dp0\%PARAMETER%" /quiet /norestart
色々試行錯誤が必要なので1つ1つ進めてやってみてください。
ショートカットの作成
デスクトップにプログラムへのショートカットがあった方が便利ですよね。
リンクの貼り方は私もいまいちつかめていないのですが、とりあえずofficeに関しては下記で出来たので参考にしてください。
rem Officeへのショートカットを作成 mklink "%UserProfile%\Desktop\Excel" "C:\Program Files\Microsoft Office\root\Office16\EXCEL.EXE" mklink "%UserProfile%\Desktop\PowerPoint" "C:\Program Files\Microsoft Office\root\Office16\POWERPNT.EXE" mklink "%UserProfile%\Desktop\Word" "C:\Program Files\Microsoft Office\root\Office16\WINWORD.EXE"
ファイルの削除
処理が終わったらUSBから移動したファイル群は電子のチリにします。それもバッチでやってしまいましょう。
rem デスクトップにあるファイルの削除 del "%UserProfile%\Desktop\ファイル名
沢山書くのであれば、ディレクトリ指定をせず、チェンジディレクトリcdでデスクトップに移動してからdelしてもOKです。
rem デスクトップに移動 cd "%UserProfile%\Desktop" rem ファイルの削除 del "ファイル名"
フォルダの削除
ファイルと共に、フォルダも削除しましょう。
rem フォルダの移動 cd "%UserProfile%\Desktop" rem フォルダの削除 rmdir /s /q "フォルダ名"
/sはフォルダの中にサブフォルダやファイルがあったとしても強制的に削除するオプション、/qは/s指定時に削除確認のプロンプトを表示せずに削除するオプションです。
最後に
とりあえずこんなところで。何かあったら追記します。
下の本、私が持っているのは古い版ですが、黒くなるまで使いました。便利ですよ。
コメント