Conseils et formations : vos deux atouts pour réussir !
Accueil > DBA > Articles

 ‭(Masqué)‬ WebPart1 Web Part

/DBA/Powershell pour SQLServer2008/
Powershell pour SQLServer2008

Powershell ?

Un langage de script digne successeur de nos commandes DOS.

Sa parfaite intégration avec l'OS d'une part, certaines applications telles SQLServer devrait simplifier l'écriture de batchs.

Où se trouve-t-il ?

Je ne parlerai ici que de la version fournie avec SQLServer 2008 qui est mon domaine.

On peut le lancer en mode commande ici :

C:\Program Files\Microsoft SQL Server\100\Tools\Binn

 

Ou depuis pas mal d'endroits depuis SSMS :

Et clic droit :

 

Qui nous donne une bonne vieille fenêtre en mode commande :

 

Nous sommes ici sous mon instance nommée (SQL2008) comme le montre cette requête :

Pour en voir les bases de données , rien de plus simple :

 

 

Bon, faire des DIR, c'est joli, mais le scripting ?

Le mélange OS/SQLServer permet plein de possibilités :

Par exemple :

net stop "SQL Server Agent (Test2008)"

net stop "SQL Server (Test2008)"

Attention ! les $ démarrent des variables en POWERShell, donc

net stop 'MSSQL$SQL2000'

Les simples quotes signifiant : ne cherche pas à analyser cette chaine, prend la telle quelle … subtil, mais il m'a fallu quelque temps pour trouver la parade !

Je viens de parler des variables, très simples à utiliser :

$Instance2000="SQLSERVER:\SQL\"+$MachineName+"\SQL2000"

Concatène 3 chaines de caractères dont une variable.

 

Ecriture standard de commande :

PS parle de cmdlet (petites commandes) qui sont toujours sous la forme

Verbe-complément

Par exemple : Write-host

Voici quelques cas standard que j'ai eu à résoudre :

 

Positionnement sur une instance SQLServer :

$Instance2000="SQLSERVER:\SQL\"+$MachineName+"\SQL2000"

# --- Instance nommée SQL2000

set-location $Instance2000

A partir de cet instant on peut soumettre des requêtes :

 

Requêtes à la volée :

A partir de constante :

invoke-sqlcmd -Query "sp_addserver '$MachineName\SQL2000', local"

A partir de fichier script .SQL :

invoke-sqlcmd -InputFile "c:\MonRepertoire\ModifierPerms.sql"

Attention : la documentation est erronée (au jour où je poste ceci) et parle de QueryFile…

$SuppLogins= "USE master " +

"DROP LOGIN [$MachineName\Pierre] " +

"DROP LOGIN [$MachineName\Paul] " +

"DROP LOGIN Alan "

invoke-sqlcmd -Query $SuppLogins

Qui mélange PS et le langage SQL.

 

Travail sur fichiers :

if (Test-path "d:\MSSQL10.SQL2008\mssql\data\MaBase.mdf") {Remove-item "d:\MSSQL10.SQL2008\mssql\data\MaBase.mdf"}

Qui supprime le fihcier s'il existe.

Copy-item "c:\Fichiers\MaBase.mdf" "d:\MSSQL10.TEST2008\mssql\data"

Copie toujours (écrasé si présent) le fichier vers la cible.

Remove-item "h:\Sauvegardes\BasesSQL2008\*.*" –recurse

Supprime à ce niveau et dans les sous niveaux.

 

 

Renvoi de messages console :

Write-host "Base créée"

A noter que l'on peut colorier (voir la syntaxe de cette commande par help Write-host)

Travail sur les process :

$ProcessActifs = Get-process

foreach ($Process in $ProcessActifs)

{

if ($Process.ProcessName -eq "ssms") {Stop-process -name "ssms"}

}

On voit ici un parcours de la collection des process de la machine et suppression d'un des process.

 

# Attente SQLServer

Start-sleep -s 5

Attente de 5 secondes pour permettre au service SQL de démarrer…

 

Soumission de scripts :

Toutes ces commandes peuvent être entregistrées dans des fichiers .ps1 et soumise grâce à SQLPS en ligne de commande.

 

 

Conclusion :

Je pensais avant d'utiliser cet outil : 'encore un langage à apprendre !'

En réalité le rapport temps d'apprentissage/ gain de de développement est très favorable !

Tous ceux qui ont des tâches répétitives :

DBA, consultants, fournisseurs de solutions …

apprécieront cet outil.