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
- Le provider SQL SERVER
- 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 :
Celui ci va vous lancer PowerShell avec le provider et les commandes pré chargées, et vous placera directement sur le noeud en cours :
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.
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
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
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 :

Bon scripting avec PowerShell :)