Programmazione.it v6.4
Ciao, per farti riconoscere devi fare il login. Non ti sei ancora iscritto? Che aspetti, registrati adesso!
Info Pubblicità Collabora Autori Sottoscrizioni Preferiti Bozze Scheda personale Privacy Archivio Libri Corsi per principianti Forum
Pro Windows PowerShell
Recensito da Davide Panceri il 13-10-2008 ore 15:21
Copertina ISBN: 1590599403
Autori: Hristo Deshev
Editore: Apress
Lingua: Inglese
Anno: 2008
Pagine: 493
Allegati: Nessuno
The Parallel Universe
Anche se PowerShell è un progetto in divenire, e la sua integrazione con Windows è stata a suo tempo rimandata, la forma che sta prendendo è abbastanza attendibile e funzionale per poterne fare largo uso a livello amministrativo e per qualche esperimento di programmazione. Per questo è importante avere qualche punto di riferimento, oltre alla documentazione ufficiale e ai siti più o meno vicini a Microsoft, che ha ideato il progetto e lo ha portato avanti a partire dal 2003 partendo con Monad. Un manuale così completo può essere un ottimo punto di partenza, anche perché non sono molti i prerequisiti necessari ad affrontare gli argomenti trattati nei ventiquattro capitoli, che riempiono le oltre quattrocento pagine del manuale.

Si comincia subito a prendere confidenza con il programma e l'ambiente di lavoro attraverso una serie di esperienze guidate di esplorazione dei tipi di oggetti e delle loro caratteristiche nel primo capitolo, attraverso la notazione puntata con la quale si accede ai campi degli oggetti in lettura e in scrittura. Laddove abbiamo a che fare con oggetti di automazione provenienti da altri mondi, interviene il meccanismo di object adaptation, che può essere comunque scavalcato in caso di necessità dalla proprietà speciale PSBase.

Il secondo capitolo è una guida alle espressioni di controllo, che si utilizzano nella programmazione PowerShell, e che vedrà ovviamente avvantaggiati i programmatori familiari con linguaggi C-like, anche se non mancano le eccezioni, come ad esempio gli operatori -eq, -lt, -ne e -gt, che stanno per i termini di confronto, essendo i segni di maggiore utilizzati per la redirezione dell'output.

Il terzo capitolo riguarda la cosiddetta Object Pipeline, uno degli argomenti che differenziano PowerShell dalle shell UNIX, e ne sottolinea i vantaggi evidenziando anzitutto i limiti della controparte. Naturalmente non è questo il luogo per convincere gli estimatori di una o dell'altra fazione, ma si possono leggere gli argomenti del capitolo per farsi un'idea sullo stato della controversia vista da una delle due parti. I comandi (o cmdlet) PowerShell sono oggetti con un'interfaccia standard, che soddisfano un contratto; la pipeline, invece di un flusso di testo, consiste in una collezione di oggetti che espongono metodi e proprietà: per questo l'oggetto ForEach per eseguire la stessa azione su diversi elementi di una collezione, e l'oggetto Where (che ha un alias in stile C) per filtrare una collezione in base a una condizione.

Con il quarto capitolo si inizia a utilizzare i blocchi di codice, sorta di contenitori di istruzioni, che possono essere eseguiti quando serve con diversi parametri in entrata. Gli oggetti script block sono istanze della classe .NET System.Management.Automation.ScriptBlock, e pertanto possono essere esplorati come visto nel primo capitolo con istruzioni tipo GetMember per leggerne le proprietà caratteristiche e comprenderne il funzionamento.

Con il quinto capitolo si passa alle funzioni, ovvero operazioni che accettano parametri in entrata e restituiscono nuovi valori in uscita (matematicamente parlando) ovvero subroutine e quindi parti di codice, che accettano valori in entrata per restituirne altri dopo aver effettuato delle operazioni. Un cenno storico agli inventori del concetto (David Wheeler, Maurice Wilkes e Stanley Gill nel lontanissimo 1948 su computer EDSAC), giusto un paio di righe, e si parte con l'uso di questi costrutti in PowerShell, osservando subito la similitudine tra funzioni e cmdlet, per esaminare poi passaggio dei parametri, valori di ritorno, regole di ambito, filtri e blocchi di codice.

