Injecter PC Name dans image Wim

Injecter PC Name dans image Wim - Infrastructures serveurs - Systèmes & Réseaux Pro

Marsh Posté le 25-08-2008 à 11:16:31    

Hello,
 
Je travaille dans un environnement ou nous avons plus de 1000 workstations et forcément, il y a un rollout continuel, nous changeons entre 200 et 400 pc par an.
 
De ce fait nous devons constament appliquer des images sur ces PC.
 
Actuellement, nous travaillons avec Symantec Deploy Center et son service PXE.
Un aspect pratique avec ce soft, c'est qu'il permet lors de son lancement d'executer un script dans lequel nous pouvons utiliser des commandes afin de modifier le partitionnement et le fichier sysprep contenu dans le fichier image qui est ici au format .pqi
 
Par exemple nous lançons deploy center avec un petit script rédigé dans un fichier TXT qui contient entre autre ces lignes :
 

Code :
  1. USE SYSPREP
  2. SET INI [Identification] DomainAdminPassword := %password%
  3. SET INI [Identification] DomainAdmin := %username%
  4. SET INI [Userdata] ComputerName := %bx%


Ce qui fait que nous lançons notre ligne de commande en ayant au par avant assigné les variables password, username et bx ce qui nous permet de partir et lorsque nous revenons, le pc est dans le domaine avec le nom de machine que nous lui avons attribué.
 
Nous allons passé en image WIM et j'aimerai donc savoir s'il existe une méthode avec imagex ou autre pour faire la même chose.
 
Actuellement j'ai installé un serveur de déploiement de type PXE mais pas un WDS, j'aimerai ne pas devoir passer par ça.
 
Nous ne voulons pas devoir faire un mount rw de l'image pour injecter un fichier sysprep.inf à chaque fois car cela voudrait dire que nous ne pouvons deployer l'image que sur un pc à la fois.
 
Merci d'avance

Reply

Marsh Posté le 25-08-2008 à 11:16:31   

Reply

Marsh Posté le 17-01-2009 à 22:53:20    

ca fait un bail et j'avais oublié que j'avais posté sur ce forum mais j'ai trouvé une solution à mon problème.
 
Et je dois dire que je ne comprends pas comment je n'y avais pas pensé avant.
 
En fait je modifie le fichier sysprep.inf une fois que l'image a été appliquée sur le c:
 
En fait j'ai fait un script en vbscript qui procède comme suit :
 
1 - Demande du login et du password d'une personne autorisée à mettre un pc dans le domaine
2 - Demande du nom du PC qui sera a appliquer
3 - Le script supprime les partitions existante et les recréent en fonction de la taille du disque
4 - Le script applique l'image wim sur le c:
5 - Le script modifie le sysprep.inf sur le c: avec les infos précédemment entrées
6 - Le pc reboot, fait son sysprep et s'intègre tout seul comme un grand

Reply

Marsh Posté le 23-04-2009 à 10:56:17    

Bonjour,
 
ton post m'intéresse car  je dois traiter un projet de "Recovery Disaster".
Peux-tu m'apporter des précisions sur la façon dont tu procèdes.
 
Actuellement j'utilise WDS pr déployer XPsp3 et Vista avec le wim. C'est vraiment efficace.
Mais je souhaite intégrer sysprep et wimen cas de déploiement d'urgence sur un autre site.
 
Merci d'avance

Reply

Marsh Posté le 23-04-2009 à 11:08:57    

leguleguman a écrit :

Bonjour,
 
ton post m'intéresse car  je dois traiter un projet de "Recovery Disaster".
Peux-tu m'apporter des précisions sur la façon dont tu procèdes.
 
Actuellement j'utilise WDS pr déployer XPsp3 et Vista avec le wim. C'est vraiment efficace.
Mais je souhaite intégrer sysprep et wimen cas de déploiement d'urgence sur un autre site.
 
Merci d'avance


 
Alors j'ai deux script vbs et des batch, les voici :
 
Tout d'abord, j'ai une série de batch dans ce genre :

Code :
  1. REM Appel du script pour ghoster le PC
  2. REM le premier argument est pour les partitions (A = ALL, C = que le C:, D = C: + D:)
  3. REM le second argument est le nom de l'image à appliquer, elle devra etre dans \\S-AGRI-BOWIS\support$\PCSUPPORT\images-xp\AIK\Images
  4. cscript .\script\space_disk_new.vbs A agrisp3.wim
  5. if %errorlevel% EQU 0 goto batch ELSE goto error
  6. REM lancement du batch de restauration
  7. :batch
  8. %temp%\batch.cmd
  9. :error
  10. menu


Pour utiliser les vbs avec un winpe, il faut modifier ce dernier pour qu'il supporte le vbs
 
