プロビジョニング パッケージでスクリプトを使用してデスクトップ アプリをインストールするUse a script to install a desktop app in provisioning packages

適用対象Applies to

  • Windows 10Windows10
  • Windows 10 MobileWindows10 Mobile

このチュートリアルでは、Windows 10 プロビジョニング パッケージにスクリプトを含めて Win32 アプリケーションをインストールする機能を利用する方法について説明します。This walkthrough describes how to leverage the ability to include scripts in a Windows 10 provisioning package to install Win32 applications. アプリのインストール以外のスクリプト操作も実行されますが、スクリプトの実行時に予期しない動作を防ぐため、同じ注意が必要です (以下の注釈をご覧ください)。Scripted operations other than installing apps can also be performed, however, some care is needed in order to avoid unintended behavior during script execution (see Remarks below).

前提条件: Windows 10 バージョン 1511 以上用 Windows アセスメント & デプロイメント キット (ADK)Prerequisite: Windows Assessment and Deployment Kit (ADK) for Windows 10, version 1511 or higher

注意

このシナリオは、デスクトップ用 Windows 10 バージョン 1511 以上にアプリケーションをインストールする場合にのみ当てはまります。This scenario is only supported for installing applications on Windows 10 for desktop, version 1511 or higher.

アプリケーション アセットを作成するAssemble the application assets

  1. パッケージを作成するデバイスで、すべてのアセットを既知の場所に置きます。On the device where you’re authoring the package, place all of your assets in a known location. すべてのファイルがデバイス上の同じ一時ディレクトリにコピーされるため、各アセットには一意の名前が必要です。Each asset must have a unique filename, because all files will be copied to the same temp directory on the device. アプリに "install.exe" などの似た名前のインストーラーが使われていることがよくあるため、名前が重複する可能性があります。It’s common for many apps to have an installer called ‘install.exe’ or similar, and there may be name overlap because of that. これを解決するには、次の手順で説明されている手法を使ってディレクトリ構造全体を含め、デバイス上の一時ディレクトリに展開します。To fix this, you can use the technique described in the next step to include a complete directory structure that is then expanded into the temp directory on the device. 最も一般的な使用方法は、各アプリケーションのサブディレクトリを含める方法です。The most common use for this would be to include a subdirectory for each application.

  2. ファイルのディレクトリ構造を含める必要がある場合、プロビジョニング パッケージに含めやすいようにアセットを cab 化する必要があります。If you need to include a directory structure of files, you will need to cab the assets for easy inclusion in the provisioning packages.

## アプリケーション アセットを cab 化するCab the application assets
  1. 以下のように .DDF ファイルを作成します。このとき、file1file2 はパッケージ化するファイルに置き換え、ファイル/ディレクトリの名前を追加してください。Create a .DDF file as below, replacing file1 and file2 with the files you want to package, and adding the name of file/directory.

    ;*** MSDN Sample Source Code MakeCAB Directive file example
    
    ;
    
    .OPTION EXPLICIT  ; Generate errors on variable typos
    
    .set DiskDirectoryTemplate=CDROM  ; All cabinets go in a single directory
    
    .Set MaxDiskFileCount=1000; Limit file count per cabinet, so that
    
    ; scanning is not too slow
    
    .Set FolderSizeThreshold=200000   ; Aim for ~200K per folder
    
    .Set CompressionType=MSZIP
    
    ;** All files are compressed in cabinet files
    
    .Set Cabinet=on
    
    .Set Compress=on
    
    ;-------------------------------------------------------------------
    
    ;** CabinetNameTemplate = name of cab
    
    ;** DiskDirectory1 = output directory where cab will be created
    
    ;-------------------------------------------------------------------
    
    .Set CabinetNameTemplate=tt.cab
    
    .Set DiskDirectory1=.
    
    ;-------------------------------------------------------------------
    
    ; Replace <file> with actual files you want to package
    
    ;-------------------------------------------------------------------
    
    <file1>
    
    <file2>
    
    ;*** <the end>  
    
  2. makecab を使って cab ファイルを作成します。Use makecab to create the cab files.

    Makecab -f <path to DDF file>
    

