MDT2013Logo1

J’ai été récemment amené à expliquer à un client le fonctionnement des fichiers Customsettings.ini et bootstrap.ini, j’en profite donc pour vous en faire un petit résumé.

  • Introduction

L’un des fichiers les plus importants dans MDT est CustomSettings.ini (ou bootstrap.ini).
Lorsque vous utilisez le MDT, le Toolkit utilisera un script appelé ZTIGather.wsf. Ce script va faire un inventaire et lire le CustomSettings.ini.  Cela se traduira par des informations stockées dans la mémoire (et dans un fichier) pendant le déploiement que nous pourons ensuite utiliser pour mettre à jour dynamiquement le fichier unattend.xml et contrôler des conditions dans les étapes de la TaskSequence.

Vous pouvez exécuter ce script sans déployer un OS, ainsi de cette façon vous pouvez tester les règles avant même de commencer le déploiement.
Pour ce faire :
Utilisez trace32.exe (placé ici dans e:\rep-trace\)
Créez un fichier batch comme celui-ci (changer les répertoires)

del C:\MININT\SMSOSD\OSDLOGS\VARIABLES.DAT /q
cscript.exe ZTIGather.wsf /inifile:..\Control\CustomSettings.ini
“E: \rep-trace\Trace32.exe” c:\minint\smsosd\osdlogs\bdd.log

Si le répertoire c:\Minint n’existe pas, le créer.
Lancez-le dans un cmd depuis l’emplacement de vos scripts (dans le deployment Share).

Le Customsettings.ini base ressemble à ceci :

customsettings01

La première section est intitulée [Settings].
Sur la ligne suivante se trouve la propriété Priority avec comme valeur : default.  Cela signifie qu’il va lire la section du même nom et de convertir toutes ces lignes en variable pour MDT.  Toutes les propriétés de la section [Default] sont intégrées dans MDT, il y a plus 100 propriétés qui peuvent être utilisées et la plupart d’entre elles sont documentées dans le fichier d’aide.  Si nous utilisons ZTIGather.wsf avec ce fichier (voir script ci-dessus), nous allons obtenir le résultat suivant :

customsettings02

  • Exemple d’utilisation du CustomSettings.ini

Supposons maintenant que vous souhaitez définir automatiquement certains paramètres en fonction de l’emplacement, comme le nom de l’ordinateur, la langue, le fuseau horaire, etc. Dans ce cas, nous pourrions utiliser la passerelle par défaut comme un identificateur pour l’emplacement et utiliser une partie du numéro de série pour calculer un nom unique pour l’ordinateur basé sur l’emplacement et le numéro de série, ajoutons également portable ou desktop dans le nom. Ex : si l’ordinateur portable est situé à Paris  le nom devrait être PAR-LT-0123456 et si un bureau est situé à Toulouse, il serait appelé TOU-DT-0123456.

[Settings]
Priority=Init, ByLaptop, ByDesktop, DefaultGateway, Default
Properties=ComputerLocationName, ComputerTypeName, ComputerSerialNumber

[Init]
 ComputerSerialNumber=#Left(“%SerialNumber%”,7)#

[ByLaptop]
 SubSection=Laptop-%IsLapTop%

[Laptop-True]
ComputerTypeName=LT

[ByDesktop]
 SubSection=Desktop-%IsDesktop%

[Desktop-True]
 ComputerTypeName=DT

[DefautGateway]
10.0.2.4=paris
160.125.2.4=toulouse

[Paris]
 ComputerLocationName=PAR

[Toulouse]
 ComputerLocationName=TOU

[Default]
 OSInstall=Y
 ComputerLocationName=INC
 ComputerTypeName=INC
 OSDComputername=%ComputerLocationName%-%ComputerTypeName%-%ComputerSerialNumber%
 SkipCapture=NO
 SkipAdminPassword=YES
 SkipProductKey=YES
 SkipComputerBackup=NO
 SkipBitLocker=NO

Explicatif du fichier ini :
• Section Settings

Nous avons ajouté « Init, ByLaptop, ByDesktop et DefaultGateway » à la propriété Priority.
La propriété « CustomProperties » permet d’initier des variables que nous utiliserons plus tard.

[Settings]
Priority=Init, ByLaptop, ByDesktop, DefaultGateway, Default
Properties=ComputerLocationName, ComputerTypeName, ComputerSerialNumber

• Section Init

La section Init va utiliser le numéro de série (qui a été inventorié par le script), choisir les sept caractères à gauche et mettre cela dans la propriété ComputerSerialNumber.

[Init]
 ComputerSerialNumber=#Left(“%SerialNumber%”,7)#

• Section ByLaptop et ByDesktop

Le Script passe à la section indiquer dans Subsection si elle existe.
Pour cela nous utilisons des variables qui renvoi True ou False, ici %IsLapTop% et % IsDeskTop%

