Mai
15
2017

DHCP Option 119 / DomainSearchString auf Windows Server 2012

dhcpoption / © Maximilian Riess / Riess Group.

Beim Einsatz eines DHCP-Server unter Windows Server 2012 fällt auf, daß die Einstellung für die Domain Suchliste bei den angeschlossenen Clients nicht funktioniert.

Der Grund liegt darin, daß aktuelle Windows Versionen die Domain Search List über DHCP nicht unterstützen. Die entsprechenden Einträge müssen hier über die Group Policy verteilt werden, oder auf jeder Maschine manuell vorgenommen werden.

Um den MS DHCP-Server denoch mit den nötigen Einstellungen zu Versorgen, muss die entsprechende Option zuerst gelöscht, und als „multibyte array“ wieder angelegt werden. Danach kann man dem Server die Domainsearchlist über eine Liste von Hexadezimalwerten übergeben.

Dabei ist darauf zu achten, daß die einzelnen Domains durch ein NULL (0x00) voneinander getrennt sind, und die Zeichenanzahl als erstes übermittelt wird.

Da man mit den Windows Boardmitteln die entsprechenden Einstellung kaum vornehmen kann, wurde das nachfolgende PowerShell Script erstellt. Es

  • wandelt die DomainSuchliste in die entsprechende Hexadezimaldarstellung um
  • entfernt eine eventuell vorhandene SearchOption (die per Default im Format String definiert ist)
  • fügt die SearchOption im Format multivalue zu
  • setzt die vorbereitete DomainSuchliste

Das Script kann einfach in in Windows Powershell hineinkopiert werden. Nach Anpassung der gewünschten Domainsuchliste und der Servernamen des oder der DHCP-Server wird das Script durch drücken von F5 ausgeführt.

 

# Update DomainSearchList
# by RiessBusinessGroupGmbH
# 02.05.2017
# Servernames of DHCP-Servers
$serverarr=@("wsus001", "adm001", "adm002")

$domainSearchList = 'riess-group.net;riess-group.de'

$arr1= $domainSearchList -split "\;"
$c = ""
$hexarray = @();

foreach ($a1 in $arr1) 
{
 if ($c.length -gt 0) 
 {
 $c = $c + "0x00"
 $hexarray+= 0x00
 }

 $arr2 = $a1 -split "\."
 Foreach ($a2 in $arr2) 
 {
 $b=@()
 $b += $a2.Length
 $b += $a2.ToCharArray();
 Foreach ($element in $b) 
 {
 $c = $c + "0x" + [System.String]::Format("{0:X}", [System.Convert]::ToUInt32($element))
 $hexarray+= [System.Convert]::ToUInt32($element)
 }
 }
}
$hexarray+= 0x00

echo "info: data array: "
$string=""
foreach ($value in $hexarray) 
{
 $string+= " 0x"+$value
}
echo "$string `n"

foreach ($server in $serverarr) 
{
 echo "start with $server"
 echo "work on $server. remove predefined Option Definition"
 Remove-DhcpServerv4OptionDefinition -OptionId 119
 echo "work on $server. restore Option Definition with multivalued array"
 Add-DhcpServerv4OptionDefinition -Name “Domain Search List” -Description “Domain Suffix Search Order” -OptionId 119 -Type Byte -MultiValued
 echo "work on $server. set option value"
 set-DhcpServerv4OptionValue -OptionId 119 -Value $hexarray
 echo "work on $server completed.`n"
}
#End