Powershell & SQL Server = Automazione totale

Settimana scorsa ho avuto l'occasione di iniziare ad usare PowerShell in produzione. Devo dire che non ne vedevo l'ora, dopo aver visto le bellissime cose che può fare, anche grazie ai suggerimenti di Claudio che me ne decanta sempre la potenza e la flessibilità.

Dopo pochi minuti di utilizzo di PowerShell sono entrato nella fase "esaltazione pura": PowerShell è un semplicemente stupendo! Avevo la necessità di estrarre da una serie di cubi di Analysis Server 2005 tutte le dimensioni e tutte le misure in modo da poterle mettere su excel ed iniziare a fare un'analisi approfondita delle necessità del cliente. Le dimensioni e le misure erano tante, quindi ho subito pensato ad un modo per evitare di fare tutto a manina. Ovviamente .NET ed AMO (Analysis Server Management Objects) sono stato subiti presi in considerazione, insieme allo sviluppo di una piccola console application che facesse quello che mi serviva. Però un'applicazione console, deve cmq essere compilata, richiede una certa conoscenza di Visual Studio e di .NET per essere manutenuta....cose che avrei preferito evitare, visto e considerato che sul progetto non ci lavoraono solo sviluppatori ma soprattutto DBA/DBDev e Sistemisti.

Ho voluto provare ad usare PowerShell che, essendo appunto una Shell di comandi, è più facile da far utilizzare anche ai non-sviluppatori. Beh, devo dire che PowerShell fara contentissimi tutti, Sistemisti, DBA e Sviluppatori! Unendo la potenza di .NET con la possibilità di accedere alle risorse del sistema operativo e delle applicazioni (tramite COM o .NET)...si può automatizzare praticamente qualsiasi cosa in brevissimo tempo (in questo la pipeline aiuta moltissimo). Ecco le poche righe di codice nessarie per fare quello che mi serviva:

[System.Reflection.Assembly]::LoadFrom('C:\Program Files\Microsoft SQL Server\90\SDK\Assemblies\Microsoft.AnalysisServices.DLL')

$server = New-Object 'Microsoft.AnalysisServices.Server'
$server.Connect('localhost')

$database = $server.databases.FindByName('Margine')
$cube = $database.cubes[0]
$cube.Dimensions | select-object Name, Dimension | Export-Csv 'c:\CUBO_Margine_Dimensioni.csv' -NoTypeInformation
$cube.MeasuresGroup | % { $_.Measures} | select Parent, Name | Export-Csv 'c:\CUBO_Margine_Misure.csv' -NoTypeInformation

Le persone che hanno visto all'opera PowerShell sono rimaste a bocca aperta!

Più tempo passa più il .NET Framework manifesta tutta la sua grandiosa bellezza, e PowerShell ne è che un fantastico esempio!

Print | posted on lunedì 16 aprile 2007 16.34

Comments have been closed on this topic.

Copyright © Davide Mauri

Design by Bartosz Brzezinski

Design by Phil Haack Based On A Design By Bartosz Brzezinski