SQL Server 2008 fornisce una shell PowerShell nativa attraverso la quale poter "navigare" all'interno degli oggetti di SQL Server. Questa shell si può attivare utilizzando il menu contestuale dell'Object Explorer del Management Studio. Dietro le quinte viene lanciata la shell sqlps.exe che di fatto lancia una shell PowerShell configurata in modo tale da renderla integrata con SQL Server 2008, cosi da poter eseguire comandi come:
cd SQL:
cd SERVERNAME\DEFAULT\Databases\AdventureWorks
dir Tables
e quindi ottenere la lista delle tabelle presenti nel database, visualizzando sottoforma di risultato tabulare lo schema di appartenenza della tabella, il nome della stessa e la data di creazione.
La shell sqlps.exe, però, è una "classica" shell molto scarna ed io con PowerShell preferisco usare tool come PowerShell+ che rendono l'utilizzo di PowerShell molto ma molto più confortevole. Come poter quindi configurare questi tool per far si che offrano le stesse funzionalità di sqlps?
Semplice. La prima cosa da fare è aggiungere gli SnapIn installati da SQL Server 2008:
Get-PSSnapin -Registered |
Where-Object { $_.Name -like "SqlServer*" } |
ForEach-Object { Write-Host "Adding Snapin " + $_.Name; Add-PSSnapin $_.Name }
Fatto ciò tutto già sarà funzionante, ma se provassimo ad ottenere l'elenco delle tabelle presente in un database otteremmo un risultato diverso da quello fornito da sqlps. Questo è dovuto al fatto che sqlps definisce anche le regole di formattazione degli oggetti di SQL Server. Dobbiamo quindi fare questa operazione anche noi, e per farlo dobbiamo utilizzare i file .ps1xml forniti da SQL Server:
Update-TypeData "C:\Program Files\Microsoft SQL Server\100\Tools\Binn\SQLProvider.Types.ps1xml"
Update-FormatData "C:\Program Files\Microsoft SQL Server\100\Tools\Binn\SQLProvider.Format.ps1xml"
Et voilà, il gioco è fatto, ora possiamo usare la nostra shell preferita, senza alcuna limitazione 