Forum de Gentil Kiwi . com

Le forum officiel du site, discussions, aide, astuces...

Vous n'êtes pas identifié.

#1 21-08-2008 09:13:29

eljub
Nouveau membre
Date d'inscription: 19-06-2008
Messages: 6

Injecter PC Name dans image Wim

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:

USE SYSPREP
SET INI [Identification] DomainAdminPassword := %password%
SET INI [Identification] DomainAdmin := %username%
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.

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


Don't be nervous, stay cool !

Hors ligne

 

#2 07-09-2008 14:43:27

Gentil Kiwi
Administrateur de Kiwis
Lieu: Vers Paris
Date d'inscription: 24-07-2006
Messages: 422
Site web

Re: Injecter PC Name dans image Wim

Bonjour,

Dans un cadre de déploiement automatisé de tant de configuration, il faut mieux passer par une installation de Windows Deployment Services qui intégrera toutes les problématiques de nom de domaine et nom d'ordinateur :

- http://technet.microsoft.com/en-us/libr … 72106.aspx
- http://www.microsoft.com/downloads/deta … 6B79D73301

Le WDS est inclus dans le KIT d'installation automatisé de Windows.


Si l'on veut s'en passer, l'on passe par des bricolages plus alambiqué :

- NETDOM pour joindre le domaine (Microsoft)
- GhWalk32 (Symantec) ou NewSid (Microsoft/Sysinternals) pour changer le nom du PC et son SID

Bonne chance

Hors ligne

 

#3 06-11-2008 09:18:45

eljub
Nouveau membre
Date d'inscription: 19-06-2008
Messages: 6

Re: Injecter PC Name dans image Wim

Je reviens car j'ai trouvé un 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

Merci pour les pistes wink

Nonne journée


Don't be nervous, stay cool !

Hors ligne

 

#4 18-12-2008 13:17:58

stanach
Nouveau membre
Date d'inscription: 18-12-2008
Messages: 1

Re: Injecter PC Name dans image Wim

Bonjour, peux tu nous faire part d'une copie de ton script svp?

Hors ligne

 

#5 18-12-2008 13:41:30

eljub
Nouveau membre
Date d'inscription: 19-06-2008
Messages: 6

Re: Injecter PC Name dans image Wim

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:

REM Appel du script pour ghoster le PC
REM le premier argument est pour les partitions (A = ALL, C = que le C:, D = C: + D:)
REM le second argument est le nom de l'image à appliquer, elle devra etre dans \\S-AGRI-BOWIS\support$\PCSUPPORT\images-xp\AIK\Images
cscript .\script\space_disk_new.vbs A agrisp3.wim

if %errorlevel% EQU 0 goto batch ELSE goto error

REM lancement du batch de restauration
:batch
%temp%\batch.cmd    

:error
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:

'######################################################################################################
'#                                                                                                    #
'#                                       Script by Julien Baldini                                     #
'#                         - Demande du login/pass + PC name                                          #
'#                         - Création et formatage des partitions                                     #
'#                         - Application de l'image sur le pc                                         #
'#                         - Reboot du pc                                                             #
'#                                                                                                    #
'######################################################################################################

Dim ArgObj
'cet objet va contenir tous les paramètres passé en arguments au vbs
Set ArgObj = WScript.Arguments
'argument 0, contient l'info des partitions
' A = ALL         (tout sera effacé et recréé, application uniquement d'une image sur le C:)
' C = Que le C: (le c: sera effacé)
' D = C + D     (tout sera effacé et recréé, application d'une image sur le C: et le D:)
nb_part = ArgObj(0)
'argument 1, contient le nom de l'image à appliquer
image_to_apply = ArgObj(1)
'Je libère l'objet qui contenait les paramètres passé en arguments
Set ArgObj = Nothing
    
login = InputBox("Enter your login" & vbCr & vbCr & "!!! 7 characters long !!!" & vbCr & vbCr & "!!! No case sensitive !!!","Enter your login")

pass = InputBox("Enter your password" & vbCr & vbCr & "!!! CASE SENSITIVE !!!","Enter your password")

bx = InputBox("Enter the computername","Enter your password")

'je détermine la taille du disque afin de créer les partitions adéquates
For Each objDiskDrive In GetObject("winmgmts:{impersonationLevel=impersonate}\\.\root\cimv2").InstancesOf("Win32_DiskDrive")

