Exécution de PowerShell SQL Server

SQL Server installe Windows PowerShell et un jeu des composants logiciels enfichables SQL Server qui présentent les fonctionnalités SQL Server dans Windows PowerShell. Vous pouvez ensuite coder les scripts Windows PowerShell qui fonctionnent avec les objets SQL Server. Les scripts peuvent être exécutés dans l'environnement Windows PowerShell, dans SQL Server Management Studio et en tant que travaux de l'Agent SQL Server.

Installation de la prise en charge de SQL Server PowerShell

Pour installer les logiciels requis afin d'exécuter des scripts Windows PowerShell, utilisez le programme d'installation de SQL Server. À compter de SQL Server 2008, le programme d'installation installe les composants Windows PowerShell suivants lorsque vous sélectionnez le logiciel client ou les nœuds des services de base de données :

  • Windows PowerShell 1.0, si Windows PowerShell n'est pas déjà présent sur votre ordinateur.

  • Les composants logiciels enfichables SQL Server. Les composants logiciels enfichables sont des fichiers DLL qui implémentent deux types de prises en charge de Windows PowerShell pour SQL Server :

    • Un jeu d'applets de commande SQL Server. Les applets de commande sont des commandes qui implémentent une action spécifique. Par exemple, Invoke-Sqlcmd exécute un script Transact-SQL ou XQuery qui peut également être exécuté à l'aide de l'utilitaire sqlcmd, et Invoke-PolicyEvaluation indique si les objets SQL Server sont conformes aux stratégies de la Gestion basée sur des stratégies.

    • Un fournisseur SQL Server. Le fournisseur vous permet de naviguer dans la hiérarchie d'objets SQL Server en utilisant un chemin d'accès semblable à un chemin d'accès de système de fichiers. Chaque objet est associé à une classe des modèles objets de gestion SQL Server. Vous pouvez utiliser les méthodes et propriétés de la classe pour effectuer des travaux sur les objets. Par exemple, si vous changez de répertoire (cd) pour accéder à un objet de bases de données dans un chemin d'accès, vous pouvez utiliser les méthodes et propriétés de la classe Microsoft.SqlServer.Managment.SMO.Database pour gérer la base de données.

  • L'utilitaire sqlps utilisé pour exécuter des sessions Windows PowerShell qui incluent les composants logiciels enfichables SQL Server.

À compter de SQL Server 2008, SQL Server Management Studio prend en charge le démarrage de sessions Windows PowerShell à partir de l'arborescence de l'Explorateur d'objets. À compter également de SQL Server 2008, l'Agent SQL Server prend en charge des étapes de travail Windows PowerShell.

Si Windows PowerShell est désinstallé au terme de la procédure d'installation, les fonctionnalités de SQL Server pour Windows PowerShell ne s'exécutent pas. Windows PowerShell peut être désinstallé par les utilisateurs Windows, et il peut être nécessaire de désinstaller Windows PowerShell pour certaines mises à niveau du système d'exploitation Windows. Si Windows PowerShell a été désinstallé et que vous souhaitez utiliser les fonctionnalités de SQL Server, vous devez effectuer l'une des opérations suivantes :

  • Télécharger et réinstaller manuellement Windows PowerShell 1.0 à partir du Centre de téléchargement Microsoft. Télécharger les instructions qui se trouvent sur le site Web Windows Server 2003.

  • Si vous exécutez Windows Server 2008, Windows PowerShell 1.0 fait partie du système d'exploitation et est désactivé par défaut. Vous pouvez réactiver Windows PowerShell à partir de Windows Server 2008.

Versions de SQL Server prises en charge

Vous devez utiliser les composants clients SQL Server 2008 pour exécuter Windows PowerShell. Windows PowerShell peut se connecter à des instances de SQL Server 2000 ou version ultérieure. La version la plus ancienne de SQL Server 2005 que vous pouvez utiliser est SP2. La version la plus ancienne de SQL Server 2000 que vous pouvez utiliser est SP4. Lorsque Windows PowerShell se connecte à SQL Server 2005 et SQL Server 2000, il est limité aux fonctionnalités disponibles dans ces versions de SQL Server.

Utilisation de l'utilitaire sqlps

sqlps est un utilitaire qui crée un environnement Windows PowerShell, puis charge et inscrit les composants logiciels enfichables SQL Server. Vous pouvez utiliser sqlps pour effectuer les tâches suivantes :

  • exécuter des commandes Windows PowerShell de façon interactive ;

  • exécuter des fichiers de script Windows PowerShell ;

  • exécuter des applets de commande SQL Server ;

  • utiliser les chemins d'accès du fournisseur SQL Server pour naviguer dans la hiérarchie des objets SQL Server.

Par défaut, sqlps s'exécute avec le niveau Restreint de la stratégie d'exécution de scripts, ce qui empêche l'exécution de tout script Windows PowerShell. Vous pouvez utiliser l'applet de commande Set-ExecutionPolicy pour activer l'exécution de scripts signés uniquement ou de tous les scripts. Exécutez uniquement des scripts provenant de sources fiables et sécurisez tous les fichiers d'entrée et de sortie en utilisant les autorisations NTFS appropriées. Pour plus d'informations sur l'activation de scripts Windows PowerShell, consultez Running Windows PowerShell Scripts (en anglais).

Pour plus d'informations, consultez Utilitaire sqlps.