Il sesto capitolo riguarda i cosiddetti alias, ovvero la possibilità di mascherare alcuni comandi sotto altro nome; questo permette di risparmiare tempo quando si digitano comandi, che potrebbero altrimenti essere troppo lunghi, anche se, usati con troppa disinvoltura, possono creare qualche problema. Si parte dalla considerazione che i 129 cmdlet di PowerShell, pur avendo nomi e parametri che ne facilitano l'apprendimento e l'uso, sono comunque tanti, e per questo è bene che ci sia la possibilità di ribattezzarli con nomi più facili da ricordare, almeno secondo l'opinione soggettiva, grazie al comando New_alias. Bisogna però fare attenzione agli effetti collaterali: per esempio, non bisogna oscurare un comando con un alias inopportuno: usare dir invece di Get-Command potrebbe avere conseguenze assai spiacevoli.

Il settimo capitolo è intitolato "Providers" e mostra come esista un concetto di item, che sta alla base di qualsiasi oggetto PowerShell, un po' come succede per il file in UNIX. L'esame dei provider inizia con il comando che li elenca (Get-PSProvider) e con l'esame dei meccanismi che li collegano al mondo (quasi) reale su cui lavorano gli informatici, ovvero dischi e file system: l'astrazione garantita da questo meccanismo permette di risparmiare tempo e tastiera e di lavorare facilmente con entità nuove.

Nell'ottavo capitolo si prendono in considerazione gli script in quanto file, occupandosi di come salvarli e dove tenerli per poterli utilizzare al meglio, non solo dal prompt dei comandi del proprio computer, ma anche da altri ambienti: non bisogna dimenticarsi che è possibile utilizzare codice PowerShell per scopi molto diversi, anche se questo può far nascere qualche problema, come la locazione del percorso della libreria, che si risolve grazie alla variabile $MyInvocation.

Il nono capitolo affronta un argomento spinoso, ovvero la gestione degli errori sia a livello preventivo, cioè scrivendo codice pulito, che dia luogo a poche possibilità di malfunzionamento, sia di indicazione degli errori all'interno del flusso di esecuzione, per capire cosa sta succedendo di sbagliato a runtime, e sia per quanto riguarda l'uso degli strumenti di controllo e correzione del codice. L'argomento è delicato, e proprio per questo il capitolo è uno dei più lunghi di tutto il testo.

Con il decimo capitolo si affronta un argomento correlato alla sicurezza, ovvero la firma digitale degli script, che serve per evitare spiacevoli conseguenze in caso di codice malevolo eseguito per eccesso di fiducia sul computer di lavoro e su dati, magari essenziali per la vita lavorativa o privata. L'undicesimo capitolo è dedicato alla configurazione e personalizzazione dell'ambiente PowerShell, ampiamente flessibili in quanto il codice prodotto non è assolutamente limitato a girare in una finestra stile console; potrebbe invece trattarsi di servizi, programmi con interfaccia grafica, o magari destinati a girare su macchine remote. L'approccio all'argomento è analitico e graduale: si parte dalla descrizione generica dell'oggetto Microsoft.PowerShell.ConsoleHost per poi scendere nel dettaglio di alcuni servizi offerti dall'interfaccia grafica attraverso la proprietà $host.UI, l'oggetto PSHostUserInterface e, infine, $host.UI.RawUI, con una modalità simile a quella descritta in un tutorial TechNet, che suggerisco per i più curiosi.

Il dodicesimo capitolo è dedicato all'estensione del Type System PowerShell: la possibilità di aggiungere metodi e proprietà agli oggetti e di modificare la definizione dei tipi offre un insieme di strumenti di lavoro molto efficaci, che naturalmente vanno usati con criterio per non creare un labirinto in cui perdersi. Il prototipo di tutti gli oggetti è PSObject, implementato come wrapper che mantiene un riferimento all'oggetto reale e fa quindi da intermediario per tutte le operazioni richieste su quest'ultimo. Proprio per questo si possono esporre funzionalità aggiungendo proprietà e metodi non presenti nell'oggetto originale (e, di converso, non è detto che tutte le proprietà e i metodi siano visibili).

Nell'aggiunta di proprietà agli oggetti PowerShell è più restrittivo, ad esempio, di JavaScript, almeno per quanto riguarda lo strumento da utilizzare, che deve essere un cmdlet speciale chiamato appunto Add-Member. Partendo da questa considerazione e dai primi semplici esempi si passa poi ad operazioni più complesse sia sul sistema dei tipi che sugli oggetti, che aiutano a creare script più facili da leggere, modificare e mantenere. Attenzione però a ricordarsi quali sono le estensioni e quali le dipendenze da tener presenti per poter lavorare su macchine diverse da quella di sviluppo.

