Home > Windows にまつわる e.t.c.

sysprep 起動直後にスクリプトを自動実行する


sysprep だけでサービスインができる環境が準備できれば良いのですが、システムによっては初期セットアップが必要なこともあります。

sysprep 起動後に自動的にスクリプトを実行させるのはいくつか方法がありますが、 SetupComplete.cmd を使うのがおすすめです。

SetupComplete.cmd は、sysprep 起動後からログオン画面が出るまでの間にスクリプトが実行されるので、OOBE とかの sysprep 動作影響を受けません。

使い方は簡単で、SetupComplete.cmd に実行コマンドを書いて、%WinDir%\Setup\Scripts(通常 c:\Windows\Setup\Scripts)にコピーします。(フォルダ作成必要)

sysprep 起動処理が終わると、このファイルが実行されます。(特別な設定は不要)

例えば、Untitled.xml と SetupComplete.cmd を削除するために C:\1stexec\cleanup.ps1 を実行したい場合は、以下のようにします。
(.bat や .exe 実行でも ok)

 

SetupComplete.cmd の作成

SetupComplete.cmd を作成し、テキストエディタで以下のように c:\1stexec\cleanup.ps1 を実行するように書きます。

SetupComplete.cmd

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy RemoteSigned -File c:\1stexec\cleanup.ps1

 

このファイルを C:\Windows\Setup\Scripts にコピーします。

 

 

実行スクリプトの作成

不要になったファイル削除用の cleanup.ps1 にファイル削除のスクリプトを書いて、所定の場所に置きます。(今回の例では c:\1stexec\cleanup.ps1)

実行するスクリプトは del だけで十分なのですが、実行ログも出力したいので、こんな感じにしてみました。

cleanup.ps1

$LogPath = "C:\Logs"
$LogName = "sysprep-exec"
##########################################################################
# ログ出力
##########################################################################
function Log(
            $LogString
            ){

    $Now = Get-Date

    $Log = "{0:0000}-{1:00}-{2:00} " -f $Now.Year, $Now.Month, $Now.Day
    $Log += "{0:00}:{1:00}:{2:00}.{3:000} " -f $Now.Hour, $Now.Minute, $Now.Second, $Now.Millisecond
    $Log += $LogString

    if( $LogName -eq $null ){
        $LogName = "LOG"
    }

    $LogFile = $LogName +"_{0:0000}-{1:00}-{2:00}.log" -f $Now.Year, $Now.Month, $Now.Day

    # ログフォルダーがなかったら作成
    if( -not (Test-Path $LogPath) ) {
        New-Item $LogPath -Type Directory
    }

    $LogFileName = Join-Path $LogPath $LogFile

    Write-Output $Log | Out-File -FilePath $LogFileName -Encoding Default -append

    Return $Log
}

##########################################################################
# main
##########################################################################
Log "[INFO] Strat"

del C:\Windows\System32\sysprep\untitled.xml
Log "[INFO] untitled.xml delted"

del C:\WINDOWS\Setup\Scripts\SetupComplete.cmd
Log "[INFO] SetupComplete.cmd delted"

Log "[INFO] End"

 

 

sysprep の実行

準備ができたら sysprep で展開イメージにします。

展開されたイメージが起動すると、仕込んでおいたスクリプトが自動実行されサービスインできるようになります。

 

これ以外にも自動応答ファイルに RunSynchronousCommand を設定する方法と、自動応答ファイルに FirstLogonCommands を設定する方法があります。

詳しくはこちらをご覧ください。

Sysprep 中に任意のコマンドを実行する方法について | Ask CORE
https://blogs.technet.microsoft.com/askcorejp/2010/05/27/sysprep/

 

 

関連情報

sysprep の自動応答ファイルの作り方
http://www.vwnet.jp/Windows/WS12R2/2016071301/sysperp_untitled.htm

Windows Server / Windows Client OS の sysprep をカスタマイズする
http://www.vwnet.jp/Windows/WS16/2017072301/EditSysprep.htm

 

 

back.gif (1980 バイト)

home.gif (1907 バイト)

Copyright © MURA All rights reserved.