スクリプトを使用すると、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という構成項目を追加します。
スクリプト構成項目
スクリプトで使用できる構成項目を次に示します。 終了スクリプトは、 waitForScriptToFinish および stopOnScriptError 構成項目を無視します。
| キー名 | 値の種類 | 必須ですか? | 既定値 | 説明 |
|---|---|---|---|---|
scriptPath |
文字列 | イエス | なし | 名前と拡張機能を含むスクリプトへのパス。 パスは、指定されている場合はアプリケーションの作業ディレクトリに対する相対パスです。それ以外の場合は、パッケージのルート ディレクトリから開始されます。 |
scriptArguments |
文字列 | いいえ | 空 | スペースで区切られた引数リスト。 形式は、PowerShell スクリプト呼び出しでも同じです。 この文字列は、有効な PowerShell.exe 呼び出しを行うために scriptPath に追加されます。 |
runInVirtualEnvironment |
ブーリアン | いいえ | ほんとう | パッケージ化されたアプリケーションが実行されているのと同じ仮想環境でスクリプトを実行するかどうかを指定します。 |
runOnce |
ブーリアン | いいえ | ほんとう | スクリプトをユーザーごとに、バージョンごとに 1 回実行するかどうかを指定します。 |
showWindow |
ブーリアン | いいえ | 偽り | PowerShell ウィンドウを表示するかどうかを指定します。 |
stopOnScriptError |
ブーリアン | いいえ | 偽り | 開始スクリプトが失敗した場合にアプリケーションを終了するかどうかを指定します。 |
waitForScriptToFinish |
ブーリアン | いいえ | ほんとう | パッケージ化されたアプリケーションが開始スクリプトの終了を待機してから開始するかどうかを指定します。 |
timeout |
ダブルワード | いいえ | 無限 | スクリプトの実行が許可される期間。 時間が経過すると、スクリプトが停止します。 |
注
サンプル アプリケーションの 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)
]
}