アプリケーションをインストールするスクリプトを作成するCreate the script to install the application

Windows 10 バージョン 1607 以前では、アプリケーションをインストールするために必要な作業を実行するスクリプトを作成します。In Windows 10, version 1607 and earlier, create a script to perform whatever work is needed to install the application(s). 必要なインストーラーを実行するオーケストレータ スクリプトを作成しやすいように、以下の例を用意しました。The following examples are provided to help get started authoring the orchestrator script that will execute the required installers. 実際には、オーケストレータ スクリプトはこの例より多くのアセットを参照することがあります。In practice, the orchestrator script may reference many more assets than those in these examples.

Windows 10 バージョン 1703 では、オーケストレータ スクリプトを作成する必要はありません。In Windows 10, version 1703, you don’t need to create an orchestrator script. アプリごとにコマンド ラインを 1 つ作ることができます。You can have one command line per app. 必要な場合は、プロビジョニング パッケージ全体で 1 つの オーケストレータ スクリプトを作成するのではなく、後述のように、アプリごとの出力をログに記録するスクリプトを作成できます。If necessary, you can create a script that logs the output per app, as mentioned below (rather than one orchestrator script for the entire provisioning package).

注意

スクリプトにより実行されるすべてのアクションは自動的に実行されるため、UI に表示されず、ユーザーの操作も必要ありません。All actions performed by the script must happen silently, showing no UI and requiring no user interaction.

スクリプトは、システム コンテキスト内のデバイスで実行されます。The scripts will be run on the device in system context.

デバッグの例Debugging example

詳細なログ機能は組み込まれていないため、ログ機能をスクリプト自体に組み込む必要があります。Granular logging is not built in, so the logging must be built into the script itself. "Hello World" をログ ファイルに記録するスクリプト例を示します。Here is an example script that logs ‘Hello World’ to a logfile. デバイスで実行すると、ログ ファイルはプロビジョニングが完了した後に参照可能になります。When run on the device, the logfile will be available after provisioning is completed. 次の例からわかるように、スクリプトが実行する各アクションをログ記録することをお勧めします。As you will see in the following examples, it’s recommended that you log each action that your script performs.

set LOGFILE=%SystemDrive%\HelloWorld.log
echo Hello, World >> %LOGFILE% 

.exe の例.exe example

このスクリプト例は、システム ドライブでログ出力ファイルを作成する方法、.exe インストーラーからアプリをインストールする方法、結果をログ ファイルにエコーする方法を示しています。This example script shows how to create a log output file on the system drive, install an app from a .exe installer, and echo the results to the log file.

set LOGFILE=%SystemDrive%\Fiddler_install.log
echo Installing Fiddler.exe >> %LOGFILE%
fiddler4setup.exe /S >> %LOGFILE%
echo result: %ERRORLEVEL% >> %LOGFILE%

.msi の例.msi example

これは、前のインストーラーと同じですが、MSI インストーラーからアプリをインストールします。This is the same as the previous installer, but installs the app from an MSI installer. プロビジョニング パッケージ内からのスクリプト実行のサイレント要件を満たすため、msiexec は /quiet フラグを使って呼び出される点に注目してください。Notice that msiexec is called with the /quiet flag in order to meet the silent requirement of scripts run from within a provisioning package.

set LOGFILE=%SystemDrive%\IPOverUsb_install.log
echo Installing IpOverUsbInstaller.msi >> %LOGFILE%
msiexec /i IpOverUsbInstaller.msi /quiet >> %LOGFILE%
echo result: %ERRORLEVEL% >> %LOGFILE%

PowerShell の例PowerShell example