Il tredicesimo capitolo parte dal presupposto che la conoscenza dell'ambiente di sviluppo non sia mai completa, e siccome è sempre necessario saper trovare aiuto, operazione peraltro facilitata dall'essere PowerShell estremamente orientato agli oggetti, indipendentemente da dove questi provengano, ecco che il suo funzionamento è abbastanza intuitivo. Cosa fare allora davanti ad un metodo con un parametro non chiaro, oltre ad esplorare i risultati delle chiamate, se si vuole risolvere in modo preciso e veloce il problema? Le fonti principali per l'aiuto sono due, ovvero il cmdlet Get-Help e, ovviamente, la rete internet, che può essere interrogata tramite comandi PowerShell, che aprano un browser ed eseguano una ricerca, per esempio, nel sito MSDN di Microsoft, oppure, più in generale, con un motore di ricerca. Il capitolo contiene alcuni esempi di codice, perché evidentemente si impara meglio facendo.

Il capitolo quattordici riguarda i processi: dall'elenco dei processi correnti ai comandi per avviarli ed arrestarli, eventualmente in modo da evitare, se possibile, la perdita dei dati, utilizzando il metodo CloseMainWindow, che effettua una notifica al processo prima di terminarlo. E' possibile anche lavorare con i processi e le librerie caricate nello spazio di memoria di un processo, grazie alle proprietà MainModules e Modules. Le attività con i processi vanno dal monitoraggio, all'attivazione, allo spegnimento, alla modifica di priorità e alla configurazione, grazie a comandi che sfruttano le utilità Windows e anche gli script WMI, nell'ottica di una gestione uniforme rispetto alle abitudini degli amministratori, che faciliti l'uso degli script e non si limiti ad aggiungere nuove tecniche da imparare con perdita di tempo e fatica.

Nel quindicesimo capitolo si parla di input e output, ovvero come trovare un file, lavorarci e poi salvarlo attraverso cmdlet come Get-Content e Set-Content. Get-Content ritorna un array di stringhe, ognuna delle quali rappresenta una riga del file di testo originale, un fatto che può tornare utile ad esempio quando si ha a che fare con elenchi suddivisi appunto per righe.

Il sedicesimo capitolo è dedicato al monitoraggio del sistema, attraverso attività come la lettura dell'Event Log di Windows da locale o da remoto, il monitoraggio dei programmi in esecuzione e di quelli terminati in modo non regolare, la ricerca di programmi in stato di hang, che viene facilitata e resa più comprensibile da un'interfaccia grafica adeguata. Grazie alla semplificazione offerta da PowerShell e .NET ci si può concentrare con più tranquillità sulle cose da fare evitando di perdere troppo tempo a decidere come farle, come sembrano dimostrare alcuni esempi del capitolo relativi all'accesso in lettura e scrittura all'Event Log e al performance counter.

Nel diciassettesimo capitolo si passa ad un argomento molto interessante e più vasto, ovvero come lavorare sul World Wide Web attravaerso PowerShell. L'argomento continua nel successivo diciottesimo capitolo, che si occupa dell'invio di posta elettronica attraverso System.Net.Mail, di cui viene mostrato l'uso relativo alle varie parti di un messaggio di posta elettronica (destinatari, intestazioni, allegati anche multimediali).

Il diciannovesimo capitolo è dedicato alla comunicazione con oggetti COM, una sorta di standard per l'interoperabilità che si è sviluppato a partire dagli anni Novanta ed esteso poi con DCOM, ma destinato ad essere sostituito dal modello ad oggetti .NET, e che dovrebbe garantire anche maggiore uniformità e facilità di uso. Questa tecnologia è ancora molto diffusa, e non è difficile da usare con PowerShell, quando ad esempio c'è bisogno di accedere a componenti di Office o di Internet Explorer oppure se si vuole riutilizzare codice VBScript.

Dopo una breve introduzione sul funzionamento di oggetti COM e un cenno al supporto .NET ereditato da PowerShell, gli esempi di codice riguardano l'automazione di Word, con operazioni di apertura di un file ed estrazione del testo, creazione e modifica di documenti (.doc), uso del correttore ortografico, e l'uso di Excel per la modifica del contenuto di un foglio di lavoro e la lettura dei valori contenuti nelle celle. Nella sezione riguardante l'uso di Internet Explorer con PowerShell troviamo anche un box di avvertimento sui possibili effetti della modalità protetta del browser versione 7, che potrebbe impedire il funzionamento degli script se richiesto nelle impostazioni di sicurezza.

Il ventesimo capitolo parla della gestione di Windows attraverso WMI, ovvero Windows Management Instrumentation, una serie di oggetti speciali esposti alla programmazione Windows come oggetti COM che PowerShell può utilizzare con estrema semplicità. Il ventunesimo capitolo è dedicato alle estensioni di PowerShell prodotte dalla comunità degli sviluppatori: proprio la facilità con la quale è possibile estendere PowerShell permette ad una vasta comunità ospite del sito CodePlex, l'open source di Microsoft, di estendere le funzionalità di questo programma. Tra le caratteristiche aggiuntive di PSCX troviamo un meccanismo di tab expansion completamente diverso, che include ad esempio i nomi delle classi WMI, la funzione Edit | File per scegliere l'editor da usare per modificare il codice (consigliato NotepadPlusPlus), un sistema più flessibile per muoversi all'interno del file system, possibilità di interagire con file compressi e alcune utilità di rete.

Non finisce qui: il supprto XML prevede la possibilità di migliorare la formattazione, c'è poi l'idea di agganciare via COM un programma come ImageMagik per il trattamento delle immagini, la possibilità di lavorare con la clipboard o area degli appunti di Windows, di manipolare Active Directory e ci sono infine un paio di applicazioni esterne che permettono di migliorare la fruizione dell'Help (Less-394) e il debug (EchoArgs).

Il ventiduesimo capitolo è dedicato a PSEventing, ovvero eventi .NET in PowerShell. Si parte dalla considerazione che la comunicazione tra PowerShell ed eventi .NET può essere complicata da problemi come sincronizzazione dei thread e Garbage Collection, anche perché la maggior parte degli script non deve affrontare problemi di questo genere, come invece è assolutamente necessario per le applicazioni, che sono più complesse e devono lavorare più a lungo, affrontando anche problemi più complessi. In alcuni casi però diventa necessario saper consumare eventi di classi .NET dall'interno degli script, come ad esempio quando uno script aspetta la cancellazione di un file da parte di un utente. In casi come questi può essere utile PSEventing, un progetto della famiglia CodePlex attualmente alla versione 1.1 (1.0 ai tempi del libro), che permette di catturare e rispondere a eventi sincroni e asincroni COM, WMI e .NET. Gli esempi del capitolo vanno da un FileSystemWatcher, omonimo ma non uguale rispetto a quello scaricabile da CodePlex, al monitoraggio delle voci scritte sull'Event Log di sistema, alla gestione di eventi WMI, alla rilevazione della terminazione dello script da parte dell'utente.

Il ventitreesimo capitolo che chiude il libro, è dedicato in modo esclusivo ad una delle estensioni di PowerShell, che migliora il completamento del testo via Tab e non solo. Si tratta appunto di PowerTab, un'estensione di Marc von Orsouw, che consiste in una serie di script capaci non solo di estendere la capacità di completamento con il tasto tab, ma anche di fornire interfacce diverse per migliorare l'approccio con l'utente e di cercare in oggetti che la shell di solito ignora.

Anche se si può essere riluttanti a installare programmi aggiuntivi mentre si sta imparando ad usare uno strumento nuovo, in questo caso il consiglio è di utilizzare al più presto questo strumento, scaricabile dal sito. Con questo capitolo di taglio nettamente pratico il libro si chiude raccomandando di usare le tecniche e gli strumenti passati in rassegna nel corso dei vari capitoli: solo la pratica può dare risultati concretamente visibili.
proIl manuale è completo, la trattazione chiara ed estesa e l'approccio graduale.
controOvviamente tra la scrittura e la stampa del libro alcune informazioni invecchiano, ma non è difficile aggiornarsi seguendo le indicazioni iniziali di ciascun capitolo.
Precedente: M, nuovo linguaggio di programmazione da Microsoft
Successiva: Il funzionamento di NSIS
Copyright Programmazione.it™ 1999-2014. Alcuni diritti riservati. Testata giornalistica iscritta col n. 569 presso il Tribunale di Milano in data 14/10/2002. Pagina generata in 0.253 secondi.