Le premier script demande un login, un mot de passe et le computername.
Ce vbs va lancer une commande de partitionnement et de formatage des partitions à l'aide de aefdisk32 que j'ai aussi inclu dans mon winpe
Ce vbs va aussi créer un fichier batch temporaire qui sera stocké sur le ramdisk créé par le winpe.
 

Code :
  1. '######################################################################################################
  2. '#                                                                                                    #
  3. '#                                       Script by Julien Baldini                                     #
  4. '#                         - Demande du login/pass + PC name                                          #
  5. '#                         - Création et formatage des partitions                                     #
  6. '#                         - Application de l'image sur le pc                                         #
  7. '#                         - Reboot du pc                                                             #
  8. '#                                                                                                    #
  9. '######################################################################################################
  10. Dim ArgObj
  11. 'cet objet va contenir tous les paramètres passé en arguments au vbs
  12. Set ArgObj = WScript.Arguments
  13. 'argument 0, contient l'info des partitions
  14. ' A = ALL   (tout sera effacé et recréé, application uniquement d'une image sur le C:)
  15. ' C = Que le C: (le c: sera effacé)
  16. ' D = C + D  (tout sera effacé et recréé, application d'une image sur le C: et le D:)
  17. nb_part = ArgObj(0)
  18. 'argument 1, contient le nom de l'image à appliquer
  19. image_to_apply = ArgObj(1)
  20. 'Je libère l'objet qui contenait les paramètres passé en arguments
  21. Set ArgObj = Nothing
  22. login = InputBox("Enter your login" & vbCr & vbCr & "!!! 7 characters long !!!" & vbCr & vbCr & "!!! No case sensitive !!!","Enter your login" )
  23. pass = InputBox("Enter your password" & vbCr & vbCr & "!!! CASE SENSITIVE !!!","Enter your password" )
  24. bx = InputBox("Enter the computername","Enter your password" )
  25. 'je détermine la taille du disque afin de créer les partitions adéquates
  26. For Each objDiskDrive In GetObject("winmgmts:{impersonationLevel=impersonate}\\.\root\cimv2" ).InstancesOf("Win32_DiskDrive" )
  27. size = CLng(objDiskDrive.Size/1024/1024/1024)
  28. id=objDiskDrive.Index
  29. 'WScript.Echo "size=" & size & " id=" & id
  30. If id = 0 Then
  31.    Set objShell = CreateObject("WScript.Shell" )
  32.    'si le disque fait 60Go ou plus
  33.    If size >= 60 Then
  34.      WScript.Echo "Disque plus grand que 60Go"
  35.    
  36.      part1_space = 40000
  37.      part2_space = 20000
  38.    
  39.      WScript.Echo "Partition C: " & part1_space/1000 & " Go"
  40.      WScript.Echo "Partition D: " & part2_space/1000 & " Go"
  41.      WScript.Echo "Partition E: " & size-(part1_space/1000)-(part2_space/1000) & " Go"
  42.    
  43.    'Si le disque fait moins de 60Go
  44.    Else
  45.  
  46.      WScript.echo "Disque plus petit que 60Go"
  47.  
  48.      'Si le disque fait plus de 20Go et moins de 60Go
  49.      If size > 30 Then
  50.  
  51.        WScript.Echo "Disque de : " & size & "Go"
  52.    
  53.        part1_space = 10000
  54.        part2_space = 20000
  55.      
  56.        WScript.Echo "Partition C: " & part1_space/1000 & " Go"
  57.        WScript.Echo "Partition D: " & part2_space/1000 & " Go"
  58.        WScript.Echo "Partition E: " & size-(part1_space/1000)-(part2_space/1000) & " Go"
  59.      'Si le disque fait 20Go ou moins
  60.      Else
  61.  
  62.        WScript.Echo "Disque de : " & size & "Go"
  63.    
  64.        part1_space = 8000
  65.        part2_space = 7000
  66.      
  67.        WScript.Echo "Partition C: " & part1_space/1000 & " Go"
  68.        WScript.Echo "Partition D: " & part2_space/1000 & " Go"
  69.        WScript.Echo "Partition E: " & size-(part1_space/1000)-(part2_space/1000) & " Go"
  70.      End If   
  71.    End If
  72.  
  73.    'commande de création des partitions et du formatage de celles-ci en fonction de la demande (ALL ou que le C:)
  74.    If (UCase(nb_part) = "A" ) Or (UCase(nb_part) ="D" ) Then
  75.  
  76.      aefdisk="aefdisk32.exe /delall /pri:" & part1_space & ":07:1 /pri:" & part2_space & ":07:2 /pri:0:07:3 /activate:1 /mbr /format:1:SYSTEM /format:2:DATA /format:3:SDMCACHE  "
  77.  
  78.    End If
  79.  
  80.    If ucase(nb_part) = "C" Then
  81.  
  82.      aefdisk="aefdisk32.exe /activate:1 /mbr /format:1:SYSTEM  "
  83.  
  84.    End If
  85.  
  86.    'création du fichier batch qui lancera la restauration
  87.    Set objFSO = CreateObject("Scripting.FileSystemObject" )
  88.    temp=objShell.ExpandEnvironmentStrings("%temp%" )
  89.  
  90.    Set batch2  = objFSO.OpenTextFile ( temp & "\batch.cmd", 2, True)
  91.  
  92.    'commande de restauration de l'image
  93.    imagex_c="imagex.exe /apply ..\Images\" & image_to_apply & " 1 c:"
  94.    imagex_d="imagex.exe /apply ..\Images\" & image_to_apply & " 2 d:"
  95.    batch2.Writeline "echo ON"
  96.    batch2.Writeline "REM Formatage des partitions" 
  97.    batch2.Writeline aefdisk
  98.    batch2.Writeline "REM Application de l'image sur le C:"   
  99.    batch2.Writeline imagex_c
  100.    batch2.Writeline "if %errorlevel% neq 0 goto end"
  101.    batch2.Writeline "echo off"
  102.    batch2.Writeline "cscript.exe .\script\modif_sysprep.vbs " & bx & " " &  login & " " &  pass
  103.  
  104.    If UCase(nb_part) = "D" Then
  105.  
  106.      batch2.Writeline "REM Application de l'image sur le D:"   
  107.      batch2.Writeline imagex_d
  108.      batch2.Writeline "if %errorlevel% neq 0 goto end"
  109.      batch2.Writeline "echo off"
  110.  
  111.    End If
  112.  
  113.    batch2.Writeline "exit"
  114.    batch2.Writeline ":end"
  115.    batch2.Writeline "Echo off"
  116.    batch2.Writeline "cls" 
  117.    batch2.Writeline "Echo 'Erreur lors de l'application de imagex'"
  118.    batch2.Writeline "Echo 'Erreur: %errorlevel% '" 
  119.    batch2.close
  120. End If
  121. Next
  122. Set objHDinfo = Nothing
  123. Set batch2  = Nothing