これは、プロビジョニング コマンド設定から PowerShell スクリプトを実行する方法を示す、ログ機能付きのスクリプト例です。This is an example script with logging that shows how to run a powershell script from the provisioning commands setting. この例から参照している PowerShell スクリプトをパッケージにも含める必要があり、プロビジョニング パッケージ内からのすべてのスクリプト実行と同じ要件 (ユーザー操作なしでサイレント実行する必要があります) に従う必要がある点に注意してください。Note that the PowerShell script referenced from this example must also be included in the package, and obey the same requirements as all scripts run from within the provisioning package: it must execute silently, with no user interaction.

set LOGFILE=%SystemDrive%\my_powershell_script.log
echo Running my_powershell_script.ps1 in system context >> %LOGFILE%
echo Executing "PsExec.exe -accepteula -i -s cmd.exe /c powershell.exe my_powershell_script.ps1" >> %LOGFILE%
PsExec.exe -accepteula -i -s cmd.exe /c 'powershell.exe my_powershell_script.ps1' >> %LOGFILE%
echo result: %ERRORLEVEL% >> %LOGFILE%
### .CAB からの抽出の例Extract from a .CAB example

このスクリプト例は、プロビジョニング コマンド スクリプトからの .cab の展開と、展開された setup.exe のインストールを示しています。This example script shows expansion of a .cab from the provisioning commands script, as well as installation of the expanded setup.exe

set LOGFILE=%SystemDrive%\install_my_app.log
echo Expanding installer_assets.cab >> %LOGFILE%
expand -r installer_assets.cab -F:* . >> %LOGFILE%
echo result: %ERRORLEVEL% >> %LOGFILE%
echo Installing MyApp >> %LOGFILE%
setup.exe >> %LOGFILE%
echo result: %ERRORLEVEL% >> %LOGFILE%

パッケージ内で複数のスクリプトを呼び出すCalling multiple scripts in the package

Windows 10 バージョン 1703 では、プロビジョニング パッケージに複数の CommandLine を含むことができます。In Windows 10, version 1703, your provisioning package can include multiple CommandLines.

Windows 10 バージョン 1607 以前では、プロビジョニング パッケージごとに 1 つの CommandLine を含むことができます。In Windows 10, version 1607 and earlier, you are allowed one CommandLine per provisioning package. 上に示したバッチ ファイルは、インストールを管理し、プロビジョニング パッケージに含まれている他のスクリプトを呼び出す、オーケストレータ スクリプトです。The batch files shown above are orchestrator scripts that manage the installation and call any other scripts included in the provisioning package. オーケストレータ スクリプトは、パッケージで指定された CommandLine から呼び出す必要があります。The orchestrator script is what should be invoked from the CommandLine specified in the package.

上の PowerShell の例を使ってこの関係を説明する表を以下に示します。Here’s a table describing this relationship, using the PowerShell example from above:

ICD 設定ICD Setting 設定値Value 説明Description
ProvisioningCommands/DeviceContext/CommandLineProvisioningCommands/DeviceContext/CommandLine cmd /c PowerShell_Example.batcmd /c PowerShell_Example.bat オーケストレータ スクリプトを呼び出すために必要なコマンド ライン。The command line needed to invoke the orchestrator script.
ProvisioningCommands/DeviceContext/CommandFilesProvisioningCommands/DeviceContext/CommandFiles PowerShell_Example.batPowerShell_Example.bat 必要なインストーラーの呼び出しや、cab ファイルの展開などの他のアクションの実行を処理するコマンド ラインにより参照される単一のオーケストレータ スクリプト。The single orchestrator script referenced by the command line that handles calling into the required installers or performing any other actions such as expanding cab files. このスクリプトは、必要なログ記録を行う必要があります。This script must do the required logging.
ProvisioningCommands/DeviceContext/CommandFilesProvisioningCommands/DeviceContext/CommandFiles my_powershell_script.ps1my_powershell_script.ps1 オーケストレータ スクリプトにより参照される他のアセット。Other assets referenced by the orchestrator script. この例には 1 つしかありませんが、ここでは多数のアセットが参照される可能性があります。In this example there is only one, but there could be many assets referenced here. 一般的な使用事例として、オーケストレータを使って一連の install.exe または setup.exe インストーラーを呼び出し、複数のアプリケーションをインストールする事例があります。One common use case is using the orchestrator to call a series of install.exe or setup.exe installers to install several applications. これらの各インストーラーは、ここにアセットとして含める必要があります。Each of those installers must be included as an asset here.

