Condividi tramite


Esecuzione di SQL Server PowerShell

Con SQL Server 2008 vengono installati Windows PowerShell e un set di snap-in di SQL Server che espongono le funzionalità di SQL Server in Windows PowerShell. È quindi possibile codificare gli script di Windows PowerShell che funzionano con gli oggetti di SQL Server. Gli script possono essere eseguiti nell'ambiente di Windows PowerShell, in SQL Server Management Studio e come processi di SQL Server Agent.

Installazione del supporto di SQL Server

Il software necessario per l'esecuzione degli script di Windows PowerShell viene installato tramite il programma di installazione di SQL Server. Tramite il programma di installazione di SQL Server 2008 vengono installati i componenti di Windows PowerShell seguenti quando si selezionano i nodi Servizi di database o il software client:

  • Windows PowerShell 1.0, se Windows PowerShell non è già presente nel computer.

  • Snap-in di SQL Server. Gli snap-in sono file DLL che implementano due tipi di supporto di Windows PowerShell per SQL Server:

    • Set di cmdlet di SQL Server. I cmdlet sono comandi che implementano un'azione specifica, ad esempio Invoke-Sqlcmd esegue uno script Transact-SQL o XQuery che può essere eseguito anche tramite l'utilità sqlcmd, mentre Invoke-PolicyEvaluation segnala se gli oggetti di SQL Server sono conformi ai criteri di gestione basata su criteri.

    • Provider SQL Server. Il provider consente di spostarsi nella gerarchia degli oggetti di SQL Server utilizzando un percorso simile a un percorso del file system. Ciascun oggetto è associato a una classe dei modelli SMO (SQL Server Management Objects). È possibile utilizzare i metodi e le proprietà della classe per eseguire azioni sugli oggetti. Utilizzando il comando cd su un oggetto di database in un percorso, è ad esempio possibile utilizzare i metodi e le proprietà della classe Microsoft.SqlServer.Management.SMO.Database per gestire il database.

  • Utilità sqlps, utilizzata per eseguire sessioni di Windows PowerShell che includono gli snap-in di SQL Server.

La versione di SQL Server 2008 di SQL Server Management Studio supporta l'avvio delle sessioni di Windows PowerShell dall'albero di Esplora oggetti. La versione di SQL Server 2008 di SQL Server Agent supporta i passaggi del processo di Windows PowerShell.

Se Windows PowerShell viene disinstallato al termine del programma di installazione, le funzionalità di SQL Server per Windows PowerShell non potranno essere utilizzate. Windows PowerShell può essere disinstallato dagli utenti di Windows. La disinstallazione di Windows PowerShell potrebbe inoltre essere necessaria per eseguire alcuni aggiornamenti del sistema operativo Windows. Se Windows PowerShell è stato disinstallato e si desidera utilizzare le funzionalità di SQL Server di cui dispone, è necessario effettuare una delle operazioni seguenti:

  • Scaricare e reinstallare manualmente Windows PowerShell 1.0 dall'Area download Microsoft. Le istruzioni per il download sono disponibili sul sito Web di Windows Server 2003.

  • Se è in esecuzione Windows Server 2008, Windows PowerShell 1.0 è presente nel sistema operativo ma risulta disabilitato per impostazione predefinita. È possibile riabilitare Windows PowerShell da Windows Server 2008.

Versioni di SQL Server supportate

È necessario utilizzare i componenti client di SQL Server 2008 per eseguire le funzionalità di SQL Server per Windows PowerShell. Il provider SQL Server per Windows PowerShell è in grado di eseguire connessioni a istanze di SQL Server 2008, SQL Server 2005 o SQL Server 2000. La versione meno recente di SQL Server 2005 che è possibile utilizzare è SP2. La versione meno recente di SQL Server 2000 che è possibile utilizzare è SP4. Quando il provider SQL Server esegue una connessione a SQL Server 2005 e SQL Server 2000, è limitato alle funzionalità disponibili in quelle versioni di SQL Server.

Utilizzo dell'utilità sqlps

