MDT 2010 bak gardinen

I denne posten ønsker jeg å gå litt i dybden på MDT 2010 for å vise litt av hva som surrer og går i bakgrunnen. Hele systemet er bygget opp av skript som kaller andre skript basert på hvilke oppgaver man ønsker å utføre. Jeg har derfor valgt å beskrive prosessen jeg gikk igjennom for å få til noe så enkelt som å sette navnet på maskinen under tanking. Bli med på et dykk i sysprep og triksing med variabler i MDT-skriptene.

Etter å ha fiklet en del med MDT 2010 RC for å kunne raskt tanke servere ble jeg budt på en liten utfordring. Normalt når man lager et image så gjøres dette ved å kjøre sysprep kommandoen på operativsystemet man ønsker image av. Dette er greit nok, men det mange muligens glemmer er at filene som trengs for å “syspreppe” operativsystemet må ligge under C:\Sysprep katalogen. Hvis ikke så vil heller ikke MDT skriptene klare å gjøre jobben sin. Det interessante her er hva som ligger i sysprep.inf filen under samme katalog. Tradisjonelt ligger det en del statiske data her, men ved å bruke MDT kan disse endres før man starter opp i operativsystemet etter tanking. Dette gjør igjen at man kan automatisere hele syprep steget.

La oss begynne med litt MDT:
Når man kommer inn i grensesnittet er det to ting som er interessant for oss.

MDT_menyDet første finner man inne i “properties” på selve MDT sharet.

MDT_ComputerName
Under “Rules” setter man en del av de innstillingen man ønsker å automatisere. Det jeg ønsker å ta for meg her er “SkipComputerName” innstillingen som sier om vinduet der man kan taste inn maskinnavnet under tanking skal dukke opp eller ikke. Etter som vi har satt denne til nei, vil vinduet for dette dukke opp for oss under tanking.
Videre ønsker vi å ta en kikk inn i selve motoren for MDT, nemlig “Task Sequencing”.

MDT_TaskS
Det er her magien skjer og hvor hvert steg som skal tas under selve utrullingen defineres. 

MDT_TaskSComputerN

Inne i selve oppgavemotoren har jeg definert et steg etter installasjon av operativsystemet, hvor jeg kaller et skript jeg laget for å dytte inn maskinnavnet som blir skrevet inn under tanking i vinduet som dukker opp der. Altså det vi definerte i steget over skulle vises under tanking.

Under er skriptet som utfører flyttingen av maskinnavnet fra variabelen den ligger i til riktig sted i sysprep.inf filen.

InputPCName.wsf :

<job id=”InputPCName”>
<script language=”VBScript” src=”ZTIUtility.vbs”/>
<script language=”VBScript”>
‘ //***************************************************************************
‘ // ***** InputPCName *****
‘ //
‘ // Solution: Solution Accelerator for Microsoft Deployment
‘ // File: InputPCName.wsf
‘ //
‘ // Purpose: InputPCName in Sysprep.inf file
‘ //
‘ // Usage: cscript InputPCName.wsf
‘ //
‘ // Customer Build Version: 1.0.0
‘ // Customer Script Version: 1.0.0
‘ // Customer History:
‘ //
‘ // ***** End Header *****
‘ //***************************************************************************
‘//—————————————————————————
‘//
‘// Global constant and variable declarations
‘//
‘//—————————————————————————-
Option Explicit
Dim iRetVal
‘//—————————————————————————-
‘// End declarations
‘//—————————————————————————-
‘//—————————————————————————-
‘// Main routine
‘//—————————————————————————-
On Error Resume Next
iRetVal = ZTIProcess
ProcessResults iRetVal
On Error Goto 0
‘//—————————————————————————
‘//
‘// Function: ZTIProcess()
‘//
‘// Input: None
‘//
‘// Return: Success – 0
‘// Failure – non-zero
‘//
‘// Purpose: Perform main ZTI processing
‘//
‘//—————————————————————————
Function ZTIProcess()
    dim strPCname
    dim sSysprepInf
   
    iRetVal = Success
    ZTIProcess = iRetval
   
    sSysprepInf = oEnvironment.Item(“DeploySystemDrive”) & “\sysprep\Sysprep.inf”
    strPCName = oEnvironment.Item(“OSDCOMPUTERNAME”)
    If strPCName <> “” then
    oUtility.WriteIni sSysprepInf, “Userdata”, “ComputerName”, strPCName
    End if
    ‘ Viser bare en boks med hva navnet på maskinen blir.
    ‘ MsgBox “MaskinNavn: ” & strPCName, 0, “info”
 
End Function
</script>
</job>

 

Det som er vert å merke seg her er variablene OSDCOMPUTERNAME, det er i denne maskinnavnet blir lagret. Dette er en av flere variable som eksisterer igjennom hele tankeløpet og kan hentes og endres på som man ønsker. Det er også fult mulig å lage egene variabler som fungerer på akkurat samme måte som den for maskinnavn.

Det andre verdt å merke seg er hva linjen under gjør i skriptet:
 oUtility.WriteIni sSysprepInf, “Userdata”, “ComputerName”, strPCName

Her foretas den faktiske skrivingen til sysprep.inf filen som nå er til stede ettersom dette skrittet kjøres etter at selve OS-installasjonen er ferdigstilt. Selve funksjonen som brukes er standard i MDT og kan brukes til å skrive inn forskjellige innslag til sysprep.inf filen. Her har jeg valgt å skrive inn verdien i OSDCOMPUTERNAME til sysprep.inf filen som ligger lokalt på det ferdigtankede operativsystemet ( under C:\Sysprep ). En annen ting som er verdt å merke seg er at denne verdien må ikke skrives inn i sysprep.inf filen når man sysprepper donor maskinen.
Dette gjelder for alle verdier man ønsker å endre på dynamisk under selve tanke prosessen.

Det som mangler nå er å faktisk få det skriptet som ble laget over til den tankede serveren. Dette gjøres ved å editere LTICopyScripts.wsf filen som ligger under MDT sharet og scripts katalogen.

MDT_ScriptCopy

I dette skriptet legger vi til navnet på vårt skript som vist over. Det nye skriptet må også legges i samme katalog som de andre skriptene.

God tankefornøyelse.

Om Morten Lerudjordet

Tidligere medarbeider i ErgoGroup med bred erfaring som infrastruktur arkitekt og med kompetanse på enterprise løsninger, sikkerhet og Microsoft infrastruktur komponenter.