Utilisation de Windows PowerShell dans SQL Server Management Studio

Vous pouvez démarrer des sessions Windows PowerShell dans SQL Server Management Studio en cliquant avec le bouton droit sur des objets dans l'Explorateur d'objets et en sélectionnant Démarrer PowerShell. SQL Server Management Studio démarre alors une session Windows PowerShell dans laquelle les composants logiciels enfichables SQL Server PowerShell ont été chargés et inscrits. Le chemin d'accès de la session est prédéfini avec l'emplacement de l'objet sur lequel vous avez cliqué avec le bouton droit dans l'Explorateur d'objets. Par exemple, si vous cliquez avec le bouton droit sur l'objet de base de données AdventureWorks2008R2 dans l'Explorateur d'objets et que vous sélectionnez Démarrer PowerShell, le chemin d'accès WindowsPowerShell est défini comme suit :

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

Utilisation de Windows PowerShell dans les étapes de travail de l'Agent SQL Server

Il y a plusieurs types d'étapes de travail de l'Agent SQL Server. Chaque type est associé à un sous-système qui implémente un environnement spécifique, tel qu'un agent de réplication ou un environnement d'invite de commandes. Le sous-système de l'Agent SQL Server pour Windows PowerShell prend en charge les étapes de travail qui exécutent des scripts Windows PowerShell. Vous pouvez coder les scripts Windows PowerShell, puis utiliser l'Agent SQL Server pour les inclure dans les travaux qui s'exécutent à des heures planifiées ou en réponse à des événements SQL Server. Le sous-système de l'Agent SQL Server charge et inscrit les composants logiciels enfichables SQL Server afin que vous puissiez exécuter les scripts Windows PowerShell.

Pour plus d'informations, consultez Sous-systèmes de l'Agent SQL Server.

AttentionAttention

Chaque étape de travail de l'Agent SQL Server lance un processus sqlps qui consomme environ 20 Mo de mémoire. L'exécution simultanée d'un grand nombre d'étapes de travail Windows PowerShell peut nuire aux performances.

Ajout des composants logiciels enfichables SQL Server à Windows PowerShell

L'utilitaire sqlps est un minishell Windows PowerShell. Les minishells sont limités par certaines restrictions. Par exemple, ils sont codés pour se charger dans un ou plusieurs composants logiciels enfichables Windows PowerShell ; toutefois, les utilisateurs et les scripts ne peuvent pas ajouter d'autres composants logiciels enfichables. Si vous avez besoin d'une fonctionnalité non prise en charge par un minishell, par exemple l'utilisation conjointe de composants logiciels enfichables SQL Server et de composants logiciels enfichables d'un autre produit, vous pouvez ajouter les composants logiciels enfichables SQL Server directement dans un environnement Windows PowerShell.

Collez le code ci-après dans le Bloc-notes et enregistrez-le sous forme de fichier de script ps1 sur votre ordinateur, par exemple C:\MyFolder\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 for Windows PowerShell is not installed."
}
else
{
    $item = Get-ItemProperty $sqlpsreg
    $sqlpsPath = [System.IO.Path]::GetDirectoryName($item.Path)
}


# Set mandatory variables for the SQL Server provider
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

Vous pouvez ensuite utiliser le script pour lancer l'environnement Windows PowerShell dans lequel les composants logiciels enfichables SQL Server sont chargés à l'aide de la commande suivante :

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

La commande peut être exécutée à partir d'une invite de commandes, d'un raccourci sur le bureau ou de la boîte de dialogue Exécuter dans le menu Démarrer. Par défaut, Windows PowerShell s'exécute en mode Restreint, lequel ne prend pas en charge l'exécution de scripts. Pour plus d'informations sur l'activation de scripts Windows PowerShell, consultez Running Windows PowerShell Scripts (en anglais).

Chargement des objets SMO (SQL Server Management Objects) dans Windows PowerShell

Le fournisseur SQL Server charge automatiquement les assemblys SMO (SQL Server Management Objects). Il existe deux cas dans lesquels vous pouvez être amené à charger les assemblys SMO directement :

  • Votre script fait référence à un objet SMO avant la première commande faisant référence au fournisseur ou aux applets de commande des composants logiciels enfichables SQL Server.

  • Vous souhaitez porter du code SMO à partir d'un autre langage, par exemple C# ou VB.Net, qui n'utilise pas le fournisseur ou les applets de commande.

Le code suivant charge les assemblys 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 for Windows PowerShell is not installed."
}
else
{
    $item = Get-ItemProperty $sqlpsreg
    $sqlpsPath = [System.IO.Path]::GetDirectoryName($item.Path)
}


$assemblylist = 
"Microsoft.SqlServer.Management.Common",
"Microsoft.SqlServer.Smo",
"Microsoft.SqlServer.Dmf ",
"Microsoft.SqlServer.Instapi ",
"Microsoft.SqlServer.SqlWmiManagement ",
"Microsoft.SqlServer.ConnectionInfo ",
"Microsoft.SqlServer.SmoExtended ",
"Microsoft.SqlServer.SqlTDiagM ",
"Microsoft.SqlServer.SString ",
"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",
"Microsoft.SqlServer.Management.Dac",
"Microsoft.SqlServer.Management.DacEnum",
"Microsoft.SqlServer.Management.Utility"


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

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