sqlps è un'utilità che consente di creare un ambiente di Windows PowerShell, quindi di caricare e registrare gli snap-in di SQL Server. È possibile utilizzare sqlps per:

  • Eseguire in modo interattivo comandi di Windows PowerShell.

  • Eseguire file script di Windows PowerShell.

  • Eseguire cmdlet di SQL Server.

  • Utilizzare i percorsi del provider SQL Server per spostarsi nella gerarchia degli oggetti di SQL Server.

Per impostazione predefinita, sqlps viene eseguito con i criteri di esecuzione degli script impostati su Restricted che impediscono l'esecuzione degli script di Windows PowerShell. È possibile utilizzare il cmdlet Set-ExecutionPolicy per abilitare l'esecuzione di script firmati o di qualsiasi script. Eseguire solo script da fonti attendibili e proteggere tutti i file di input e output utilizzando le autorizzazioni NTFS appropriate. Per ulteriori informazioni sull'abilitazione degli script di Windows PowerShell, vedere Running Windows.

Per ulteriori informazioni, vedere Utilità sqlps.

Utilizzo di Windows PowerShell in SQL Server Management Studio

È possibile avviare sessioni di Windows PowerShell in SQL Server Management Studio facendo clic con il pulsante destro del mouse sugli oggetti in Esplora oggetti e scegliendo Avvia PowerShell. In SQL Server Management Studio viene quindi avviata una sessione di Windows PowerShell in cui sono stati caricati e registrati gli snap-in di SQL Server. Il percorso della sessione è preimpostato sul percorso dell'oggetto su cui si è fatto clic con il pulsante destro del mouse in Esplora oggetti. Ad esempio, facendo clic con il pulsante destro del mouse sull'oggetto del database AdventureWorks in Esplora oggetti e selezionando Avvia PowerShell, il percorso di Windows PowerShell viene impostato come segue:

SQLSERVER:\SQL\MyComputer\MyInstance\Databases\AdventureWorks>

Utilizzo di Windows PowerShell nei passaggi del processo di 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. Il sottosistema Windows PowerShell di SQL Server Agent supporta i passaggi del processo che eseguono gli script di Windows PowerShell. È possibile codificare gli script di Windows PowerShell, quindi utilizzare SQL Server Agent per includere gli script nei processi eseguiti in base a orari pianificati o in risposta a eventi di SQL Server. Il sottosistema Windows PowerShell di SQL Server Agent consente di caricare e registrare gli snap-in di SQL Server in modo che sia possibile eseguire gli script di Windows PowerShell.

Per ulteriori informazioni, vedere Sottosistemi di SQL Server Agent.

Nota di attenzioneAttenzione

Ciascun passaggio del processo di Windows PowerShell per SQL Server Agent avvia un processo sqlps che utilizza circa 20 MB di memoria. L'esecuzione simultanea di numerosi passaggi del processo di Windows PowerShell può avere un impatto negativo sulle prestazioni.

Aggiunta di snap-in di SQL Server in Windows PowerShell

L'utilità sqlps è una minishell di Windows PowerShell. Alle minishell si applicano alcune restrizioni. Le minishell, ad esempio, sono codificate per il caricamento in uno o più snap-in di Windows PowerShell, ma gli utenti e gli script non possono aggiungere altri snap-in. Se è necessaria una funzionalità non supportata da una minishell, ad esempio l'utilizzo degli snap-in di SQL Server insieme a quelli di altri produttori, è possibile aggiungere gli snap-in di SQL Server direttamente in un ambiente di Windows PowerShell.

Incollare il codice seguente nel Blocco note e salvarlo come file di script con estensione ps1 nel computer, ad esempio in C:\Cartella\InitializeSQLProvider.ps1:

# Add the SQL Server provider.

$ErrorActionPreference = "Stop"

$sqlpsreg="HKLM:\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.SqlServer.Management.PowerShell.sqlps"

if (Get-ChildItem $sqlpsreg -ErrorAction "SilentlyContinue")
{
    throw "SQL Server Provider is not installed."
}
else
{
    $item = Get-ItemProperty $sqlpsreg
    $sqlpsPath = [System.IO.Path]::GetDirectoryName($item.Path)
}


