Teil 1: Allgemeine Problemstellungen

Shell Scripting unter Windows

Liste von Computernamen erstellen

Falls Sie ein Kommando auf mehr als einer Maschine ausführen oder mehr als einen Server abfragen wollen, benötigen Sie eine Liste der entsprechenden Rechner. Diese können Sie manuell erstellen und pflegen, oder Sie holen sich die Daten aus dem System. Es gibt sicher mehr als die folgenden drei Möglichkeiten, aber damit haben Sie einige Ideen, woher Sie eine dynamisch erzeugte Liste von Hostnamen bekommen.

DNS

In den Support Tools enthalten ist das Kommando dnscmd.exe, mit dem Sie die Verwaltung des DNS-Servers über die Kommandozeile erledigen können. Mit Hilfe dieses Kommandos lassen sich auch die Einträge einer DNS-Zone auflisten, sogar gefiltert nach Typen. Um alle Adresseinträge (Type A) einer Zone aufzulisten, können Sie die nachfolgend aufgeführte Befehlszeile verwenden (ersetzen Sie dabei shellbook.local durch den Namen Ihrer Domain).

C:\tmp>dnscmd /enumrecords shellbook.local @ /Type A

Returned records:
@ [Aging:3552106] 600 A 192.168.229.11
silicony [Aging:3552106] 3600 A 192.168.229.11
bytebag [Aging:3552106] 3600 A 192.168.229.12
rennsemmel [Aging:3552106] 3600 A 192.168.229.14
Command completed successfully.

Sie müssen nur noch die nicht benötigten Zeile ausfiltern, beispielsweise über more und find, und erhalten dann eine Liste aller Hosts in dieser DNS-Zone.

dnscmd /enumrecords shellbook.local shellbook.local.
/Type A | more +2 | find /v /i "command completed"

AD (dsquery)

Ein anderer Weg ist das Auslesen der entsprechenden Rechnernamen aus dem Active Directory. Sie geben den Container als Parameter für eine Suche mit Hilfe von dsquery an und lassen das Attribut cn alle Unterobjekte (-scope onelevel) ausgeben. Die Option -q bewirkt das Unterdrücken der Kopfzeilen und anderer unwichtiger Ausgaben.

C:\tmp>dsquery * cn=Computers,dc=shellbook,dc=local -
attr cn -q -scope onelevel

BYTEBAG
SILICONY
RENNSEMMEL

C:\tmp>