Eseguire script con Package Support Framework

Gli script consentono ai professionisti IT di personalizzare un'applicazione in modo dinamico nell'ambiente dell'utente dopo che è stata inserita in un pacchetto con MSIX. Ad esempio, è possibile usare script per configurare il database, configurare una VPN, montare un'unità condivisa o eseguire un controllo di licenza in modo dinamico. Gli script offrono una notevole flessibilità. Possono modificare le chiavi del Registro di sistema o eseguire modifiche ai file in base alla configurazione del computer o del server.

È possibile usare Package Support Framework (PSF) per eseguire uno script di PowerShell prima dell'esecuzione di un eseguibile di un'applicazione in pacchetto e uno script di PowerShell dopo l'esecuzione dell'eseguibile dell'applicazione per la pulizia. Ogni eseguibile dell'applicazione definito nel manifesto dell'applicazione può avere script specifici. È possibile configurare lo script per l'esecuzione una sola volta al primo avvio dell'app e senza visualizzare la finestra di PowerShell in modo che gli utenti non finiranno lo script prematuramente per errore. Sono disponibili altre opzioni per configurare il modo in cui gli script possono essere eseguiti, come illustrato di seguito.

Prerequisiti

Per abilitare l'esecuzione degli script, è necessario impostare i criteri di esecuzione di PowerShell su RemoteSigned. A tale scopo, eseguire questo comando:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned

I criteri di esecuzione devono essere impostati sia per l'eseguibile di PowerShell a 64 bit che per il file eseguibile di PowerShell a 32 bit. Assicurarsi di aprire ogni versione di PowerShell ed eseguire uno dei comandi illustrati in precedenza.

Ecco i percorsi di ogni eseguibile.

  • Computer a 64 bit:
    • Eseguibile a 64 bit: %SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe
    • Eseguibile a 32 bit: %SystemRoot%\SysWOW64\WindowsPowerShell\v1.0\powershell.exe
  • Computer a 32 bit:
    • Eseguibile a 32 bit: %SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe

Per altre informazioni sui criteri di esecuzione di PowerShell, vedere questo articolo.

🚩 Assicurarsi di includere anche il file StartingScriptWrapper.ps1 nel pacchetto e inserirlo nella stessa cartella del file eseguibile. È possibile copiare questo file dal pacchetto NuGet PSF o dal repository GitHub PSF.

Abilitare gli script

Per specificare gli script che verranno eseguiti per ogni eseguibile dell'applicazione in pacchetto, è necessario modificare il file config.json. Per indicare a PSF di eseguire uno script prima dell'esecuzione dell'applicazione in pacchetto, aggiungere un elemento di configurazione denominato startScript. Per indicare a PSF di eseguire uno script al termine dell'applicazione in pacchetto, aggiungere un elemento di configurazione denominato endScript.

Elementi di configurazione script

Di seguito sono riportati gli elementi di configurazione disponibili per gli script. Lo script finale ignora gli elementi di waitForScriptToFinish configurazione e stopOnScriptError .

Nome chiave Tipo di valore Obbligatorio? Valore predefinito Descrizione
scriptPath string N/D Percorso dello script che include il nome e l'estensione. Il percorso è relativo alla directory di lavoro dell'applicazione, se specificato, in caso contrario, inizia nella directory radice del pacchetto.
scriptArguments string No empty Elenco di argomenti delimitati da spazi. Il formato è lo stesso per una chiamata di script di PowerShell. Questa stringa viene aggiunta a scriptPath per effettuare una chiamata di PowerShell.exe valida.
runInVirtualEnvironment boolean No true Specifica se lo script deve essere eseguito nello stesso ambiente virtuale in cui viene eseguita l'applicazione in pacchetto.
runOnce boolean No true Specifica se lo script deve essere eseguito una sola volta per utente, per versione.
showWindow boolean No falso Specifica se viene visualizzata la finestra di PowerShell.
stopOnScriptError boolean No falso Specifica se uscire dall'applicazione se lo script iniziale ha esito negativo.
waitForScriptToFinish boolean No true Specifica se l'applicazione in pacchetto deve attendere il completamento dello script iniziale prima dell'avvio.
timeout DWORD No INFINITE Durata dell'esecuzione dello script. Al termine del tempo, lo script verrà arrestato.

Nota

L'impostazione stopOnScriptError: true e waitForScriptToFinish: false per l'applicazione di esempio non è supportata. Se si impostano entrambi questi elementi di configurazione, PSF restituirà l'errore ERROR_BAD_CONFIGURATION.

Configurazione di esempio

Di seguito è riportato un esempio di configurazione che usa due file eseguibili dell'applicazione diversi.

{
  "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)
  ]
}