WinFuture-Forum.de: Praktische Kommandozeilen-befehlsketten - WinFuture-Forum.de

Zum Inhalt wechseln

Hinweis

Alle neuen Themen werden vor der Veröffentlichung durch einen Moderator geprüft und sind deshalb nicht sofort sichtbar.
Seite 1 von 1

Praktische Kommandozeilen-befehlsketten

#1 Mitglied ist offline   sкavєи 

  • Gruppe: aktive Mitglieder
  • Beiträge: 6.447
  • Beigetreten: 20. Juli 04
  • Reputation: 57

geschrieben 14. Juni 2008 - 07:32

Hi,

ich werde hier einige praktische NT-Befehlsketten veroeffentlichen, welche ich in letzter Zeit öfters brauche und von denen ich denke, dass sie anderen auch irgendwann mal helfen könnten. Ich werde das ganze hier immer mal wieder von Zeit zu Zeit erweitern, sobald ich wieder interessante Codeschnipsel habe.



Anmerkungen

Textsyntax
In den Zwischentexten und Erläuterungen, werde ich zur leichteren Verständlichkeit die Befehle kursiv und blau darstellen und Variablen werden orange dargestellt sein. Dies entspricht übrigens den Farben des Syntax-Highlighters von Notepad++ (ausser dass Befehle dort fett und nicht kursiv dargestellt sind).

Scriptform
Ich werde die Befehle hier in der Form reinstellen, wie ich sie in meinen Scripten verwende. Möchte man die Befehle direkt innerhalb der Kommandozeile nutzen so ist es notwendig bei allen for-Schleifen das %%i durch %i zu ersetzen.

WMI
Der von mir sehr häufig verwendete Befehl wmic gehört zu den Windows Management Instrumentations (kurz: WMI). Diese sind seit Windows 2000 integraler Bestandteil von Windows und funktionieren in jeder nachfolgenden Version. Bei der ersten Verwendung des Befehls wmic wird die Ausführung etwas laenger dauern, da die entsprechenden WMI-Komponenten erst installiert werden muessen.

Kompatibilität
Alle Codeschnipsel wurden von mir unter Windows XP geschrieben und getestet. Es kann jedoch sein, dass z.B. der WMI-Output unter anderen Systemen (insbesondere Vista) anders aussieht, bzw. andere oder mehr Inhalte hat. In solchen Fällen muessen die Befehle natürlich entsprechend angepasst werden. Grundsätzlich sollten sie aber auf allen Systemen seit Windows 2000 funktionieren.

Codeboxen
Ich verwende hier auch für wenige Zeilen Codeboxen um den ansonsten vorhandenen Zeilenumbruch zu verhindern. Leider bleibt dadurch eine grosse weisse Flaeche unterhalb der Codezeilen dies lässt sich leider nicht verhindern.



Codeschnipsel

Laufwerksbuchstabe eines Laufwerks mit bestimmtem Namen herausfinden
Dies hier benötigte ich um eine automatisierte Treiberinstallation vom USB-Stick waehrend der Windows-Installation durchzufuehren.
Das ganze lässt sich mit einer kleinen Änderung des wmic-Kommandos (CD-Laufwerke statt logische Partitionen auslesen) auch für die direkte Installation von Treibern und/oder Software von der Windows-CD verwenden. Dies ist dann eine weit schönere Lösung als sie z.B. auf windows-unattended.de empfohlen wird, da man bei meiner Lösung keine Extra-Datei auf der CD haben muss nach der die Schleife sucht.

Der Computer gibt mit Hilfe von wmic alle logischen Laufwerke aus und filtert dann mit find das Laufwerk mit der Bezeichnung DRIVERS heraus. Danach wird aus der entstandenen Ausgabe mit Hilfe der for-Schleife der Laufwerksbuchstabe als Variable %instdrv% ausgegeben.
REM Suche Laufwerk mit der Bezeichnung "DRIVERS" und setze den Laufwerksbuchstaben als Variable %instdrv%
for /f "tokens=1" %%i in ('"wmic logicaldisk | find /i "DRIVERS""') do set instdrv=%%i


Rechnermodell auslesen
Dies hier benötigte ich um die Installation der Treiber für viele gleiche Rechner zu automatisieren. Da die direkte Integration der Treiber oftmals nicht funktionierte, wollte ich lieber die zugehörigen Installer für jedes Modell einzeln ausführen.