[ByLaptop]
 SubSection=Laptop-%IsLapTop%

[Laptop-True]
ComputerTypeName=LT

[ByDesktop]
 SubSection=Desktop-%IsDesktop%

[Desktop-True]
 ComputerTypeName=DT

• Section DefaultGateway

La section DefaultGateway dans MDT permet de récupérer la passerelle et de passer des paramètres en fonction de celle-ci.
Ici nous utiliserons cette fonctionnalité pour passer dans une autre section.

[DefautGateway]
10.0.2.4=paris
160.125.2.4=toulouse

[Paris]
 ComputerLocationName=PAR

[Toulouse]
 ComputerLocationName=TOU

• Section Default

C’est la dernière section qui sera exécutée (ordre de la propriété Priority).
Les propriétés déjà implémentées ne sont pas écrasées (Attention il existe des exceptions).
Nous mettrons donc une valeur par défaut à nos variables de construction du nom machine en cas de passerelle inconnue.

[Default]
 OSInstall=Y
 ComputerLocationName=INC
 ComputerTypeName=INC
 OSDComputername=%ComputerLocationName%-%ComputerTypeName%-%ComputerSerialNumber%
 SkipCapture=NO
 SkipAdminPassword=YES
 SkipProductKey=YES
 SkipComputerBackup=NO
 SkipBitLocker=NO
  • Customsettings ou Bootstrap ?

CustomSettings.ini : Fichier de configuration principal pour les règles de traitement utilisées dans tous les scénarios. Le fichier reste dans le dossier de déploiement.
BootStrap.ini : Fichier de configuration utilisé lorsque l’ordinateur cible n’est pas en mesure de se connecter au point de déploiement approprié. Cette situation survient dans un scénario de nouvel ordinateur et pour l’ordinateur de remplacement d’un scénario de remplacement d’ordinateur. Le fichier BootStrap.ini est intégré dans l’image de boot.
Attention : toutes les propriétés ne sont pas valides avec le bootstrap.ini

  • Aperçu des propriétés possibles dans les ini
