nixis22
Goto Top

Batch Script auslesen von einer Mac Addresse unter XP geht es unter W7 nicht

Hallo,
ich habe ein Batch Script welches unter XP die MAC Adresse abfragt, die Abfrage findet in einer FOR /F Schleife statt, unter Windows XP funktioniert dies ohne Probleme unter Windows 7 geht dies zwar auch, aber bevor das Script beendet wird wird die Varieble %MACA% durch set MACA= überschrieben.

Hallo Administrator Team,
ich hab schon ziemlich lange nach dem Problem hier im Forum gesucht, und hoffe dennoch das ich keinen Doppelpost führe.

Die MAC Addressen habe ich am Ende mit zwei ** verfälscht, also bitte nicht als Fehler ansehen face-smile

Wie im Vorwort beschrieben funktioniert das Script unter XP ohne Probleme:

FOR /F "skip=1 tokens=1-6 delims=: " %%a in ('WMIC NIC WHERE "NetConnectionStatus='2' and NetConnectionID='LAN-Verbindung'" GET MACAddress') do set MACA=%%a%%b%%c%%d%%e%%f  
echo %MACA%
pause

Es ist relativ simpel gehalten aber es tut seine Dienste.
Unter XP wird mir dann also ECHO die MAC Adresse ohne ":" ausgegeben.

Wenn ich dieses Script nun unter Windows 7 laufe lasse findet er auch die MAC, trennt per DELIMS die Doppepunkte heraus und fügt die MAC in die Variable %MACA% ein, aber nachdem er die MAC in die Variable geschrieben hat folg ein "MACA=" und dann ist diese ja sozusagen wieder leer, und hier weis ich absolut nicht wieso.

Hier die Script Outputs in der Konsole mit @echo on:

XP:
C:\WINNT>FOR /F "skip=1 tokens=1-6 delims=: " %a in ('WMIC NIC WHERE "Ne  
tConnectionStatus='2' and NetConnectionID='LAN-Verbindung'" GET MACAddress') do  
set MACA=%a%b%c%d%e%f

C:\WINNT>set MACA=001C42E75E**

C:\WINNT>echo 001C42E75E**
001C42E75E**

C:\WINNT>pause
Drücken Sie eine beliebige Taste . . .

W7:
C:\Windows>FOR /F "skip=1 tokens=1-6 delims=: " %a in ('WMIC NIC WHERE "  
NetConnectionStatus='2' and NetConnectionID='LAN-Verbindung'" GET MACAddress') d  
o set MACA=%a%b%c%d%e%f

C:\Windows>set MACA=001C42A04F**

 :\Windows>set MACA=

C:\Windows>echo
ECHO ist eingeschaltet (ON).

C:\Windows>pause
Dr??n Sie eine beliebige Taste . . .

Wie man sehr gut in Zeile 7 sehen kann ist hier das " :\Windows>set MACA=" zuviel und macht die Varieblae wieder leer face-sad

Kann hier jemand Helfen? Ich weis wirklich nicht mehr weiter wieso bei W7 das zweite set stattfindet.

Danke und Gruß aus Köln

Philipp

Content-Key: 159091

Url: https://administrator.de/contentid/159091

Printed on: April 18, 2024 at 01:04 o'clock

Member: Biber
Biber Jan 20, 2011 at 17:38:11 (UTC)
Goto Top
Moin nixis22,

willkommen im Forum.
Um nachfolgenden Kommentaren etwas die Schärfe zu nehmen, drei Tipps.

a) ersetze in den Skripten, nein in dem EINEN Skript das [set MACA=%a%b%c%d%e%f ] durch ein [if not defined MACA set MACA=%a%b%c%d%e%f ]
b) verwende niemals Oneliner, bei denen du die erste Zeile nicht verstehst
c) Informiere dich, wie du die Ausgabe des Befehls
WMIC NIC WHERE "NetConnectionStatus='2' and NetConnectionID='LAN-Verbindung'" GET MACAddress
... auf Win Xp und Win 7 mal auf ein CMD-Fenster projezieren kannst.

Möglicherweise kommt gleich noch ein Kollege namens T-Mo hier vorbei und erklärt es ausführlich.

Grüße
Biber
Member: nixis22
nixis22 Jan 20, 2011 at 18:13:49 (UTC)
Goto Top
Hallo Biber,
danke für deine Antwort.

Ich versuche es aus meiner Sicht wie ich es zur Zeit verstehe mal zu erklären, wenn ich auf demHolzweg bin lasse ich gerne korrigieren.

WMIC NIC WHERE \"NetConnectionStatus=\'2\' and NetConnectionID=\'LAN-Verbindung\'\" GET MACAddress

Ergibt:
MACAddress
xx:yy:xx:yy:xx:yy
weil:
NetConnectionStatus=\'2\' -> aktive Netzwerkkarte
NetConnectionID=\'LAN-Verbindung -> DIe Netzwerkkarte mit dem Namen [Lan-Verbindung]
GET MACAddress -> holt den Wert mit der MAC Adresse

Mit der FOR Schleife
[Skip=1] lasse ich die erste Zeile weg
[Tokens=1-6] und [delims=:] schreibe ich die Werte zwischen den : in die Variabeln %a bis %f die Doppelpunkte werden dabei gelöscht.

das Ersetzen von [set MACA=%a%b%c%d%e%f ] in [if not defined MACA set MACA=%a%b%c%d%e%f ] erzielt das selbe Ergebnis nur das in (Zeile 7) statt [set] nun [if not defined MACA set MACA=] da steht.

Philipp
Member: bastla
bastla Jan 20, 2011 at 18:21:31 (UTC)
Goto Top
das Ersetzen von [set MACA=%a%b%c%d%e%f ] in [if not defined MACA set MACA=%a%b%c%d%e%f ] erzielt das selbe Ergebnis nur das in (Zeile 7) statt [set] nun [if not defined MACA set MACA=] da steht
... wobei aber noch die Schlussfolgerung daraus fehlt (dann hättest Du nämlich den "jumping point" gefunden face-wink) ...
Ansonsten könntest Du natürlich auch zB mit
FOR /F "tokens=1-6 delims=: " %%a in ('WMIC NIC WHERE "NetConnectionStatus='2' and NetConnectionID='LAN-Verbindung'" GET MACAddress^|findstr ":"') do set MACA=%%a%%b%%c%%d%%e%%f 
die Klippe umschiffen.

Grüße
bastla
Member: pieh-ejdsch
pieh-ejdsch Jan 20, 2011 at 18:56:34 (UTC)
Goto Top
moin nixis22,

Ergibt:
MACAddress
xx:yy:xx:yy:xx:yy
weil:
Ergibt es eben nicht!
Windows 7 ist ja nicht nur "Besser" gemacht - sondern ganz und gar anders gestrickt.

im Zweifelsfall solltest Du erstmal die genaue Ausgabe des "WMIC ..." Überprüfen, indem Du an diesen Befehl ein "& echo Ausgabe fertig..." dranhägst und in der CMD ausführst.
Dann siehst Du die angehängte LehrLeerzeile, welche in Redmond als Feature extra für Win 7 in die Ausgabe reingebastelt wurde.

Gruß Phil
Member: bastla
bastla Jan 20, 2011 at 19:02:48 (UTC)
Goto Top
Dann siehst Du die angehängte LehrLeerzeile, welche in Redmond als Feature extra für Win 7 in die Ausgabe reingebastelt wurde.
... "Feature", weil wir damit endlich wieder mal was zum "Drumrumbasteln" haben ... face-wink

Grüße
bastla
Mitglied: 60730
60730 Jan 20, 2011 at 19:36:01 (UTC)
Goto Top
Salü,
Zitat von @Biber:
Moin nixis22,