# Set mandatory variables for the SQL Server rovider
Set-Variable -scope Global -name SqlServerMaximumChildItems -Value 0
Set-Variable -scope Global -name SqlServerConnectionTimeout -Value 30
Set-Variable -scope Global -name SqlServerIncludeSystemObjects -Value $false
Set-Variable -scope Global -name SqlServerMaximumTabCompletion -Value 1000

# Load the snapins, type data, format data
Push-Location
cd $sqlpsPath
Add-PSSnapin SqlServerCmdletSnapin100
Add-PSSnapin SqlServerProviderSnapin100
Update-TypeData -PrependPath SQLProvider.Types.ps1xml 
update-FormatData -prependpath SQLProvider.Format.ps1xml 
Pop-Location

È quindi possibile utilizzare lo script per avviare l'ambiente di Windows PowerShell in cui vengono caricati gli snap-in di SQL Server tramite il comando seguente:

PowerShell -NoExit -Command "C:\MyFolder\InitializeSQLProvider.ps1"

Il comando può essere eseguito da un prompt dei comandi, da un collegamento sul desktop o dalla finestra di dialogo Esegui disponibile tramite il menu Start. Per impostazione predefinita, Windows PowerShell viene eseguito in modalità limitata che non supporta l'esecuzione di script. Per ulteriori informazioni sull'abilitazione degli script di Windows PowerShell, vedere Running Windows.

Caricamento di SQL Server Management Objects in Windows PowerShell

Il provider SQL Server carica automaticamente gli assembly SQL Server Management Objects (SMO). Nei due casi seguenti potrebbe essere necessario caricare direttamente gli assembly SMO:

  • Lo script fa riferimento a un oggetto SMO prima del primo comando che fa riferimento al provider o ai cmdlet dagli snap-in di SQL Server.

  • Si desidera eseguire il porting del codice SMO da un altro linguaggio, ad esempio C# o VB.Net, che non utilizza il provider o i cmdlet.

Il codice seguente consente di caricare gli assembly SMO.

# Loads the SQL Server Management Objects (SMO)

$ErrorActionPreference = "Stop"

$sqlpsreg="HKLM:\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.SqlServer.Management.PowerShell.sqlps"

if (Get-ChildItem $sqlpsreg -ErrorAction "SilentlyContinue")
{
    throw "SQL Server Provider is not installed."
}
else
{
    $item = Get-ItemProperty $sqlpsreg
    $sqlpsPath = [System.IO.Path]::GetDirectoryName($item.Path)
}


$assemblylist = 
"Microsoft.SqlServer.Smo",
"Microsoft.SqlServer.Dmf ",
"Microsoft.SqlServer.SqlWmiManagement ",
"Microsoft.SqlServer.ConnectionInfo ",
"Microsoft.SqlServer.SmoExtended ",
"Microsoft.SqlServer.Management.RegisteredServers ",
"Microsoft.SqlServer.Management.Sdk.Sfc ",
"Microsoft.SqlServer.SqlEnum ",
"Microsoft.SqlServer.RegSvrEnum ",
"Microsoft.SqlServer.WmiEnum ",
"Microsoft.SqlServer.ServiceBrokerEnum ",
"Microsoft.SqlServer.ConnectionInfoExtended ",
"Microsoft.SqlServer.Management.Collector ",
"Microsoft.SqlServer.Management.CollectorEnum"


foreach ($asm in $assemblylist)
{
    $asm = [Reflection.Assembly]::LoadWithPartialName($asm)
}

Push-Location
cd $sqlpsPath
update-FormatData -prependpath SQLProvider.Format.ps1xml 
Pop-Location

Cronologia modifiche

Aggiornamento del contenuto

Eliminazione della sezione Utilizzo dell'ambiente di Windows PowerShell. Aggiunta di due nuove sezioni: Aggiunta di snap-in di SQL Server in Windows Powershell e Caricamento di SQL Server Management Objects in Windows PowerShell.