Ensuite, dès que l'image est appliqué, le batch lance le batch temporaire créé dans le ramdrive
 
Ce batch exécute la commande suivante donc : cscript.exe .\script\modif_sysprep.vbs " & bx & " " &  login & " " &  pass
 
Et voici le code du script qui modifie le fichier sysprep.inf
 

Code :
  1. Set objFSO = CreateObject("Scripting.FileSystemObject" )
  2. sysprep_file = "c:\sysprep\sysprep.inf"
  3. 'on ouvre le fichier sysprep en lecture
  4. Set objTextFile  = objFSO.OpenTextFile (sysprep_file, 1)
  5. Dim ArgObj
  6. 'cet objet va contenir tous les paramètres passé en arguments au vbs
  7. Set ArgObj = WScript.Arguments
  8. 'Set countarg=WScript.Arguments.Count
  9. bx=ArgObj(0)
  10. login=ArgObj(1)
  11. login_pass=ArgObj(2)
  12. sysprep_content = Null
  13. Do Until objTextFile.AtEndOfStream
  14.    
  15.     Line = objTextFile.Readline
  16. 'création de la ligne contenant le computername
  17. If ucase(Left(Line,13)) = "COMPUTERNAME=" Then
  18.  Line = "Computername=" & bx
  19. End If
  20. 'création de la ligne contenant le login qui insérera le pc dans le domaine
  21. If ucase(left(Line,17)) = "DOMAINADMIN=NET1\" Then
  22.  Line = "DomainAdmin=net1\" & login
  23. End If
  24. 'création de la ligne contenant le password du login
  25. If ucase(left(Line,20)) = "DOMAINADMINPASSWORD=" Then
  26.  Line = "DomainAdminPassword=" & login_pass
  27. End If
  28. 'chaque ligne du sysprep est mise dans une variable
  29. sysprep_content = sysprep_content & VbCrLf & Line
  30. Loop
  31. 'on ferme le fichier ouvert en lecture
  32. objTextFile.Close
  33. 'on ouvre le fichier sysprep en ecriture
  34. Set objTextFile  = objFSO.OpenTextFile (sysprep_file, 2, True)
  35. 'on remplace le contenu par celui de la variable
  36. objTextFile.Write sysprep_content
  37. 'on ferme le fichier ouvert en écriture
  38. objTextFile.Close


Voila, j'espère que ca t'aidera :)

Reply

Marsh Posté le 23-04-2009 à 11:28:55    

Merci pour ta rapidité.
 
Je vais effectuer de tests. En tout cas c'est impressionnant.

Reply

Marsh Posté le 23-04-2009 à 11:29:46    

pas de prob ;)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed