Teil 1: Allgemeine Problemstellungen

Shell Scripting unter Windows

Aktive Verbindungen

Wollen Sie für ein Shell-Kommando alle Computernamen verwenden, die gerade eine Verbindung mit Ihrem Server offen haben, können Sie dazu netstat verwenden (Sind Sie dagegen an den IP-Adressen anstelle der Hostnamen interessiert, verwenden Sie netstat mit der Option –n). Vorher müssen allerdings noch die Kopfzeilen ausgefiltert werden. Dies kann entweder durch eine Suche per find nach einem Doppelpunkt geschehen (die Ergebnishosts werden durch einen Doppelpunkt, gefolgt vom Port, ausgegeben), oder Sie verwenden more und schneiden mit der Option +4 die ersten vier Zeilen ab.

(for /F "usebackq tokens=3" %f in (`netstat ^| more +4`) do @for /F "delims=:" %g in ("%f") do @echo %g )| sort | uniq

Die Ausgabe von netstat wird zuerst um die Kopfzeilen gekürzt (hier mit more +4), danach dient diese Ausgabe per Backquoting als Input für die for-Schleife, mit der die einzelnen Zeilen zerlegt werden. Das dritte „Wort“ enthält den Remote-Hostnamen und den Port, getrennt durch einen Doppelpunkt. Diese Daten werden von der inneren Schleife am Doppelpunkt (delims=:) aufgeteilt, und der erste Teil wird ausgegeben. Die runden Klammern um die komplette Schleife dienen der Befehlsgruppierung, so dass die Ausgabe nur einmal und komplett durch die Filter läuft. Sollte ein Rechner auf mehr als einem Port eine Verbindung offen haben, taucht er in der Ergebnisliste mehrmals auf. Daher muss sie zuerst mit sort sortiert werden, und dann werden mit Hilfe von uniq die Duplikate entfernt. Unten finden Sie eine Beispielausgabe des Shell Scripts.

silicony.shellbook.local
rennsemmel.shellbook.local
bytebag.shellbook.local

Unter Windows 2003 SP1 funktioniert die Befehlszeile oben nicht und wird mit der Meldung "| ist an dieser Stelle syntaktisch nicht verarbeitbar" abgebrochen. Offensichtlich wurde dem Parser von den vielen Schleifen schwindlig. Die Alternative unten funktioniert auch unter Windows 2003 und filtert nach der Abarbeitung die Zeile mit den Spaltentiteln heraus.

(for /F "usebackq tokens=3" %f in (`netstat`) do @for Eine Zeile /F "delims=:" %g in ("%f") do @echo %g ) | find /V /i "adresse" | sort | uniq

silicony.shellbook.local
rennsemmel.shellbook.local
bytebag.shellbook.local

Bitte beachten Sie: Der Filter uniq ist nicht im Standardumfang von Windows XP oder 2003 enthalten. Sie können nun entweder die Ausgabe der Schleife in eine Datei umleiten und den „uniq“-Batch weiter unten im Kapitel „Dateiverwaltung“ benutzen, oder Sie installieren die GNU Unix Tools oder die Services for Unix von Microsoft. Eines der beiden Pakete sollten Sie aber auf Ihrem Server haben, Sie erleichtern sich die Arbeit nochmals deutlich.