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

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

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

前提条件

スクリプトの実行を有効にするには、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.jsを変更する必要があります。 パッケージ化されたアプリケーションの実行前にスクリプトを実行するように PSF に指示するには、という構成項目を追加し startScript ます。 パッケージ化されたアプリケーションの終了後にスクリプトを実行するように PSF に指示するには、という構成項目を追加 endScript します。

構成項目のスクリプトを作成

スクリプトで使用できる構成項目を次に示します。 終了スクリプトは、 waitForScriptToFinish および構成項目を無視し stopOnScriptError ます。

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

注意

stopOnScriptError: true waitForScriptToFinish: 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)
  ]
}