プロビジョニング パッケージにスクリプトを追加します (Windows 10 バージョン 1607)。Add script to provisioning package (Windows 10, version 1607)

バッチ ファイルを記述して、参照されるアセットを追加する準備ができたら、Window 構成デザイナーでプロビジョニング パッケージに追加できます。When you have the batch file written and the referenced assets ready to include, you can add them to a provisioning package in the Window Configuration Designer.

Windows 構成デザイナーを使って、プロビジョニング パッケージ内の CommandLine 設定でスクリプトを実行する必要がある完全な詳細情報を指定します。Using Windows Configuration Designer, specify the full details of how the script should be run in the CommandLine setting in the provisioning package. これには、通常コマンド ラインで入力するフラグや他のパラメーターが含まれます。This includes flags or any other parameters that you would normally type on the command line. したがって、たとえばアプリ インストーラー (install.exe) とインストールの自動化に使用されるスクリプト (InstallMyApp.bat) がパッケージに含まれていた場合、以下の処理が実行されるように ProvisioningCommands/DeviceContext/CommandLine 設定を構成する必要があります。So for example if the package contained an app installer called install.exe and a script used to automate the install called InstallMyApp.bat, the ProvisioningCommands/DeviceContext/CommandLine setting should be configured to:

cmd /c InstallMyApp.bat

Windows 構成デザイナーでは、次のようになります。In Windows Configuration Designer, this looks like:

[選択されたカスタマイズ] でのコマンド ライン

さらに、オーケストレータ スクリプトやオーケストレータ スクリプトが参照する他のアセット (インストーラーや .cab ファイルなど) など、そのコマンド ラインの関連するアセットも追加する必要があります。You also need to add the relevant assets for that command line including the orchestrator script and any other assets it references such as installers or .cab files.

Windows 構成デザイナーでは、ProvisioningCommands/DeviceContext/CommandFiles 設定にファイルを追加することで、これを行うことができます。In Windows Configuration Designer, that is done by adding files under the ProvisioningCommands/DeviceContext/CommandFiles setting.

[選択されたカスタマイズ] でのコマンド ファイル

完了したら、パッケージをビルドしますWhen you are done, build the package.