willkommen im Forum.
Möglicherweise kommt gleich noch ein Kollege namens T-Mo hier vorbei und erklärt es ausführlich.
[OT]
Möglicherweise kommt es anders, als man denkt..^Merci 4 die Blumen trotzdem
[/OT]

demo an cmd Prompt:
C:\>FOR /F "skip=1 tokens=1-6 delims=: " %a in ('WMIC NIC WHERE "NetConnectionSt
atus='2' and NetConnectionID='LAN-Verbindung'" GET MACAddress') do set MACA=%a%b
%c%d%e%f
MOF-Datei(en) konnte(n) nicht registriert werden.
Nur Mitglieder der Administratorgruppe können WMIC.EXE verwenden.
Ursache:Win32-Fehler: Zugriff verweigert


Von daher würde ich den bezeichneten Weg gar nicht gehen wollen.
edit
  • hüstel
  • Die bis gerade eben noch beschriebene Demo war ein Satz mit X.....
/edit

Gruß
Member: nixis22
nixis22 Jan 20, 2011 at 20:10:47 (UTC)
Goto Top
Hallo zusammen,
wow viele Antworten in einer kleinen Zeitspanne, danke!

Ja Windows 7 ist wirklich besser geworden.

Das Leerzeile ist mir wirklich erst aufgefallen als ich die Antwort von pieh-ejdsch gelesen hatte, nur stellt sich mir grad die Frage wie ich die Leerzeile (die mir wirklich wie eine böse Lehrzeile [nicht vertippt] vorkommt) wieder wegbekomme?
Ich hab mir auch eben beim Essen überlegt was die neu eingeführte Leerzeile für eienn Sinn haben sollte, ausser das man wieder etwas drum herum Basteln muss um diese weg zu bekommen.

Die Lösung von TimoBeil habe ich mir eben auch durchgelesen aber ich möchte dann doch erst mal bei dem bleiben womit ich euch seit dem ersten Beitrag auf den "Nerv" gehe, hoffe das iost OK.
Member: pieh-ejdsch
pieh-ejdsch Jan 20, 2011 at 20:19:12 (UTC)
Goto Top
moin Timo,

das komische ist; dass es in einer Batch, welche bei mir rumdümpelte, richtig funktionierte mit der Arp-Ausgabe.

schreib ich ne neue Batch (ist aber genauso eine .cmd wie die andere) dann geht es nicht!? Kopfkratz...?

[Edit]
Komentar hinfällig, da die Mac-Adresse in der genannten Batch mittels "ipconfig /all" ausgelesen wurde.
Man - Ich werd alt!
[/Edit]

Gruß Phil
Member: Friemler
Friemler Jan 20, 2011 at 22:20:05 (UTC)
Goto Top
Hallo nixis22,

bastla hat ja schon eine Methode vorgestellt, um Dein Problem zu lösen (die Ausgabe von WMIC über eine Pipe an FINDSTR weiterleiten, was dann nur noch Zeilen anzeigt, die Doppelpunkte enthalten -> die Zeile mit der MAC-Adresse; SKIP=1 muss dann weggelassen werden).

Ich habe gerade auch etwas herum experimentiert. Das Problem scheint zu sein, dass WMIC eigentlich Daten im Unicode-Format ausgibt. Zumindest tut es das, wenn man die Ausgabe mit dem Parameter /OUTPUT:Datei oder mit >Datei in eine Datei umleitet (bei /OUTPUT:CON sieht man sogar, das Multibyte-Zeichen und am Anfang eine Byte Order Mark [BOM] für UTF-16 LE ausgegeben werden!). In dieser Datei ist auch die zusätzliche Leerzeile nicht zu finden. Anscheinend hat CMD eine interne Konvertierungsroutine für Unicode-Ausgaben, die nicht richtig funktioniert und eine Zeile erzeugt, die nicht mit einem Standard-Zeilenende (CR+LF) sondern nur mit CR endet. Deshalb ist die zweite Ausgabe des SET-Befehls am Anfang auch verstümmelt (der Laufwerksbuchstabe des Prompts fehlt ja). FOR erkennt das nicht als leere Zeile und führt den Schleifenkörper zweimal aus.

Der TYPE-Befehl kann auch Unicode-Dateien in ASCII wandeln, sodass sie auf der Kommandozeile korrekt angezeigt werden. Folgender Befehl liefert auch das richtige Ergebnis:
FOR /F "skip=1 tokens=1-6 delims=: " %a in ('WMIC /Output:wmicout.txt NIC WHERE "NetConnectionStatus='2' and NetConnectionID='LAN-Verbindung'" GET MACAddress ^& type wmicout.txt ^& del wmicout.txt') do set maca=%a%b%c%d%e%f
Offen gesagt gefällt mir aber bastla's Lösung besser.

Gruß
Friemler
Member: bastla
bastla Jan 20, 2011 at 22:56:55 (UTC)
Goto Top
... und wollen wir auch nicht außer Acht lassen, dass natürlich Bibers (von nixis22 - BTW: Willkommen im Forum! - noch nicht vollständig reflektierter) Ansatz bereits macht, was er soll ...

Grüße
bastla
Member: Friemler
Friemler Jan 20, 2011 at 23:01:15 (UTC)
Goto Top
Richtig! Hatte ich vergessen.

@Biber: Sorry!

Gruß
Friemler
Mitglied: 76109
76109 Jan 20, 2011 at 23:04:18 (UTC)
Goto Top
Hallo @all

Die Ausgabe von WMIC ist Unicode und die Forschleife gibt das hier aus:
MACAddress + CR + CR + LF
6B:xx:xx:xx:D4 + CR + LF

Gruß Dieter
Member: Friemler
Friemler Jan 20, 2011 at 23:15:38 (UTC)
Goto Top
Hallo Dieter,

nein, Unicode ist es nicht, aber der Murks, den Deine Forschungen an den Tag gebracht haben, ist wahrscheinlich das Ergebnis einer Konvertierung Unicode->ASCII seitens CMD, evtl. auch WMIC selbst. In einer Datei, die durch /OUTPUT:Datei oder >Datei erzeugt wurde (dann im Unicode-Format), ist kein zusätzliches CR zu finden.

Gruß
Friemler
Mitglied: 76109
76109 Jan 20, 2011 at 23:18:06 (UTC)
Goto Top
Hallo Friemler!

Also im Hex-Editor stehen in den ersten beiden Bytes FF FE (Unicode, UTF16?). Ob das jetzt die CMD so hinbiegt, keine Ahnung?

Gruß Dieter
Member: Friemler
Friemler Jan 20, 2011 at 23:25:32 (UTC)
Goto Top
Hallo Dieter,

richtig, das FF FE ist die Byte Order Mark (BOM) für UTF-16 Little Endian (für Big Endian wäre es FE FF, für UTF-8 EF BB BF). Daran können Texteditoren erkennen, dass es sich um eine entsprechend codierte Unicode-Datei handelt. Na ja, und irgendwer muss die Konvertierung bei Ausgabe auf der Konsole ja machen, CMD oder WMIC selbst. Einer der beiden baut Mist.

Gruß
Friemler
Member: nixis22
nixis22 Jan 22, 2011 at 10:07:19 (UTC)
Goto Top
Hallo zusammen,
vielen Dank das ihr mir hier weitergeholfen habt, und ich hab mal wieder gelernt das man noch mehr auf die "Noten" gucken muss um den Fehler zu finden der einem ja fast anspringt.

DIe Lösung von Friemler hab ich nun genommen und diese klappt super! Trotzdem noch mal Danke an alle!

Wünsche euch ein schönes Wochenende.

Philipp