size = CLng(objDiskDrive.Size/1024/1024/1024)
id=objDiskDrive.Index
'WScript.Echo "size=" & size & " id=" & id

 If id = 0 Then
 
   Set objShell = CreateObject("WScript.Shell")
 
   'si le disque fait 60Go ou plus
   If size >= 60 Then

     WScript.Echo "Disque plus grand que 60Go"
     
     part1_space = 40000
     part2_space = 20000
     
     WScript.Echo "Partition C: " & part1_space/1000 & " Go"
     WScript.Echo "Partition D: " & part2_space/1000 & " Go"
     WScript.Echo "Partition E: " & size-(part1_space/1000)-(part2_space/1000) & " Go"
     
   'Si le disque fait moins de 60Go
   Else
  
     WScript.echo "Disque plus petit que 60Go" 
   
     'Si le disque fait plus de 20Go et moins de 60Go
     If size > 30 Then
   
          WScript.Echo "Disque de : " & size & "Go"
     
       part1_space = 10000
       part2_space = 20000
       
       WScript.Echo "Partition C: " & part1_space/1000 & " Go"
       WScript.Echo "Partition D: " & part2_space/1000 & " Go"
       WScript.Echo "Partition E: " & size-(part1_space/1000)-(part2_space/1000) & " Go"

     'Si le disque fait 20Go ou moins
     Else
   
          WScript.Echo "Disque de : " & size & "Go"
     
       part1_space = 8000
       part2_space = 7000
       
       WScript.Echo "Partition C: " & part1_space/1000 & " Go"
       WScript.Echo "Partition D: " & part2_space/1000 & " Go"
       WScript.Echo "Partition E: " & size-(part1_space/1000)-(part2_space/1000) & " Go"

     End If    

   End If
   
   'commande de création des partitions et du formatage de celles-ci en fonction de la demande (ALL ou que le C:)
   If (UCase(nb_part) = "A") Or (UCase(nb_part) ="D") Then
   
        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  "
   
   End If
   
   If ucase(nb_part) = "C" Then
   
        aefdisk="aefdisk32.exe /activate:1 /mbr /format:1:SYSTEM  "
   
   End If
   
   'création du fichier batch qui lancera la restauration
   Set objFSO = CreateObject("Scripting.FileSystemObject")
   temp=objShell.ExpandEnvironmentStrings("%temp%")
   
   Set batch2  = objFSO.OpenTextFile ( temp & "\batch.cmd", 2, True)
   
   'commande de restauration de l'image
   imagex_c="imagex.exe /apply ..\Images\" & image_to_apply & " 1 c:"
   imagex_d="imagex.exe /apply ..\Images\" & image_to_apply & " 2 d:"

   batch2.Writeline "echo ON"
   batch2.Writeline "REM Formatage des partitions"   
   batch2.Writeline aefdisk
   batch2.Writeline "REM Application de l'image sur le C:"    
   batch2.Writeline imagex_c
   batch2.Writeline "if %errorlevel% neq 0 goto end"
   batch2.Writeline "echo off"
   batch2.Writeline "cscript.exe .\script\modif_sysprep.vbs " & bx & " " &  login & " " &  pass
   
   If UCase(nb_part) = "D" Then
   
           batch2.Writeline "REM Application de l'image sur le D:"    
           batch2.Writeline imagex_d
           batch2.Writeline "if %errorlevel% neq 0 goto end"
           batch2.Writeline "echo off"
   
   End If
   
   batch2.Writeline "exit"
   batch2.Writeline ":end"
   batch2.Writeline "Echo off"
   batch2.Writeline "cls"   
   batch2.Writeline "Echo 'Erreur lors de l'application de imagex'"
   batch2.Writeline "Echo 'Erreur: %errorlevel% '"   
   batch2.close
 
 End If 

Next

Set objHDinfo = Nothing
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:

Set objFSO = CreateObject("Scripting.FileSystemObject")

sysprep_file = "c:\sysprep\sysprep.inf"

'on ouvre le fichier sysprep en lecture
Set objTextFile  = objFSO.OpenTextFile (sysprep_file, 1)

Dim ArgObj
'cet objet va contenir tous les paramètres passé en arguments au vbs
Set ArgObj = WScript.Arguments
'Set countarg=WScript.Arguments.Count

bx=ArgObj(0)
login=ArgObj(1)
login_pass=ArgObj(2)

sysprep_content = Null

Do Until objTextFile.AtEndOfStream
    
    Line = objTextFile.Readline

    'création de la ligne contenant le computername
    If ucase(Left(Line,13)) = "COMPUTERNAME=" Then
    
        Line = "Computername=" & bx
    
    End If

    'création de la ligne contenant le login qui insérera le pc dans le domaine
    If ucase(left(Line,17)) = "DOMAINADMIN=NET1\" Then
    
        Line = "DomainAdmin=net1\" & login
    
    End If

    'création de la ligne contenant le password du login
    If ucase(left(Line,20)) = "DOMAINADMINPASSWORD=" Then
    
        Line = "DomainAdminPassword=" & login_pass
    
    End If
    
    'chaque ligne du sysprep est mise dans une variable
    sysprep_content = sysprep_content & VbCrLf & Line

Loop

'on ferme le fichier ouvert en lecture
objTextFile.Close

'on ouvre le fichier sysprep en ecriture
Set objTextFile  = objFSO.OpenTextFile (sysprep_file, 2, True)
'on remplace le contenu par celui de la variable
objTextFile.Write sysprep_content
'on ferme le fichier ouvert en écriture
objTextFile.Close

Voila, j'espère que ca t'aidera smile


Don't be nervous, stay cool !

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr