Déploiement de poste : FOG & Drivers windows

Drivers-install.vbsFOG est un outil formidable pour le déploiement de poste client que j’utilise en milieu professionnel. J’aurais envie de dire qu’il ne lui manque que la parole, mais non : il ne lui manque que la gestion des drivers

Devant un parc d’ordinateur plutôt hétérogène je ne pouvais pas mettre tous les drivers dans mon image. Je les donc déporté sur un partage réseau et j’ai utilisé DPInst (du Windows Driver Kit) dans un petit script VBS maison. Ce script est lancé automatiquement après le déploiement du poste grâce à sysprep.

Scénario du script :

  1. Monte \\monserveur.mondomaine.lan\drivers en lecteur réseau (partage en lecture seul avec simplement les drivers
  2. Recherche le répertoire du même nom que le “ComputerSystem Model”, que vous pouvez obtenir avec la commande « wmic computersystem get model » (ex : OptiPlex 380)
  3. Copy les drivers en local (car en cas d’installation des drivers de la carte réseau ça coupe…)
  4. Lance de “dpinst.exe” sur le répertoire local
  5. Démonte le lecteur réseau

Noter qu’il faut au minimum que la carte réseau soit reconnu par Windows pour que le script fonctionne.

' David Mercereau - Institut Saint-Dominique de saint-herblain Juin 2014
' Post-déploiement - installation des drivers selon le modèle de machine

''''''''' Déclaration 

On Error Resume Next

Dim objNet, objFso, objLogFile, objShell
Dim tmpObj, tmpItem
Dim SystemName, MakeModel, LocalisationDrivers, LecteurReseau

SystemName = "localhost"
' La localisation des drivers - ne doit pas nécessité d'authentification réseau.-
LocalisationDrivers = "\\monserveur.mondomaine.lan\drivers"
RepertoireTravailLocal = "C:\Windows\DeploiementDrivers"
LecteurReseau = "M"

Set objNet   = CreateObject("Wscript.Network")
Set objFso   = CreateObject("Scripting.FileSystemObject")
Set objShell = CreateObject("WScript.Shell")

''''''''' Script 

' On monte le lecteur réseau
objNet.MapNetworkDrive LecteurReseau & ":", LocalisationDrivers

' On recherche le modèle 
set tmpObj = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & SystemName & "\root\cimv2").InstancesOf ("Win32_ComputerSystem")
for each tmpItem in tmpObj
	' MakeModel = trim(tmpItem.Manufacturer) & "-" & trim(tmpItem.Model)
	MakeModel = trim(tmpItem.Model)
next
Set tmpObj = Nothing: Set tmpItem = Nothing

If (objFso.FolderExists(LecteurReseau & ":\" & MakeModel)) Then
	' Création du répertoire local
	objFso.CreateFolder RepertoireTravailLocal
	' Copie de dpinst.exe & dpinst.xml
	objShell.Run "cmd /C copy " & LecteurReseau & ":\dpinst* " & RepertoireTravailLocal, 1, true
	' Synchro du répertoire de drivers
	objShell.Run "cmd /C robocopy /S """ & LecteurReseau & ":\" & MakeModel & """ " & RepertoireTravailLocal, 1, true
	' Lancement de l'installation
	objShell.Run "cmd /C c: & cd " & RepertoireTravailLocal & " & dpinst.exe /c", 1, true
	Set objShell = Nothing 
End if

' On démonte le lecteur réseau
objNet.RemoveNetworkDrive LecteurReseau & ":", true, true

Et ça fonctionne au petit oignon !

Liens utiles :