ラボ環境を作っている人を見ると2通りの人種がいるような気がする。
- ISOからしっかりOSのインストールをして、魂を込めた設定している人
- 単にクローンした仮想マシンを使っている人
ISOからしっかりOSのインストールをして、魂を込めた設定している人
この人の特徴は、新卒のときに現場経験をたくさん積んできた人。OSのインストールに一家訓が存在するいわば重鎮。言い方を変えるとインフラマンセイの人
悪い言い方をするとガンコな人かもしれない。
単にクローンした仮想マシンを使っている人
単にズボラなのか思慮が欠落しているのか。超効率化を求めているのか。。。細かいことは気にしない。
あるいは、クラウド世代の人でOSのインストールの仕方をしらないか興味がない。
自分としては、単にクローンした仮想マシンを使っている人を応援したい。要は、簡単に魂を込めた設定をしている人になればいいんでしょw
というわけでSysprepのお話。昔の人はsysprepって、ハードウェアキッティングの人が使ってるんじゃねぇといいそうですが、今はもう令和です。昭和の話はしません。
Sysprepをする目的
- 設定を画一化、均等化したい。設定の有無でのトラブルを避けたい
- アプリケーション設定の自動化。インストールするアプリケーション先に入れて設定しておきたい
- アクティベーションカウントの増加を増やしたくない。sysprepを一回するとアクティベーションカウントが減っちゃう。サービスパックがリリースされないので、おまけ1回のアクティベーションカウントの追加ももはや期待できない。
- AD環境を組むときのSIDの重複を避けたい。これにぶち当たるとジミーに面倒。なので、知っている人は、AD環境を作るとき、ADだけはOSのインストールをする人がいるくらい。昔はSIDを変えるツールがsysinternalにあったんだが、sysprepを使えと。
自分的にはOSインストールした直後の諸々の設定が面倒で、せいぜいAdministratorのパスワードくらいの再設定だけでいいんだけど。。。
SysprepをするためのOS設定
- 普通にOSをいれる。Administratorのパスワードも適当に設定する。クライアントOSならAdministratorユーザを有効にして、パスワードを設定。Administratorユーザでログイン
- AdministratorユーザでOSの設定やアプリケーションのインストール、設定。スタートメニューとかも整理する
- Windows Updateとかも適用する。
- VDI展開する場合は、VMware OS Optimization Tool (https://flings.vmware.com/vmware-os-optimization-tool)をダウンロードして、実行するとVDIに最適化された環境になる。
<宣伝>VMware OS Optimization Toolには、自分が作った設定テンプレートがあるw。古いけどね。
これでsysprepを実行。ただし、普通にsysprepを実行すると、次回起動時には、Administratorの設定も消え、OSの全ての設定がやり直しになる。なので、設定ファイルが必要になる。
以下がその設定ファイル。ファイル名はsysprep.xmlとかで保存しておく。(まぁ中身はxmlだってわかると思うけど。)細かい設定の説明は割愛。この設定が一番便利で、sysprepを設定した際のmini setupにかかる時間も一番速い。VDIのクローン展開の時にかなり研究したw
Server OSの場合
<unattend xmlns=”urn:schemas-microsoft-com:unattend”>
<settings pass=”oobeSystem”>
<component name=”Microsoft-Windows-Shell-Setup” processorArchitecture=”amd64″ publicKeyToken=”31bf3856ad364e35″ language=”neutral” versionScope=”nonSxS” xmlns:wcm=”http://schemas.microsoft.com/WMIConfig/2002/State” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”>
<OOBE>
<HideEULAPage>true</HideEULAPage>
<HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE>
<NetworkLocation>Work</NetworkLocation>
<ProtectYourPC>1</ProtectYourPC>
<SkipMachineOOBE>true</SkipMachineOOBE>
<SkipUserOOBE>true</SkipUserOOBE>
</OOBE>
</component>
<component name=”Microsoft-Windows-International-Core” processorArchitecture=”amd64″ publicKeyToken=”31bf3856ad364e35″ language=”neutral” versionScope=”nonSxS” xmlns:wcm=”http://schemas.microsoft.com/WMIConfig/2002/State” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”>
<InputLocale>ja-JP</InputLocale>
<SystemLocale>ja-JP</SystemLocale>
<UILanguage>ja-JP</UILanguage>
<UILanguageFallback>ja-JP</UILanguageFallback>
<UserLocale>ja-JP</UserLocale>
</component>
</settings>
<settings pass=”generalize”>
<component xmlns:wcm=”http://schemas.microsoft.com/WMIConfig/2002/State” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” language=”neutral” name=”Microsoft-Windows-PnpSysprep” processorArchitecture=”amd64″ publicKeyToken=”31bf3856ad364e35″ versionScope=”nonSxS”>
<PersistAllDeviceInstalls>true</PersistAllDeviceInstalls>
</component>
<component xmlns:wcm=”http://schemas.microsoft.com/WMIConfig/2002/State” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” language=”neutral” name=”Microsoft-Windows-Security-SPP” processorArchitecture=”amd64″ publicKeyToken=”31bf3856ad364e35″ versionScope=”nonSxS”>
<SkipRearm>1</SkipRearm>
</component>
</settings>
<settings pass=”specialize”>
<component name=”Microsoft-Windows-Shell-Setup” processorArchitecture=”amd64″ publicKeyToken=”31bf3856ad364e35″ language=”neutral” versionScope=”nonSxS” xmlns:wcm=”http://schemas.microsoft.com/WMIConfig/2002/State” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”>
<CopyProfile>true</CopyProfile>
</component>
<component xmlns:wcm=”http://schemas.microsoft.com/WMIConfig/2002/State” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” language=”neutral” name=”Microsoft-Windows-Deployment” processorArchitecture=”amd64″ publicKeyToken=”31bf3856ad364e35″ versionScope=”nonSxS”>
<RunSynchronous>
<RunSynchronousCommand wcm:action=”add”>
<Order>1</Order>
<Path>net user Administrator /active:yes</Path>
</RunSynchronousCommand>
</RunSynchronous>
</component>
</settings>
</unattend>
Windows 10環境
Windows 10環境では、そのマシンが一度もインターネットに接続されていない必要がある。ClientOSの場合はデフォルトのユーザが必要になるのでuser1/Password00!というユーザがデフォルトできる。変更したい場合は、書き換えること。
<?xml version=”1.0″ encoding=”utf-8″?>
<unattend xmlns=”urn:schemas-microsoft-com:unattend”>
<settings pass=”generalize”>
<component xmlns:wcm=”http://schemas.microsoft.com/WMIConfig/2002/State” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” language=”neutral” name=”Microsoft-Windows-PnpSysprep” processorArchitecture=”amd64″ publicKeyToken=”31bf3856ad364e35″ versionScope=”nonSxS”>
<PersistAllDeviceInstalls>true</PersistAllDeviceInstalls>
</component>
<component xmlns:wcm=”http://schemas.microsoft.com/WMIConfig/2002/State” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” language=”neutral” name=”Microsoft-Windows-Security-SPP” processorArchitecture=”amd64″ publicKeyToken=”31bf3856ad364e35″ versionScope=”nonSxS”>
<SkipRearm>1</SkipRearm>
</component>
</settings>
<settings pass=”specialize”>
<component name=”Microsoft-Windows-Shell-Setup” processorArchitecture=”amd64″ publicKeyToken=”31bf3856ad364e35″ language=”neutral” versionScope=”nonSxS” xmlns:wcm=”http://schemas.microsoft.com/WMIConfig/2002/State” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”>
<ComputerName>*</ComputerName>
<CopyProfile>true</CopyProfile>
</component>
<component name=”Microsoft-Windows-UnattendedJoin” processorArchitecture=”amd64″ publicKeyToken=”31bf3856ad364e35″ language=”neutral” versionScope=”nonSxS” xmlns:wcm=”http://schemas.microsoft.com/WMIConfig/2002/State” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”>
<Identification>
<JoinWorkgroup>WORKGROUP</JoinWorkgroup>
</Identification>
</component>
</settings>
<settings pass=”oobeSystem”>
<component name=”Microsoft-Windows-Shell-Setup” processorArchitecture=”amd64″ publicKeyToken=”31bf3856ad364e35″ language=”neutral” versionScope=”nonSxS” xmlns:wcm=”http://schemas.microsoft.com/WMIConfig/2002/State” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”>
<OOBE>
<HideEULAPage>true</HideEULAPage>
<HideLocalAccountScreen>true</HideLocalAccountScreen>
<HideOnlineAccountScreens>true</HideOnlineAccountScreens>
<HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE>
<ProtectYourPC>3</ProtectYourPC>
</OOBE>
<UserAccounts>
<LocalAccounts>
<LocalAccount wcm:action=”add”>
<Password>
<Value>Password00!</Value>
<PlainText>true</PlainText>
</Password>
<Group>Administrators</Group>
<Name>user1</Name>
</LocalAccount>
</LocalAccounts>
</UserAccounts>
<TimeZone>Tokyo Standard Time</TimeZone>
</component>
<component name=”Microsoft-Windows-International-Core” processorArchitecture=”amd64″ publicKeyToken=”31bf3856ad364e35″ language=”neutral” versionScope=”nonSxS” xmlns:wcm=”http://schemas.microsoft.com/WMIConfig/2002/State” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”>
<InputLocale>ja-JP</InputLocale>
<SystemLocale>ja-JP</SystemLocale>
<UILanguage>ja-JP</UILanguage>
<UserLocale>ja-JP</UserLocale>
</component>
</settings>
</unattend>
Sysprepの実行
管理者権限でコマンドプロンプトを起動して、以下を実行する。WinSATは暫し実行に時間がかかる。これをやるかやらないかでmini setupの時間が全然違う。
WinSAT prepop
%systemroot%\system32\sysprep\sysprep.exe /generalize /oobe /shutdown /unattend:”sysprep-general-x64.xml”
仮想マシンがシャットダウンされるので、そのままテンプレートにする。必要であればOVAでエキスポートしてもいい。
あとは、そのテンプレートから起動すればいい。
ClientOSでSysprepがうまく動かずエラーになる場合は以下の2つが考えられる。
- Administratorユーザが無効、あるいはAdministratorユーザじゃない
- インターネットに接続しちゃった。
いずれにせよ、作り直しになる。
クローンしたOSの起動
起動するといきなりAdministratorのパスワードの再設定を促される。設定してあげれば、ログインができる。ホスト名もSIDもリセットされているので、ホスト名を改めて指定して再起動すれば終わり。
VAAIのストレージと併用で、Windows Server1台にかかるセットアップは、ゼロから初めて3分くらいでログイン画面に辿り着く。もちろんWindpws Updateやアプリケーションのインストール設定済みで。。。
パスワード設定して、ログインをすると、右側に以下が出てくるので「はい」をクリック。
「いいえ」をクリックしたり他のアプリを開いて応答し忘れると。。。ネットワークの設定がパブリックネットワークになってしまう。
こうなると、もうWindows ファイヤーウォールを全開放しないと動かないと主張するWindows ファイヤーウォール全開教が爆誕してしまう。
入信される前にPowershellを管理者モードで立ち上げて以下を実行する。これもなぜか設定が言語依存のリテラルなんだよなぁ。。。
Powershell Get-NetConnectionProfile
Powershell “Get-NetConnectionProfile | where Name -eq “ネットワーク” | Set-NetConnectionProfile -NetworkCategory Private”
Powershell Get-NetConnectionProfile
Windows ファイヤーウォールを無効にしろ!と言う人はここいらのロジックが完全にぶっ飛んでいる。
もう一つ、アクティベーションカウントも確認しておく。減ってない!
slmgr /dlv
新人研修で習っている人も多いかもしれないけど、知っているかしらないかで人生の時間の余裕度が全然違うという話でした。
少なくとも自分が新卒の時には習わなかった(オッサンなんでw)