Eseguire passaggi di Windows PowerShell in SQL Server Agent

Si applica a: SQL Server Not supported. Database SQL di Azure Azure Synapse Analytics Piattaforma di strumenti analitici (PDW)

Usare SQL Server Agent per eseguire gli script di SQL Server PowerShell in orari pianificati.

Nota

Esistono due moduli SQL Server PowerShell: SqlServer e SQLPS.

SqlServer è il modulo corrente di PowerShell da usare.

SQLPS è incluso nell'installazione di SQL Server (per compatibilità con le versioni precedenti), ma non viene più aggiornato.

Il modulo SqlServer contiene le versioni aggiornate dei cmdlet di SQLPS e include nuovi cmdlet per il supporto delle funzionalità SQL più recenti.

Installare il modulo SqlServer da PowerShell Gallery.

Per altre informazioni, vedere SQL Server PowerShell.

A partire da SQL Server 2019, è possibile disabilitare SQLPS. Nella prima riga di un passaggio di processo di tipo PowerShell è possibile aggiungere #NOSQLPS per impedire a SQL Agent di caricare automaticamente il modulo SQLPS. A questo punto, il processo di SQL Agent esegue la versione di PowerShell installata nel computer e quindi è possibile usare qualsiasi altro modulo di PowerShell desiderato.

Per usare il modulo SqlServer nel passaggio del processo di SQL Agent, inserire il codice nelle prime due righe dello script.

#NOSQLPS
Import-Module -Name SqlServer

Eseguire PowerShell da SQL Server Agent

Sono disponibili molti tipi di passaggi del processo di SQL Server Agent. Ogni tipo è associato a un sottosistema che implementa un ambiente specifico, ad esempio un agente di replica o un ambiente del prompt dei comandi. È possibile codificare gli script di Windows PowerShell, quindi usare SQL Server Agent per includere gli script nei processi eseguiti in base a orari pianificati o in risposta a eventi di SQL Server. È possibile eseguire gli script di Windows PowerShell con un passaggio del processo del prompt dei comandi o di PowerShell.

  • Usare un passaggio del processo di PowerShell per fare in modo che il sottosistema SQL Server Agent esegua l'utilità sqlps, che avvia PowerShell e importa il modulo sqlps. Se si esegue SQL Server 2019 o versioni successive, è consigliabile usare il modulo SqlServer nel passaggio del processo di SQL Agent.

  • Usare un passaggio del processo del prompt dei comandi per eseguire PowerShell.exe e specificare uno script che importa il modulo sqlps .

Attenzione al consumo di memoria

Ogni passaggio del processo di SQL Server Agent che esegue PowerShell con il modulo sqlps avvia un processo che usa circa 20 MB di memoria. L'esecuzione simultanea di numerosi passaggi del processo di Windows PowerShell può avere un impatto negativo sulle prestazioni.

Creare un passaggio del processo di PowerShell

Creare un passaggio del processo di PowerShell

  1. Espandere SQL Server Agent, creare un nuovo processo oppure fare clic con il pulsante destro del mouse su un processo esistente e quindi selezionare Proprietà. Per ulteriori informazioni sulla creazione di un processo, vedere Creazione di processi.

  2. Nella finestra di dialogo Proprietà processo selezionare la pagina Passaggi e quindi Nuovo.

  3. Nella finestra di dialogo Nuovo passaggio di processo digitare il nome del passaggio del processo nella casella Nome passaggio.

  4. Nell'elenco Tipo selezionare PowerShell.

  5. Nell'elenco Esegui come selezionare l'account proxy con le credenziali che verranno utilizzate dal processo.

  6. Nella casella Comando immettere la sintassi dello script di PowerShell che verrà eseguito per il passaggio di processo. In alternativa, scegliere Apri e selezionare un file contenente la sintassi dello script.

  7. Selezionare la pagina Avanzate per impostare le opzioni seguenti relative al passaggio di processo: l'azione da eseguire in caso di esito positivo o negativo del passaggio, il numero di tentativi di esecuzione del passaggio che devono essere effettuati da SQL Server Agent e gli intervalli tra tentativi successivi.

Creare un passaggio del processo del prompt dei comandi

Creare un passaggio di processo CmdExec

  1. Espandere SQL Server Agent, creare un nuovo processo oppure fare clic con il pulsante destro del mouse su un processo esistente e quindi selezionare Proprietà. Per ulteriori informazioni sulla creazione di un processo, vedere Creazione di processi.

  2. Nella finestra di dialogo Proprietà processo selezionare la pagina Passaggi e quindi Nuovo.

  3. Nella finestra di dialogo Nuovo passaggio di processo digitare il nome del passaggio del processo nella casella Nome passaggio.

  4. Nell'elenco Tipo selezionare Sistema operativo (CmdExec).

  5. Nell'elenco Esegui come selezionare l'account proxy con le credenziali che verranno utilizzate dal processo. Per impostazione predefinita, questi passaggi di processo vengono eseguiti nel contesto dell'account di servizio SQL Server Agent.

  6. Nella casella Elabora codice di uscita di un comando eseguito correttamente digitare un valore compreso tra 0 e 999999.

  7. Nella casella Comando, immettere comandi che iniziano con PowerShell.exe con parametri che specificano lo script di PowerShell da eseguire. Questi esempi sono simili alla sintassi per l'esecuzione di comandi di PowerShell da un prompt dei comandi di Windows. Fare riferimento a PowerShell.exe -? per tutte le opzioni di sintassi possibili.

    • Esempio 1: esegue un cmdlet semplice.
         PowerShell.exe -Command "Get-Date"
      
    • Esempio 2: esegue una query tramite SQLCmd.exe sul server corrente (nell'esempio viene usata la sostituzione del token SQL Agent).
         PowerShell.exe -Command "sqlcmd.exe -S $(ESCAPE_NONE(SRVR)) -Q 'SELECT @@VERSION'"
      
    • Esempio 3: esegue uno script di PowerShell (usando pwsh.exe, il nome eseguibile in PowerShell 7.0, che deve essere installato nel server). Si noti che il percorso dello script si trova in locale nel server in cui è in esecuzione SQL Agent.
         PWSH.exe -ExecutionPolicy RemoteSigned -File X:\MyScripts\script001.ps1 
      
  8. Selezionare la pagina Avanzate per impostare le opzioni del passaggio di processo, ad esempio l'azione che verrà eseguita se il passaggio di processo ha esito positivo o negativo, il numero di tentativi di esecuzione del passaggio che verranno eseguiti da SQL Server Agent e il file in cui SQL Server Agent scriverà l'output del passaggio di processo. L'output del passaggio di processo può essere scritto in un file di sistema unicamente dai membri del ruolo predefinito del server sysadmin .

Vedi anche