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>