Hier wird mit wmic zuerst der Hersteller, dann die Modellserie und das Modell ausgelesen. Die erste for-Schleife liest ganz einfach den Hersteller aus und setzt das Ergebnis in die Variable %Vendor%.
Die zweite Schleife kürzt die ausgabe noch einmal auf das erste Wort. Wenn die Ausgabe also "Dell Computer Corporation" lautete, so steht danach in der Variable %Vendor% nur noch "Dell".
Die dritte for-Schleife liest die Modellserie und das Modell aus und setzt diese in die Variable %Model%.
Da sich Modellserie und Modellname nur gemeinsam auslesen lassen, wird die Variable %Model% der dritten und vierten Schleife nochmals in die Modellserie und das genaue Modell aufgeteilt und jeweils in die Variablen %ModelSeries% und %ModelName% gesetzt.
Angenommen es handelt sich bei dem Computer um einen Dell OptiPlex 755, so erhalten wir hiermit die drei Werte:
%Vendor%=Dell
%ModelSeries%=OptiPlex
%ModelName%=755
REM Ueberpruefe Hersteller
for /F "tokens=2 Delims==" %%i in ('wmic csproduct get vendor /value') do @set Vendor=%%i
REM Verwende nur das erste Wort der Hersteller-Bezeichnung
for /F "tokens=1 Delims= " %%i in ('echo %Vendor%') do @set Vendor=%%i
REM Check for Model
for /F "tokens=2 Delims==" %%i in ('wmic csproduct get name /value') do @set Model=%%i
REM Ueberpruefe Moedellserie
for /F "tokens=1 Delims= " %%i in ('echo %Model%') do @set ModelSeries=%%i
REM Uberpruefe Modellname
for /F "tokens=2 Delims= " %%i in ('echo %Model%') do @set ModelName=%%i


Aktuelles Arbeitsverzeichnis herausfinden und als Variable setzen
Es kommt immer wieder vor, dass man innerhalb eines Scriptes ein Verzeichnis wechseln möchte. Aber was ist wenn man dann wieder in das Ausgangsverzeichnis zurückspringen möchte? Dann muss man vorher eine entsprechende Variable gesetzt haben. Das mache ich hiermit.

cd (ohne weitere Angaben) gibt ja bekanntlich das Aktuelle Verzeichnis aus. Dieses wird an die for-Schleife übergeben, welche es als Variable %ScriptDir% setzt.
Mit einer weiteren Schleife kann man übrigens auch noch das aktuelle Laufwerk als Variable setzen.
REM Aktuelles Verzeichnis in die Variable %ScriptDir% schreiben
for /F "tokens=1" %%i in ('cd') do @set ScriptDir=%%i
REM Aktuelles Laufwerk in die Variable %ScriptDrive% schreiben
for /F "tokens=1 delims=\" %%i in ('echo %ScriptDir%') do @set ScriptDrive=%%i


Datum und Uhrzeit in ein Dateinamen-freundliches Format bringen
Manchmal möchte man in dem Dateinamen einer Ausgabedatei das aktuelle Datum und die Uhrzeit unterbringen. Die Befehle date und time liefern leider keine Werte die man hier gut verwenden könnte. Um die Uhrzeit und das Datum in ein Format zu bringen, welches in Dateinamen akzeptiert wird lese ich die beiden werte aus und sortiere sie so um, dass eine Variable mit dem Aufbau YYYYMMDDHHmm (also: JahrMonatTagStundeMinute) herauskommt. Die Variable heißt %daytime%.

for /f "tokens=1,2,3 delims=. " %%i in ('date /t') do set day=%%k%%j%%i
for /f "tokens=1,2 delims=: " %%i in ('time /t') do set time=%%i%%j
set daytime=%day%%time%

Dieser Beitrag wurde von sкavєи bearbeitet: 21. August 2008 - 10:40

Eingefügtes Bild
Eingefügtes Bild
0

Anzeige

#2 Mitglied ist offline   sкavєи 

  • Gruppe: aktive Mitglieder
  • Beiträge: 6.447
  • Beigetreten: 20. Juli 04
  • Reputation: 57

geschrieben 21. August 2008 - 10:27

Noch nicht ganz fertig, aber durchaus schon zu gebrauchen:

Dieses Script ruft Informationen über installierte Software (leider nur solche die mit dem Windows Installer installiert wurde) von Remote-Rechnern ab. Beim Starten des Scripts werden Hostname und zu verwendender Benutzername abgefragt. Die Informationen werden im Verzeichnis des Scripts als übersichtliche HTML-Datei abgelegt und direkt geöffnet.
Getestet habe ich es bisher nur in einem Domänen-Netzwerk, da muss als Benutzername der Domainadministrator (also: <DOMAIN>\Administrator) angegeben werden.
Während der Abfrage der Informationen wird dann das Passwort für den Benutzer verlangt.

@echo off
cls
title Computer-Informationen
echo.
SET /P host=Hostname: 
echo.
SET /P user=User: 
echo.
for /f "tokens=1,2,3 delims=. " %%i in ('date /t') do set day=%%k%%j%%i
for /f "tokens=1,2 delims=: " %%i in ('time /t') do set time=%%i%%j
set daytime=%day%%time%

:menu
cls
echo.
echo 1  Software-Informationen fr %host% abrufen
rem echo 2  Hardware-Informationen fr %host% abrufen
echo.
echo B  Beenden
echo.
SET /P choice=Auswahl: 

if %choice% EQU 1 goto software
if %choice% EQU 2 goto hardware
if %choice% EQU B goto end
if %choice% EQU b goto end
goto :menu


:software
cls
set file=soft_%host%_%daytime%.htm
if exist %file% delete %file%
echo.
echo Versuche Informationen abzurufen...
echo.
echo Verwende Benutzerkonto: %user%
WMIC /NODE:%host% /USER:%user% /OUTPUT:%file% Product GET Name /FORMAT:htable
echo.
if exist %file% %file%
echo.
pause
goto end


:hardware
cls
echo.
echo Noch nicht implementiert.
echo.
pause
goto menu

:end
exit

Eingefügtes Bild
Eingefügtes Bild
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0