Mim

Select * from Seb where Sujets in (SQL Server 2008, ADO.NET, Visual Studio 2008)

PowerShell : Provider Sql Server

Je me suis mis récemment à PowerShell, spécialement orienté vers SQL SERVER.

Lors de l’installation de SQL SERVER 2008, vous avez installé deux choses concernant SQL SERVER et Powershell

  1. Le provider SQL SERVER
  2. Les commandes applets (cmdlets) pour SQL SERVER (au nombre ridiculement petit de … 4)

Le provider sert en substance à naviguer dans votre serveur SQL SERVER comme si celui ci était un simple explorateur de fichier.

A base de commandes Dir, Cd etc … vous pourrez donc naviguer dans vos bases de données, vos tables etc …

Le provider nous donne aussi accès à l’ensemble des objets .Net associés à SQL SERVER, sous la forme de la bibliothèque SMO

Les commandes sont de simples raccourcis, vers des fonctions clés de SQL SERVER 2008

On en compte peu, les commandes utiles de la vie quotidienne pour SQL SERVER feront leur apparition au fur et à mesure (dixit MS)

Une commande utile par exemple : Invoke-SqlCmd qui nous permet d’invoquer SqlCmd et faire un ensemble d’opérations équivalentes.

Le lancement de Powershell pour SQL Server

Depuis SQL SERVER 2008

Première chose, PowerShell est intégré à SQL Server 2008 sous la forme d’un minishell.

Il faut savoir que le provider SQL SERVER pour Powershell ainsi que les Cmdlets ne sont pas chargés de base dans Powershell.

C’est d’ailleurs une règle de base pour Powershell : Les providers tiers et les commandes supplémentaires ne sont pas directement chargées dans Powershell à son lancement.

le minishell de SQL SERVER 2008 contient biensur les provider ainsi que les commandes SQL SERVER.

Lancez le minshell Powershell depuis SQL SERVER 2008 :

image

Celui ci va vous lancer PowerShell avec le provider et les commandes pré chargées, et vous placera directement sur le noeud en cours :

image

 

Le truc intéressant c’est que chaque noeud sur lequel vous vous placez, vous renvoie un objet .NET SMO. Fantastique technologie que Powershell :)

 

Depuis Powershell (himself)

Vous pouvez aussi lancer Powershell depuis votre menu démarrer. Powershell s’ouvre dans une interface bleuté du plus bel effet.

image

La différence à part ce joli fond … bleu ?

Le provider SQLSERVER ainsi que les commandes ne sont pas chargées.

Vous avez biensur la possibilité de charger ces addins pour SQL Server.

Powershell peut même vous indiquer quels sont les snap-ins (provider et commandes) qui sont enregistrés sur votre machine et qu’il est capable de monter

Get-PSSnapin -Registered

image

Il ne reste plus qu’à charger ces deux snap’in via la commande Add-PSSnapin:

Add-PSSnapin SqlServerCmdletSnapin100 Add-PSSnapin SqlServerProviderSnapin100

Voilà c’est fait :)

Il ne reste plus qu’à se positionner sur le noeud Sql Server. Comme un lecteur de fichier !

cd SqlServer:\SQL\Mim\sql2008

image

Ma façon à moi

Pour ma part, je préfère la deuxième méthode. Ca me permet de créer des scripts exécutables directement depuis Powershell.

Par contre monter les snap’ins SQL SERVER ne montent pas toutes les assemblies SMO. Uniquement les assemblies utilisées par le provider SQLSERVERPROVIDER.

Mais rien ne vous empêche de le faire vous même !

Je vous conseille donc ce script : Sql Server Powershell Start Script qui non seulement monte les snap’ins SQL SERVER mais aussi l’ensemble des assemblies SMO.

Un petit exemple en passant de ce qu’on est capable de faire sur un noeud Database (pour rappel on récupère un objet SMO DataBase)

$db = Get-Item . $bTable = $db.EnumBackupSets() foreach ($bRow in $bTable.Rows){ $bRow | Format-Table -Property Name, ID, ServerName, BackupStartDate }

$db récupère l’objet en cours (cf une database)

$bTable récupère une Datatable (si si en powershell :)) des backups de la base de données

$bRow recupère la ligne en cours

Format-Table : affiche sous format table les propriétés énumérées (Name, ID, ServerName, BackupStartDate)

Le résultat en image :

image

Bon scripting avec PowerShell :)