注釈Remarks

  1. ProvisioningCommands 経由では、ユーザー操作やコンソール出力がサポートされません。No user interaction or console output is supported via ProvisioningCommands. すべての作業をサイレント実行する必要があります。All work needs to be silent. スクリプトが以下のいずれかの処理を実行しようとした場合、未定義の動作が発生するため、セットアップ時や Out of Box Experience 時に実行されるとデバイスが回復不能な状態になる可能性があります。a.If your script attempts to do any of the following it will cause undefined behavior, and could put the device in an unrecoverable state if executed during setup or the Out of Box Experience: a. コンソールにエコーする b.Echo to console b. 画面に何かを表示する c.Display anything on the screen c. ダイアログまたはインストール ウィザードによってユーザーにダイアログを表示するPrompt the user with a dialog or install wizard

  2. 初回起動時に適用されると、プロビジョニングはブート シーケンスの初期かつユーザー コンテキストが確立される前に実行されます。この時点で実行できるインストーラーのみ含めるように注意してください。When applied at first boot, provisioning runs early in the boot sequence and before a user context has been established; care must be taken to only include installers that can run at this time. 他のインストーラーは、管理ツールを使ってプロビジョニングすることができます。Other installers can be provisioned via a management tool.

  3. スクリプトが正しくないためにデバイスが回復不能な状態になった場合、Windows 10 の回復オプションを使ってリセットできます。If the device is put into an unrecoverable state because of a bad script, you can reset it using recovery options in Windows 10.

  4. CommandFile アセットは、デバイス上の各パッケージに固有の一時フォルダーに展開されます。The CommandFile assets are deployed on the device to a temporary folder unique to each package.

    • Windows 10 バージョン 1607 以前: a.For Windows 10, version 1607 and earlier: a. Out Of Box Experience 時に追加されたパッケージの場合、これは通常 %WINDIR%\system32\config\systemprofile\appdata\local\Temp\ProvisioningPkgTmp\<{PackageIdGuid}>\Commands にあります。b.For packages added during the out of box experience, this is usually in %WINDIR%\system32\config\systemprofile\appdata\local\Temp\ProvisioningPkgTmp\<{PackageIdGuid}>\Commands b. 既に展開されたデバイスでダブルクリックして追加されたパッケージの場合、これは PPKG を実行するユーザーの一時フォルダーに置かれます。For packages added by double-clicking on an already deployed device, this will be in the temp folder for the user executing the PPKG: %TMP%\ProvisioningPkgTmp\<{PackageIdGuid}>\Commands
    • Windows 10 バージョン 1703 では: a.For Windows 10, version 1703: a. Out Of Box Experience 時に追加されたパッケージの場合、これは通常 %WINDIR%\system32\config\systemprofile\appdata\local\Temp\ProvisioningPkgTmp\<{PackageIdGuid}>\Commands\0 にあります。Commands\ の後の 0 は、インストール順序を示し、最初にインストールするアプリであることを示します。For packages added during the out of box experience, this is usually in %WINDIR%\system32\config\systemprofile\appdata\local\Temp\ProvisioningPkgTmp\<{PackageIdGuid}>\Commands\0 The 0 after Commands\ refers to the installation order and indicates the first app to be installed. パッケージの各アプリで、番号がインクリメントされます。The number will increment for each app in the package. b.b. 既に展開されたデバイスでダブルクリックして追加されたパッケージの場合、これはプロビジョニング パッケージを実行するユーザーの一時フォルダーに置かれます。For packages added by double-clicking on an already deployed device, this will be in the temp folder for the user executing the provisioning package: %TMP%\ProvisioningPkgTmp\<{PackageIdGuid}>\Commands\0
  5. コマンド ラインは、CommandFiles が展開されたディレクトリを作業ディレクトリとして使って実行されます。The command line will be executed with the directory the CommandFiles were deployed to as the working directory. つまり、コマンド ラインやスクリプト内でアセットの完全パスを指定する必要はありません。This means you do not need to specific the full path to assets in the command line or from within any script.

  6. ランタイム プロビジョニング コンポーネントは、プロビジョニング パッケージが追加された段階に応じて、可能な限り早い時点で PPKG からスクリプトを実行しようとします。The runtime provisioning component will attempt to run the scripts from the provisioning package at the earliest point possible, depending on the stage when the PPKG was added. たとえば、パッケージが Out-of-Box Experience 時に追加された場合、Out-of-Box Experience がまだ発生していても、パッケージが適用された直後に実行されます。For example, if the package was added during the Out-of-Box Experience, it will be run immediately after the package is applied, while the out of box experience is still happening. これは、ユーザー アカウント構成オプションがユーザーに表示される前です。This is before the user account configuration options are presented to the user. 回転する進行状況ダイアログが表示され、画面に "お待ちください" と表示されます。A spinning progress dialog will appear and “please wait” will be displayed on the screen.

    注意

    このとき、プロビジョニング プロセスは 30 秒でタイムアウトします。There is a timeout of 30 minutes for the provisioning process at this point. すべてのスクリプトとインストールは、この時間以内に完了する必要があります。All scripts and installs need to complete within this time.

  7. プロビジョニングの残りの部分が引き続き実行される間、スクリプトはバック グラウンドで実行されます。The scripts are executed in the background as the rest of provisioning continues to run. ダブルクリックを使って既存のシステムに追加されたパッケージをインストールする場合、プロビジョニングまたはスクリプトの実行が完了したことを示す通知は表示されません。For packages added on existing systems using the double-click to install, there is no notification that provisioning or script execution has completed

関連トピックRelated topics