Mit folgendem AWK-Skript kann man aus einer Textdatei die netsh-Befehle erstellen, die man benötigt, um Adressreservierungen für den Windows 2008 R2 DHCP-Server auf der Konsole zu generieren.
Wie diese Textdatei einfach erstellt werden kann, findest Du hier.
#!/usr/bin/awk -f
# Copyright 2013 Christian Fuchs <>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
# MA 02110-1301, USA.
#
# ----------------------------
# Skript zum Erstellen der festen Adressvergabe im
# Windows 2008 R2 DHCP-Server
#
# Die Quelldatei wird aus einer nmap-XML-Datei per xsltproc
# generiert und hat folgenden Aufbau:
# IP-ADRESSE;MAC-ADRESSE;HOSTNAME
#
# Der Hostname kann ggf. leer sein.
#
#
# Aufruf der Datei:
# ./skript < quelle.txt
#
# Die Ausgabedatei besteht aus folgenden Befehlen, die auf dem
# Windows DHCP-Server ausgeführt werden müssen.
# Die IP-Adressen des Servers und des Bereichs (Scope) muessen angepasst
# werden. Siehe Variablen.
#
# netsh Dhcp Server \\10.10.16.190 Scope 10.10.16.0 Add reservedip 10.10.16.228 00137277585d "pc00137277585d.lan.local" "PC Foo Bar" "DHCP"
# ^^ Server ^^ ^^ Bereich ^^ ^ IP ^ ^ MAC-Adr. ^ ^^^ Hostname FQDN ^^^ ^ Kommentar (optional)^ ^ DHCP, BOOTP, oder beides ^
#
# Erlaeuterung zu gensub-Befehl
# gensub (Suchmuster, "ersetzen durch", "G", string)
# Das "G" sorgt dafuer, dass alle Vorkommen von "Suchmuster"
# ersetzt werden.
BEGIN {
FS=","; # Feldtrenner festlegen
SERVER="10.10.16.190";
SCOPE="10.10.16.0";
DOMAIN="lan.local"
}
{
# Ueberpruefen, ob der Hostname leer ist. Wenn ja, dann wird
# der Hostname aus der MAC-Adresse und einem vorangestellten "PC"
# generiert.
if ( $3 == "") {
# Ueberpruefen, ob in der Spalte 2 evtl. der Hostname steht
# Ueberpruefen, ob in Spalte 2 eine MAC steht
is_mac=match($2, /([0-9A-F][0-9A-F]:){5}[0-9A-F][0-9A-F]/);
# NEIN
if ( is_mac == 0 ) {
HOSTNAME=$2; # keine MAC, deswegen steht hier der Hostname
}
# JA
else {
# Es ist eine MAC. Dewegen generieren wir den Hostname wie oben
# beschrieben
HOSTNAME="pc"gensub(/:/, "", "G", $2)"." DOMAIN;
}
# Spalte 3 ist nicht leer
}
else
{
HOSTNAME=$3;
}
# Ueberpruefen, ob das 2. Feld eine MAC-Adresse ist
is_mac=match($2, /([0-9A-F][0-9A-F]:){5}[0-9A-F][0-9A-F]/);
if ( is_mac == 0 ) {
MAC="keine MAC";
}
else {
MAC=gensub(/:/, "", "G", $2);
}
# Ausgabe des Befehls
print "netsh dhcp server \\\\" SERVER " scope " SCOPE " add reservedip " $1 " "MAC " \"" HOSTNAME "\" " "\"Kommentar\" " "\"DHCP\"";
;
};