La console di Exchange
25 Febbraio 2008
Oggi ero dal cliente con i nuovi 1000 utenti che sono partiti con il nuovo sistema di posta elettronica. Come al solito qualche problema minimale facilmente gestibile.
Visto che sono in fase di relax volevo accennare alla console grafica di gestione di Exchange 2007. In pratica si tratta di un wrapper su alcune funzionalità delle Cmdlet PowerShell (non sono tutte le funzionalità quindi i comandi è bene impararli). La particolarità più interessante è che, una volta eseguito il comando, la console mostra quello che si dovrebbe digitare sul prompt per ottenere lo stesso risultato.
La console diventa anche un grande strumento didattico.
La prima volta che ho usato una cosa del genere è stato ai tempi dell’IBM AIX 3.x con SMIT. Inutile dire che anche allora questo aspetto mi aveva impressionato. Probabilmente sarà colpa della mia passione per le interfacce utente!
Exchange + PowerShell = Gestibilità
23 Febbraio 2008
Un nostro cliente ha acquistato un’altra azienda e si è reso quindi necessario migrare un migliaio di utenti di posta della nuova azienda sul sistema di posta del gruppo basato su cluster Exchange 2007 distribuendoli equamente sui database e sui nodi. Per questione di politiche aziendali abbiamo dovuto cambiare gli indirizzi di posta ma mantenendo i vecchi come alias. E’ poi stata cambiata in modo massiccio la gestione delle caselle comuni. Tutto questo condito con una discreta dose di eccezioni alle regole e complicato dal fatto che le caselle sono associate ad utenti definiti in una foresta diversa.
Exchange 2007 è un sistema molto potente con la possibilità di definire parecchie cose in modo automatico. Questi automatismi però non permettono di indirizzare tutte le problematiche definite sopra (in special modo le eccezioni). L’integrazione di Exchange 2007 con PowerShell lo rende assolutamente interessante. La possibilità di agire con le cmdlet dedicate sugli oggetti che ne rappresentano le entità gestite permette di raggiungere una flessibilità molto alta. Per indirizzare tutti i problemi abbiamo combinato quindi un certo numero di script ottenendo un ottimo risultato
Personalmente conosco shell come ksh o bash (e persino csh) e ho utilizzato spesso script in Perl e VBScript. Però questi strumenti non raggiungono la flessibilità di PowerShell dove si accede ai sistemi sottostanti mediante un modello uniforme integrato con l’accesso alla maggior parte del .NET framework. Se ancora non l’avete guardata è ora di farlo.
PowerShell è una delle chicche dell’ultima generazione dei sistemi Microsoft e sono arrivato a pensare che da sola può essere il motivo di aggiornamento da una vecchia versione di un prodotto alla nuova versione integrata con essa. Microsoft sarà arrivata tardi alla festa delle shell ma ci è arrivata veramente con stile e, a buon diritto, oggi è uno degli attori di riferimento.
Il gap semantico di PowerShell.
11 Febbraio 2008
Oggi e domani sono impegnato nella partenza di un sistema complesso ma che lavora con le persone e quindi con tempi umani. Ho quindi dei tempi morti: quale migliore occasione per leggere un po’ di roba su Internet?
Sfogliando qua è la mi è capitato di leggere questo post che vi indico: si tratta di una interessante elucubrazione su PowerShell partita da un’altro post riguardante i toolkit Perl e PowerShell per la gestione delle macchine virtuali.
IBM WebSphere MQ (MQ Series), PowerShell e WCF
09 Dicembre 2007
IBM ha rilasciato PowerShell for WebSphere MQ, un Support Pac per MQ sulla piattaforma Windows che ne permette la gestione tramite PowerShell. MQ è un middleware IBM che permette la comunicazione di differenti programmi su differenti piattaforme tramite un sistema a code distribuite. E’ un software estremamente affidabile e longevo che abbiamo usato con successo in molteplici scenari multipiattaforma. Ovviamente è un ottimo software utile in scenari di integrazione di sistemi (o in certe implementazioni di architetture SOA).
Non è la prima volta che IBM si integra egregiamente con Windows (il DB2, per esempio) e non è neppure la prima volta che si avventura sulle nuove caratteristiche rese disponibili da Microsoft. Ma, riguardo MQ, molto interessante è il canale MQ per WCF. Questo software integra il Windows Communications Framework con MQ utilizzando SOAP per JMS. In altri termini rende facile la comunicazione fra sistemi .NET 3.x (e in ultima analisi Windows) e sistemi collegabili a WebSphere MQ come WebSphere Application Server o il CICS. Significa che si potrebbero integrare queste potenti tecnologie IBM (legacy e non) con i nuovi potenti framework di Microsoft. Peccato sia solo un proof of concept e per di più con alcune mancanze fondamentali e quindi non utilizzabile in produzione.
Windows, PowerShell e certificati
26 Agosto 2007
Una delle cose che più mi affascina nel sistema Windows è la forte integrazione presente tra vari elementi. E questa una particolarità che lo rende più adatto di altri in molti scenari aziendali. E per sistema Windows intendo sia i sistemi desktop che i server che altro. Fulcro principale di questa integrazione è sicuramente Active Directory, un contenitore gerarchico che si occupa di gestire le informazioni relative alla maggior parte degli elementi come utenti, computer, certificati, stampanti, applicazioni e altro.
Uno di questi elementi, fornito con il server Windows, sono i Certification Services. La mia esperienza nelle aziende mi induce a pensare che siano inspiegabilmente poco conosciuti e quindi poco installati. Questi servizi, integrati con Active Directory, forniscono a Windows una completa struttura di Certification Authority (CA) per la gestione dei certificati digitali standard che permette operazioni come la richiesta, la revoca e la distribuzione di questi elementi oggi fondamentali. Alcune di queste operazioni su alcuni tipi di certificati sono automatiche e trasparenti per l’utilizzatore. I certificati sono assolutamente standard tanto è vero che noi li utilizziamo anche nei nostri server Domino, Apache e WebSphere.
Oltre ad autentificazione e crittografia una delle funzionalità fornite da una struttura di certificati è la firma digitale del codice. Questo è molto importante per aumentare il livello di sicurezza del codice che viene eseguito nella rete. Ad esempio io li utilizzo anche per firmare gli script PowerShell.
In pratica un mio PC dove sviluppo il codice ha un livello relativamente blando di sicurezza (RemoteSigned) ma i server, invece, richiedono codice firmato. Quindi io scrivo uno script sul PC e, una volta testato, lo copio nel server e lo firmo per autorizzarne l’esecuzione. L’utilizzo del certificato rilasciato dalla CA integrata fa sì che la firma sia conosciuta da tutti i computer del dominio. Questo dovrebbe impedire l’esecuzione di script malevoli scritti da persone che non possono firmare digitalmente lo script utilizzando la CA o dovrebbe contribuire all’individuazione dell’autore.
Per attivare questi meccanismi (che peraltro possono essere usati per la firma di altro tipo di codice) ho utilizzato i Certification Services (installati come una CA di livello Enterprise). In questo modo ho una CA “autocertificata” che certifica tutti i certificati rilasciati (e questo mi permette di utilizzare certificati dove voglio all’interno della mia rete) e che sono riconosciuti dalle macchine, dagli utenti e dai software che fanno parte del dominio. Fatto questo ho abilitato il template per il Code Signing usando la console sul server. Sul PC dove voglio firmare lo script richiedo il certificato usando l’apposito plugin per MMC (digitando certmgr.msc si lancia una console con il plugin già caricato per i certificati personali).
A questo punto è possibile firmare il codice. Il resto è storia e ben descritto nell’help della PowerShell (digitate help about_signing). Comunque per farla breve ho dovuto impostare il livello di esecuzione del codice nella shell:
Set-ExecutionPolicy AllSigned
In seguito ho firmato lo script:
$cert = @(dir cert:\\CurrentUser\\My -codesigning)[0] Set-AuthenticodeSignature .\\mioscript.ps1 $cert
In questo modo ho potuto eseguirlo:
mioscript
Cosa succede se non firmo lo script? PowerShell si rifiuta di eseguirlo. Cosa succede se lo script è firmato con un certificato non noto (cioè un autocertificato o un certificato non facenti parte della stessa catena di autorizzazione)? Il sistema si rifiuta di eseguirlo.
Una nota sulla istruzione dir usata nel codice di cui sopra: utilizza l’accesso ai certificati attraverso un provider per gli store dei certificati.