Gestire dati con PowerShell

Può capitare di avere la necessità di dover gestire, allineare o integrare dati dai nostri sistemi interni a sistemi di condivisione documenti, come SharePoint, o a sistemi di gestione di utenti e relativi gruppi come Active Directory.
Per fare ciò si possono utilizzare diverse tecnologie, tra le quali la generazione di script PowerShell.

Prima di affrontare come realizzare script di integrazione con Sharepoint e Active Directory, è bene introdurre gli attori che utilizzeremo per la creazione dei nostri script.

PowerShell

Powershell è un ambiente di scripting integrato con .NET, gestito tramite CmdLet.
Per sviluppare gli script possiamo utilizzare svariati editor, dal normale notepad ad editor integrati come Microsoft PowerShell ISE. L’estensione degli script PowerShell è “.ps1”.

Cosa è un CmdLet

Un CmdLet o Command-Let è un comando dato dall’utente al sistema, per ottenere una serie di informazioni.
Se stampato a video, Powershell provvederà alla conversione in testo del risultato del cmdlet, altrimenti si otterrà uno o più oggetti da utilizzare nel proseguimento dello script.

Per concatenare due o più CmdLet utilizziamo il simbolo “|” .
Tutto ciò che viene inserito dopo tale simbolo manterrà il tipo restituito dal CmdLet precedente.

Ad esempio:

Get-ChildItem -Path "C:\Develop" 

restituisce in forma testuale tutti gli elementi presenti nella cartella C:\Develop

CmdLet
Get-ChildItem -Path "C:\Develop " | %{$($_.Name)} 

permette, invece, di ottenere la proprietà filename da tutti i file presenti all’interno della cartella C:\Develop

Adesso scriviamo un nostro CmdLet:

Potremmo, ad esempio, scrivere un CmdLet che ci restituisca una DataTable passando una connessione OLEDB e una QUERY.

function LoadDataTable ($ConnString, $SqlQuery) 
{ 
	$OLEDBConn = New-Object System.Data.OleDb.OleDbConnection($ConnString)            
	$OLEDBConn.open() 
	$readcmd = New-Object system.Data.OleDb.OleDbCommand($SqlQuery,$OLEDBConn)            
	$readcmd.CommandTimeout = '300'            
	$da = New-Object system.Data.OleDb.OleDbDataAdapter($readcmd)            
	$dt = New-Object system.Data.datatable    
	[void]$da.fill($dt) 
	$OLEDBConn.close()   
	return ,$dt
}

Note per la scrittura di un CmdLet:

  • Tutte le variabili nel contesto di PowerShell vengono precedute dal simbolo “$”.
  • Il CmdLet New-Object crea un’istanza di un oggetto .NET o COM
  • [void] serve a rendere l’output dell’operazione a null (poteva essere scritto anche <<operazione>> | Out-Null).
  • Il simbolo “,” inserito nella line “return ,$dt” serve a far restituire un oggetto di tipo DataTable; nel caso in cui tale simbolo non sia presente, PowerShell lo considererà come Object generico.

Cosa si intende per “Moduli”

I moduli (estensione .psm1) sono, di fatto, contenitori di CmdLet. La creazione, gestione e importazione dei moduli ci permette di scrivere solo una volta il contenuto dei nostri CmdLet e utilizzarli in più script.
I moduli possono essere “installati” all’interno dell’ambiente PowerShell o importati di volta in volta all’interno degli script.

Una volta definita la funzione che vogliamo introdurre nel nostro modulo, per renderla disponibile all’ambiente esterno dobbiamo utilizzare il comando Export-ModuleMember -function FunctionToExport.

Pagine successive: come gestire SharePoint e ActiveDirectory

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *