Vista UX: PowerShell

Anche se non strettamente legata a Vista (è in grado di funzionare anche su XP e 2003) è disponibile PowerShell, una nuova shell di comandi molto più potente del vecchio prompt (il CMD.EXE per intenderci). Un utente normale solitamente non utilizza una shell di comandi ma è comunque un elemento che ha a che fare con l’esperienza utente.

Prima di tutto occorre dire che il vecchio CMD.EXE non era così brutto come lo dipingevano molti detrattori. Nelle ultime versioni si era arricchito di notevoli funzionalità (tanto per provare digitate HELP FOR al prompt). E anche i comandi erano diventati parecchi. In pratica con il vecchio prompt si possono costruire file di comandi complessi.

La parte di scripting invece è sempre stata uno dei punti forti di Windows. Grazie al fatto che molte funzionalità dei sottosistemi erano esposte via interfacce COM/DCOM/ActiveX/ecc., è sempre stato possibile creare script molto complessi in grado di interagire con il sistema e le applicazioni usando svariati linguaggi (VBScript, Javascript, Perl, ecc.).

PowerShell è invece una shell che propone un modello nuovo di gestione del sistema. Prima di tutto occorre dire che la shell è progettata per essere usata in modo interattivo e via script. Supporta un modo uniforme di nominare i comandi, completition, history, file di comandi, funzioni, alias.

La shell è basata su .NET e quindi è in grado di manipolare oggetti. In effetti è object oriented. Si possono persino definire (e non solo istanziare) oggetti dinamicamente. Molti dei comandi sono uniformi tra oggetti diversi. Ad esempio il comando

Get-ChildItem

restituisce una lista di oggetti figli della locazione in cui ci si trova. In altri termini se vi trovate su C:\TEMP il comando restituisce una lista di oggetti file e directory contenuti in C:\TEMP. Alias di questi comandi sono DIR e LS (vecchie conoscenze). Se cambiate locazione così:

Set-Location HKLM:\SOFTWARE

e digitate

Get-ChildItem

allora vi viene restituita una lista di oggetti che rappresentano le chiavi del registry nella locazione HKEY_LOCAL_MACHINE\Software (notate: stessi comandi delle directory). Ovviamente potevate anche usare gli alias ad esempio in questo modo:

cd HKLM:\Software\Adobe
dir

Questi comandi mostrano il contenuto di una chiave del registry utilizzata dai programmi di Adobe.

Con questi semplici esempi è stato mostrato il concetto di provider per le unità. In pratica grazie a questi provider (e agli oggetti) è possibile lavorare su differenti “spazi” in modo uniforme. Ci sono provider per il file system, per le variabili di ambiente, per i certificati digitali e altro.

La caratteristica principale è però quella di lavorare ad oggetti. Per gestire in modo efficiente questi oggetti PowerShell introduce il concetto di pipe di oggetti. In UNIX il sistema implementa una pipe di caratteri. Per esemplificare prendiamo un comando del tipo:

ls -al | grep “^d”

mostra una lista di tutte le directory contenute nella directory corrente. Il tutto funziona perchè il comando ls emette il suo output su una pipe di caratteri. La pipe di caratteri viene poi usata come input dal programma grep che però opera sul testo. Sempre per esemplificare in PowerShell il comando

dir | where { $_.PSIsContainer }

mostra come il precedente una lista delle directory contenute nella directory corrente (provate a farlo su una directory del registry). La differenza è pero sostanziale. Il comando dir crea un pipe di oggetti di tipo directory o file. Il comando where prende in input questi oggetti e ad ognuno di loro chiede se è un contenitore (cioè una directory) utilizzando una proprietà degli oggetti stessi.   

Come altro esempio consideriamo

ps | where { $_.ProcessName -eq “winword” } | select { $_.Company }

ps crea una pipe di oggetti di tipo processo. where seleziona i processi che si chiamano winword. select mostra il nome della società che ha creato il programma. Anche qui le pipe producono oggetti e i comandi lavorano con i metodi e le proprietà degli oggetti.

Il fatto di utilizzare oggetti rende la manipolazione di entità estremamente più semplice. In effetti esistono già diversi prodotti, oltre al sistema operativo, in grado di utilizzare PowerShell.

1 comment
  1. wisher said:

    L’utilizzo degli oggetti al posto del testo è un notevole passo in avanti.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: