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.
Det første finner man inne i “properties” på selve MDT sharet.

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”.

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

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.

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.
Heisann.
Bra skrevet dette her! Føler at forståelsen for MDT økte litt.
Driver selv å lærer meg MDT 2010, men sliter litt med tanke på navngiving til maskiner. Standarden vi ønsker er: XXX-XXXXXX001 (og oppover).
Vet ikke om du har sett på dette før?
Antar at dere ønsker en så automatisk prosess som mulig i dette tilfellet?
Utfordringer for å få til dette ligger i:
1. Generering av maskinnavn i forhold til et gitt regelsett
2. Detektering av mulige navnekonflikter (f.eks at en maskin eksisterer i AD fra før)
3. Håndtering av omtanking (separat prosess i MDT) og oppdatering av maskin objekt i AD
4. Rettigheter knyttet til det å få lov å utføre manipulasjon av maskinobjekter i AD
Mange velger å etablere maskinobjektet i AD (m GUID) på forhånd som en del av innkjøps prosessen, hvor man ved hjelp av f.eks en innlesning direkte fra mottat leveranse fra maskin leverandøren (strekkoder med navn og GUID). Når objektet så allerede er i AD og man tanker, trenger man bare å tilpasse et skript som gjør oppslag i AD; finner sitt objekt og tar eierskap til det. Finnes en del eksempler på dette der ute i den digital sandkassen, f.eks Hvordan manipulere maskin objekter i AD
Vanskelig å svare direkte på dette da det er helt avhengig av hvilken strategi man velger, og hva som passer best inn i det eksisterende prosesslandskapet (livssyklus tjeneste for håndtering av maskinvare).
Har dere gjort noen tanker rundt dette?
En annen ting er hvilket OS man ønsker å tanke; da man må velge litt forskjellige strategier baser på om det er 2003/XP el 2008/Vista.