_SMSTSOrgName OSDAdapterxEnableTCPFiltering
ADDSLogPath OSDAdapterxEnableTCPIPFiltering
ADDSPassword OSDAdapterxEnableWINS
ADDSUserDomain OSDAdapterxGatewayCostMetric
ADDSUserName OSDAdapterxGateways
Administrators OSDAdapterxIPAddressList
AdminPassword OSDAdapterxIPProtocolFilterList
Applications OSDAdapterxMacAddress
ApplicationSuccessCodes OSDAdapterxName
ApplyGPOPack OSDAdapterxSubnetMask
Architecture OSDAdapterxTCPFilterPortList
AreaCode OSDAdapterxTCPIPNetBiosOptions
AssetTag OSDAdapterxUDPFilterPortList
AutoConfigDNS OSDAdapterxWINSServerList
AutoMode OSDAdapterCount
AutoUsers OSDAnswerFilePath
BackupDir OSDBitLockerCreateRecoveryPassword
BackupDrive OSDBitLockerMode
BackupFile OSDBitLockerRecoveryPassword
BackupShare OSDBitLockerStartupKey
BDEAllowAlphaNumericPin OSDBitLockerStartupKeyDrive
BDEDriveLetter OSDBitLockerTargetDrive
BDEDriveSize OSDBitLockerWaitForEncryption
BDEInstall OSDComputerName
BDEInstallSuppress OSDDiskAlign
BDEKeyLocation OSDDiskIndex
BDEPin OSDDiskOffset
BDERecoveryKey OSDDiskPartBiosCompatibilityMode
BDEWaitForEncryption OSDImageCreator
BitsPerPel OSDImageIndex
BuildID OSDImagePackageID
CapableArchitecture OSDInstallEditionIndex
CaptureGroups OSDInstallType
ChildName OSDisk
ComputerBackupLocation OSDPartitions
ComputerName OSDPartitionsxBootable
ConfigFileName OSDPartitionsxFileSystem
ConfigFilePackage OSDPartitionsxQuickFormat
ConfirmGC OSDPartitionsxSize
CountryCode OSDPartitionsxSizeUnits
CriticalReplicationOnly OSDPartitionsxType
CustomDriverSelectionProfile OSDPartitionsxVolumeLetterVariable
CustomPackageSelectionProfile OSDPartitionsxVolumeName
CustomWizardSelectionProfile OSDPreserveDriveLetter
Database OSDStateStorePath
DatabasePath OSDTargetSystemDrive
DBID OSDTargetSystemRoot
DBPwd OSFeatures
Debug OSInstall
DefaultGateway OSRoles
DeployDrive OSRoleServices
DeploymentMethod OSSKU
DeploymentType OSVersion
DeployRoot OSVersionNumber
DestinationDisk OverrideProductKey
DestinationLogicalDrive PackageGroup
DestinationPartition Packages
DHCPScopes PackageSelectionProfile
DHCPScopesxDescription Parameters
DHCPScopesxEndIP ParameterCondition
DHCPScopesxExcludeEndIP ParentDomainDNSName
DHCPScopesxExcludeStartIP Password
DHCPScopesxIP Phase
DHCPScopesxName Port
DHCPScopesxOptionDNSDomainName PowerUsers
DHCPScopesxOptionDNSServer PrepareWinRE
DHCPScopesxOptionLease Priority
DHCPScopesxOptionNBTNodeType ProcessorSpeed
DHCPScopesxOptionPXEClient Product
DHCPScopesxOptionRouter ProductKey
DHCPScopesxOptionWINSServer Properties
DHCPScopesxStartIP ReplicaDomainDNSName
DHCPScopesxSubnetMask ReplicaOrNewDomain
DHCPServerOptionDNSDomainName ReplicationSourceDC
DHCPServerOptionDNSServer ResourceDrive
DHCPServerOptionNBTNodeType ResourceRoot
DHCPServerOptionPXEClient Role
DHCPServerOptionRouter SafeModeAdminPassword
DHCPServerOptionWINSServer ScanStateArgs
Dialing SerialNumber
DisableTaskMgr SiteName
DNSServerOptionBINDSecondaries SkipAdminAccounts
DNSServerOptionDisableRecursion SkipAdminPassword
DNSServerOptionEnableNetmaskOrdering SkipApplications
DNSServerOptionEnableRoundRobin SkipBDDWelcome
DNSServerOptionEnableSecureCache SkipBitLocker
DNSServerOptionFailOnLoad SkipBuild
DNSServerOptionNameCheckFlag SkipCapture
DNSZones SkipComputerBackup
DNSZonesxDirectoryPartition SkipComputerName
DNSZonesxFileName SkipDomainMembership
DNSZonesxMasterIP SkipFinalSummary
DNSZonesxName SkipGroupSubFolders
DNSZonesxScavenge SkipLocaleSelection
DNSZonesxType SkipPackageDisplay
DNSZonesxUpdate SkipProductKey
DoCapture SkipRearm
DomainAdmin SkipRoles
DomainAdminDomain SkipSummary
DomainAdminPassword SkipTaskSequence
DomainLevel SkipTimeZone
DomainNetBiosName SkipUserData
DomainOUs SkipWizard
DoNotCreateExtraPartition SLShare
DoNotFormatAndPartition SLShareDynamicLogging
DriverGroup SMSTSAssignUserMode
DriverInjectionMode SMSTSRunCommandLineUserName
DriverPaths SMSTSRunCommandLineUserPassword
DriverSelectionProfile SMSTSUdaUsers
EventService SQLServer
EventShare SQLShare
FinishAction StatePath
ForceApplyFallback StorageDriverGroup
ForestLevel StorageDriverSysprepGroup
FullName StoredProcedure
GPOPackPath SupportsHyperVRole
Groups SysPrepDriverSelectionProfile
HALName SystemLocale
HideShell SysVolPath
OSHome_Page Table
HostName TaskSequenceID
ImagePackageID TaskSequenceName
InputLocale TaskSequenceVersion
InstallPackageID TimeZone
Instance TimeZoneName
IPAddress TPMOwnerPassword
IsDesktop UDDir
IsHypervisorRunning UDProfiles
IsLaptop UDShare
IsServer UILanguage
IsServerCoreOS UserDataLocation
IsServerOS UserDomain
IsUEFI UserID
IsVM UserLocale
JoinDomain UserPassword
JoinWorkgroup USMT3
KeyboardLocale USMTConfigFile
KeyboardLocalePE USMTLocal
LanguagePacks USMTMigFiles
LoadStateArgs USMTOfflineMigration
Location UUID
LongDistanceAccess ValidateDomainCredentialsUNC
MACAddress VHDCreateDiffVHD
MachineObjectOU VHDCreateFileName
Make VHDCreateSizeMax
MandatoryApplications VHDCreateSource
Memory VHDCreateType
Model VHDDisks
NetLib VHDInputVariable
NewDomain VHDOutputVariable
NewDomainDNSName VHDTargetDisk
Order VMHost
OrgName VMName
OSArchitecture VMPlatform
OSCurrentBuild VRefresh
OSCurrentVersion VSSMaxSize
OSDAdapterxDescription WDSServer
OSDAdapterxDNSDomain WindowsSource
OSDAdapterxDNSServerList WipeDisk
OSDAdapterxDNSSuffix WizardSelectionProfile
OSDAdapterxEnableDHCP WSUSServer
OSDAdapterxEnableDNSRegistration WUMU_ExcludeKB
OSDAdapterxEnableFullDNSRegistration WUMU_ExcludeID
OSDAdapterxEnableLMHosts XResolution
OSDAdapterxEnableIPProtocolFiltering YResolution