SC Configuration Manager + Microsoft Deployment 2008: riconoscere un determinato hardware durante il deployment

Quando occorre adattare la stessa immagine ad hardware diversi, uno dei problemi da affrontare e’ quello dei driver.

Premessa: l’argomento che sto trattando e’ stato ampiamente discusso in questo post sul blog dei deployment guys, ho voluto solo portare la mia esperienza personale (e se qualcuno trova difficolta’ con l’inglese spero trovi utile questo post).

La funzionalita’ di OSD (Operating System Deployment) di SC Configuration Manager con integrato MDT (Microsoft Deployment Toolkit) 2008 fornisce un paio di “actions” per gestire i driver:

  1. Auto Apply Drivers –> viene effettuato uno “scan” della macchina e vengo aggiunti al driver store di Vista i “migliori” driver che si trovano attualmente nel Driver Store di Configuration Manager
  2. Apply Drivers Package –> vengono addiunti nel driver store di Vista sempre e comunque tutti i driver che sono presenti in un Drivers Package

Nella migliore delle ipotesi funziona sempre la prima, nella realta’ (che e’ sempre diversa dalla teoria) ci si accorge che nonostante il driver sia presente nel driver store non sempre viene aggiunto. Questo accade generalmente perche’ il tool di scan non riconosce immediatamente la periferica perche’ si tratta di una periferica “virtuale” che viene abilitata solo una volta viene installata la periferica fisica (e installato il relativo driver).

Un’altro problema lo si incontra quando determinati driver (nel mio caso e’ capitato con il lettore di impronte digirali) sono forniti dal produttore solo in un formato “EXE”; in questo modo per installare la periferica correttamente si e’ costretti a installare l’applicazione in quanto per importare il driver nello store di Configuration Manager occorre avere a disposizione il file inf (che in questo caso e’ “inglobato” nel pacchetto di installazione dell’applicazione).

Per ovviare a questi problemi (e anche per una sorta di “ordine” che mi serve per avere sotto controllo le mie build) ho scelto di utilizzare un terzo modo per installare driver (ma che puo’ servire anche ad installare applicazioni): installare un determitato pacchetto di driver (solutione #2) basandosi sul riconoscimento del modello hardware.

Infatti mettendo una condizione al task “Apply Driver Package”, questo verra’ eseguito solo se quella condizione e’ verificata. La condizione, che stiamo cercando e’ quindi legata al riconoscimento dell’hardware.

Ma come facciamo a riconoscere un determinato modello Hardware?

Nativamente il processo di deployment di Vista tramite SCCM o MDT mette a disposizione delle variabili che vanno a “leggere” nel bios alcune informazioni.

Alcune di queste variabili, per esempio, sono:

  • AssetTag
  • SerialNumber
  • Make
  • Model

Queste variabili non sono altro che il mapping di quello che si legge nel BIOS della macchina; provate a eseguire su una macchina Vista “System Information”; tra l’altro troverete questo

image

Capirete come il fatto di poter leggere, per esempio, la proprieta’ “model” permette di poter mettere una condizione abbastanza certa sul fatto che una certa azione venga eseguita solo su quel modello (assumento che a parita’ di hardware la variabile “model” sia valorizzata allo stesso modo).

Ma e’ proprio questa ultima assunzione che, nella vita reale, non e’ sempre vera.

Infatti capita spesso che un cliente che compra 100 PC identici (che funzionano tutti con la stessa immagine e gli stessi driver quindi), abbiano la variabile “model” nel bios valorizzata diversamente. Non troppo diversamente… ma per esempio (vita vissuta), nel caso di un laptop HP6910p, il valore Model sulle prime 2 macchine l’ho trovato valorizzato con:

  • HP6910P
  • HP6910P (751#abu) … o qualcosa del genere

E’ evidente che non posso basare l’applicazione della mia azione sul fatto che la variabile Model abbia un determinato valore. A questo punto posso fare pero’ una cosa che mi permette di essere piu’ flessibile.

Se sono ragionevolmente sicuro che tutti i portatili ai quali devo applicare il pacchetto di driver hanno la parola “HP6910” nella variabile “Model”, posso creare nel tab “Options” della mia action una condizione di tipo “WMI Query”.

E che cosa le faccio fare?

Le dico di andare a controllare che nella variabile model del client sia presente la parola “6910p”. Se lo trova, la consizione viene considerata vera, altrimenti falsa. Questa la sintassi:

Select * FROM Win32_ComputerSystem WHERE Model Like "%6910p%"

Il messaggio che trovo utile per questa esperienza e’ che lo strumento che abbiamo a disposizione e’ molto flessibile e permette di “adattarsi” in diversi modi alla soluzione del problema. Sta a noi poi sapere sfruttare le potenzialita’ che ci sono. Ma per questo, se non ci basta la documentazione,  ci sono i blog :-)

Ale

PS

Grazie a Colin K, Colin M e James con i quali ieri ho lavorato per risolvere questo problema.

image