パッケージ サポート フレームワークを使用してスクリプトを実行する

スクリプトを使用すると、IT プロは MSIX を使用してパッケージ化された後、ユーザーの環境に合わせてアプリケーションを動的にカスタマイズできます。 たとえば、スクリプトを使用して、データベースの構成、VPN の設定、共有ドライブのマウント、またはライセンス チェックを動的に実行できます。 スクリプトは、多くの柔軟性を提供します。 レジストリ キーを変更したり、コンピューターまたはサーバーの構成に基づいてファイルの変更を実行したりする場合があります。

パッケージ サポート フレームワーク (PSF) を使用して、パッケージ アプリケーション実行可能ファイルを実行する前に 1 つの PowerShell スクリプトを実行し、アプリケーション実行可能ファイルの実行後に 1 つの PowerShell スクリプトを実行してクリーンアップすることができます。 アプリケーション マニフェストで定義されている各アプリケーション実行可能ファイルには、独自のスクリプトを含めることができます。 ユーザーが誤ってスクリプトを途中で終了しないよう、最初のアプリの起動時のみ PowerShell ウィンドウを表示せずに 1 回だけ実行するようスクリプトを構成できます。 次に示すように、スクリプトの実行方法を構成する他のオプションがあります。

前提条件

スクリプトを実行するには、PowerShell 実行ポリシーを RemoteSigned に設定する必要があります。 これを行うには、次のコマンドを実行します。

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned

実行ポリシーは、64 ビット PowerShell 実行可能ファイルと 32 ビット PowerShell 実行可能ファイルの両方に設定する必要があります。 PowerShell の各バージョンを開き、上記のいずれかのコマンドを実行してください。

各実行可能ファイルの場所を次に示します。

  • 64 ビット コンピューター:
    • 64 ビット実行可能ファイル: %SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe
    • 32 ビット実行可能ファイル:%SystemRoot%\SysWOW64\WindowsPowerShell\v1.0\powershell.exe
  • 32 ビット コンピューターの場合:
    • 32 ビット実行可能ファイル: %SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe

PowerShell 実行ポリシーの詳細については、この記事 を参照してください。

🚩また、パッケージに StartingScriptWrapper.ps1 ファイルを含め、実行可能ファイルと同じフォルダーに配置してください。 このファイルは PSF NuGet パッケージ または PSF Github リポジトリ からコピーできます。

スクリプトを有効にする

パッケージ化されたアプリケーション実行可能ファイルごとに実行するスクリプトを指定するには、config.json ファイルを変更する必要があります。 パッケージ化されたアプリケーションの実行前にスクリプトを実行するよう PSF に指定するには、startScript という構成項目を追加します。 パッケージ化されたアプリケーションの完了後にスクリプトを実行するよう PSF に指定するには、endScript という構成項目を追加します。

スクリプト構成項目

スクリプトで使用できる構成項目を次に示します。 終了スクリプトは waitForScriptToFinishstopOnScriptError 構成項目を無視します。

キー名 値の種類 必須 Default 説明
scriptPath string はい 該当なし 名前と拡張子を含むスクリプトへのパス。 パスは、指定されている場合はアプリケーションの作業ディレクトリに対して相対的です。指定されていない場合は、パッケージのルート ディレクトリから開始されます。
scriptArguments string いいえ empty スペース区切り引数リスト。 PowerShell スクリプト呼び出しの形式は同じです。 この文字列は scriptPath に追加され、有効な PowerShell.exe を呼び出します。
runInVirtualEnvironment boolean いいえ true パッケージ化されたアプリケーションが実行されているのと同じ仮想環境でスクリプトを実行するかどうかを指定します。
runOnce boolean いいえ true スクリプトをユーザーごと、バージョンごとに1回実行するかどうかを指定します。
showWindow boolean いいえ false PowerShell ウィンドウを表示するかどうかを指定します。
stopOnScriptError boolean いいえ false 開始スクリプトが失敗した場合にアプリケーションを終了するかどうかを指定します。
waitForScriptToFinish boolean いいえ true パッケージ化されたアプリケーションが、開始前に開始スクリプトが完了するまで待機するかどうかを指定します。
timeout DWORD いいえ 無限 スクリプトの実行が許可される期間。 時間が経過すると、スクリプトは停止されます。

Note

サンプル アプリケーションの stopOnScriptError: truewaitForScriptToFinish: false の設定はサポートしていません。 これらの両方の構成項目を設定すると、PSF は ERROR_BAD_CONFIGURATION というエラー メッセージを返します。

サンプル構成

2 つの異なるアプリケーション実行可能ファイルを使用した構成例を次に示します。

{
  "applications": [
    {
      "id": "Sample",
      "executable": "Sample.exe",
      "workingDirectory": "",
      "stopOnScriptError": false,
      "startScript":
      {
        "scriptPath": "RunMePlease.ps1",
        "scriptArguments": "\\\"First argument\\\" secondArgument",
        "runInVirtualEnvironment": true,
        "showWindow": true,
        "waitForScriptToFinish": false
      },
      "endScript":
      {
        "scriptPath": "RunMeAfter.ps1",
        "scriptArguments": "ThisIsMe.txt"
      }
    },
    {
      "id": "CPPSample",
      "executable": "CPPSample.exe",
      "workingDirectory": "",
      "startScript":
      {
        "scriptPath": "CPPStart.ps1",
        "scriptArguments": "ThisIsMe.txt",
        "runInVirtualEnvironment": true
      },
      "endScript":
      {
        "scriptPath": "CPPEnd.ps1",
        "scriptArguments": "ThisIsMe.txt",
        "runOnce": false
      }
    }
  ],
  "processes": [
    ...(taken out for brevity)
  ]
}