gelöst MAC Adresse auslesen in Variable,Variable mit Textliste vergleichen, Computernamen umbenennen
Ich möchte in einem VBS die MAC Adresse des Clients auslesen und in eine Variable Schreiben.
Diese Variable soll mit einer Textliste verglichen werden in der "MAC,Computername" zB "00:00:00:00:00:00;PC0001" steht.
Wenn eine Übereinstimmung der MAC gefunden wird, wird der Computername in eine Variable gesetzt und der Computername umbenannt.
Die Lösung wie ich die MAC Adresse bekomme und den Computer umbenenne habe ich schon.
Leider fehlt mir das Herzstück - vergleichen der MAC Adresse und übernehmen des Computernamens in die Variable - da kann ich zwar
Zum ermitteln der MAC-Adresse:
Vergleichen der Variablen
Zum umbenennen des Clients:
Leider Fehlt mir das Wissen um den Mittleren Teil alleine zu lösen. mit dem Script kann ich zwar die MAC im File ermitteln, jedoch nicht den Computernamen, der in der Textdatei hinter dem Komma steht wieder in die VBS Variable bringen
Sollte jemand einen Ansatz haben bzw mir helfen können wäre ich sehr dankbar.
Grüße
bazo
Leider fehlt mir das Herzstück - vergleichen der MAC Adresse und übernehmen des Computernamens in die Variable - da kann ich zwar
Zum ermitteln der MAC-Adresse:
01.
set fso = createobject ("scripting.filesystemobject")
02.
set ntwrk = createobject ("wscript.network")
03.
strComputer = ntwrk.computername
04.
05.
Set objWMIService = GetObject _
06.
("winmgmts:{impersonationLevel=impersonate}!\\" _
07.
& strComputer & "\root\cimv2")
08.
09.
Set colAdapters = objWMIService.ExecQuery _
10.
("Select * From Win32_NetworkAdapterConfiguration " _
11.
& "Where IPEnabled = True")
12.
13.
For Each objAdapter in colAdapters
14.
WScript.Echo objAdapter.MACAddress
15.
Next
01.
Option Explicit
02.
03.
Dim objFSO, objWshNetwork, objFile
04.
Dim strWorkDir, strText, strLine, strPathFind
05.
Const ForReading = 1, ForWriting = 2, ForAppending = 8
06.
07.
strWorkDir = "PfadzurVergleich.txt"
08.
strText = ""
09.
strPathFind = VariableDerMacAdresseDieVerglichenwerdensoll
10.
11.
Set objFSO = Wscript.CreateObject("Scripting.FileSystemObject")
12.
13.
strText = strWorkDir
14.
wscript.echo strText
15.
If objFSO.FileExists(strText) Then
16.
Set objFile = objFSO.OpenTextFile(strText, ForReading)
17.
Do Until objFile.AtEndOfStream
18.
strLine = objFile.ReadLine
19.
If strLine = strPathFind Then
20.
wscript.echo strPathFind
21.
End If
22.
Loop
23.
objFile.Close
24.
End If
01.
If WScript.Arguments.length =0 Then
02.
Set objShell = CreateObject("Shell.Application")
03.
'Pass a bogus argument with leading blank space, say [ uac]
04.
objShell.ShellExecute "wscript.exe", Chr(34) & _
05.
WScript.ScriptFullName & Chr(34) & " uac", "", "runas", 1
06.
Else
07.
08.
Dim computername
09.
computername=varComputernameTextliste 'Hier soll die Variable, die aus der Textliste gefunden wurde befüllt werden.
10.
11.
strComputer = "."
12.
Set objWMIService = GetObject("winmgmts:" _
13.
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
14.
15.
Set colComputers = objWMIService.ExecQuery _
16.
("Select * from Win32_ComputerSystem")
17.
18.
For Each objComputer in colComputers
19.
err = objComputer.Rename(computername)
20.
Next
21.
22.
End if
Leider Fehlt mir das Wissen um den Mittleren Teil alleine zu lösen. mit dem Script kann ich zwar die MAC im File ermitteln, jedoch nicht den Computernamen, der in der Textdatei hinter dem Komma steht wieder in die VBS Variable bringen
Sollte jemand einen Ansatz haben bzw mir helfen können wäre ich sehr dankbar.
Grüße
bazo
14 Antworten
- LÖSUNG bastla schreibt am 10.05.2010 um 16:48:26 Uhr
- LÖSUNG djbazo schreibt am 10.05.2010 um 17:03:46 Uhr
- LÖSUNG djbazo schreibt am 11.05.2010 um 08:43:13 Uhr
- LÖSUNG djbazo schreibt am 11.05.2010 um 08:47:40 Uhr
- LÖSUNG bastla schreibt am 11.05.2010 um 09:59:09 Uhr
- LÖSUNG 94454 schreibt am 13.10.2010 um 15:46:29 Uhr
- LÖSUNG bastla schreibt am 13.10.2010 um 16:04:53 Uhr
- LÖSUNG 94454 schreibt am 14.10.2010 um 08:54:40 Uhr
- LÖSUNG bastla schreibt am 14.10.2010 um 09:17:42 Uhr
- LÖSUNG 94454 schreibt am 14.10.2010 um 09:55:40 Uhr
- LÖSUNG bastla schreibt am 14.10.2010 um 12:31:52 Uhr
- LÖSUNG 94454 schreibt am 14.10.2010 um 13:32:34 Uhr
- LÖSUNG bastla schreibt am 14.10.2010 um 15:38:56 Uhr
- LÖSUNG 94454 schreibt am 14.10.2010 um 16:14:16 Uhr
- LÖSUNG bastla schreibt am 14.10.2010 um 15:38:56 Uhr
- LÖSUNG 94454 schreibt am 14.10.2010 um 13:32:34 Uhr
- LÖSUNG bastla schreibt am 14.10.2010 um 12:31:52 Uhr
- LÖSUNG 94454 schreibt am 14.10.2010 um 09:55:40 Uhr
- LÖSUNG bastla schreibt am 14.10.2010 um 09:17:42 Uhr
- LÖSUNG 94454 schreibt am 14.10.2010 um 08:54:40 Uhr
- LÖSUNG bastla schreibt am 13.10.2010 um 16:04:53 Uhr
- LÖSUNG 94454 schreibt am 13.10.2010 um 15:46:29 Uhr
- LÖSUNG bastla schreibt am 11.05.2010 um 09:59:09 Uhr
- LÖSUNG djbazo schreibt am 11.05.2010 um 08:47:40 Uhr
- LÖSUNG djbazo schreibt am 11.05.2010 um 08:43:13 Uhr
- LÖSUNG djbazo schreibt am 10.05.2010 um 17:03:46 Uhr
LÖSUNG 10.05.2010 um 16:48 Uhr
Hallo djbazo!
Versuch es mit folgendem (ungetesteten) Ersatz für die Zeilen 19 bis 21:
Grüße
bastla
P.S.: Aus dem Variablennamen "strPathFind" hätte ich nicht unbedingt auf den Variableninhalt "MAC-Adresse" geschlossen ...
Versuch es mit folgendem (ungetesteten) Ersatz für die Zeilen 19 bis 21:
01.
If UCase(Left(strLine, Len(strPathFind))) = UCase(strPathFind) Then
02.
computername = Split(strLine, ";")(1)
03.
WScript.Echo computername
04.
Exit Do
05.
End If
bastla
P.S.: Aus dem Variablennamen "strPathFind" hätte ich nicht unbedingt auf den Variableninhalt "MAC-Adresse" geschlossen ...
LÖSUNG 10.05.2010 um 17:03 Uhr
Vielen Dank für deine Antwort.
Ich werde das ganze prüfen und mich dann zurückmelden.
Danke für den Hinweis - ich werde das mit der Variable sofort ändern.
Ich werde das ganze prüfen und mich dann zurückmelden.
Danke für den Hinweis - ich werde das mit der Variable sofort ändern.
LÖSUNG 11.05.2010 um 08:43 Uhr
Hallo Bastla,
mir ist nun noch eine Frage gekommen.
Angenommen, die MAC Adresse wird in der Liste nicht gefunden - dann setze ich einen DUMMYNAMEN als PC Name.
Anbei nun das ganze Script, falls es jemand für sinnvoll erachtet und benötigt.
Vielen Dank für deine Antwort!!!
mir ist nun noch eine Frage gekommen.
Angenommen, die MAC Adresse wird in der Liste nicht gefunden - dann setze ich einen DUMMYNAMEN als PC Name.
Anbei nun das ganze Script, falls es jemand für sinnvoll erachtet und benötigt.
01.
'Gesamt
02.
Option Explicit
03.
'-----------------------------------------
04.
'getMAC
05.
'-----------------------------------------
06.
Dim fso, ntwrk,strComputer,objWMIService,colAdapters,objAdapter,SAVEMACAddress
07.
set fso = createobject ("scripting.filesystemobject")
08.
set ntwrk = createobject ("wscript.network")
09.
strComputer = ntwrk.computername
10.
11.
Set objWMIService = GetObject _
12.
("winmgmts:{impersonationLevel=impersonate}!\\" _
13.
& strComputer & "\root\cimv2")
14.
15.
Set colAdapters = objWMIService.ExecQuery _
16.
("Select * From Win32_NetworkAdapterConfiguration " _
17.
& "Where IPEnabled = True")
18.
19.
For Each objAdapter in colAdapters
20.
SAVEMACAddress = objAdapter.MACAddress
21.
Next
22.
23.
'-----------------------------------------
24.
'Vergleich
25.
'-----------------------------------------
26.
27.
Dim objFSO, objWshNetwork, objFile
28.
Dim strWorkDir, strText, strLine, strMacFind, computername
29.
Const ForReading = 1, ForWriting = 2, ForAppending = 8
30.
31.
strWorkDir = "Vergleich.csv"
32.
strText = ""
33.
strMacFind = SAVEMACAddress
34.
35.
Set objFSO = Wscript.CreateObject("Scripting.FileSystemObject")
36.
37.
strText = strWorkDir
38.
If objFSO.FileExists(strText) Then
39.
Set objFile = objFSO.OpenTextFile(strText, ForReading)
40.
Do Until objFile.AtEndOfStream
41.
strLine = objFile.ReadLine
42.
If UCase(Left(strLine, Len(strMacFind))) = UCase(strMacFind) Then
43.
computername = Split(strLine, ",")(1)
44.
Else
45.
computername = "DUMMYNAME"
46.
Exit Do
47.
End If
48.
Loop
49.
objFile.Close
50.
End If
51.
52.
'-----------------------------------------
53.
'Rename
54.
'-----------------------------------------
55.
56.
If WScript.Arguments.length =0 Then
57.
Set objShell = CreateObject("Shell.Application")
58.
'Pass a bogus argument with leading blank space, say [ uac]
59.
objShell.ShellExecute "wscript.exe", Chr(34) & _
60.
WScript.ScriptFullName & Chr(34) & " uac", "", "runas", 1
61.
Else
62.
63.
Dim computernamerename
64.
computernamerename = computername
65.
66.
strComputer = "."
67.
Set objWMIService = GetObject("winmgmts:" _
68.
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
69.
70.
Set colComputers = objWMIService.ExecQuery _
71.
("Select * from Win32_ComputerSystem")
72.
73.
For Each objComputer in colComputers
74.
err = objComputer.Rename(computernamerename)
75.
Next
76.
77.
End if
LÖSUNG 11.05.2010 um 08:47 Uhr
"Angenommen, die MAC Adresse wird in der Liste nicht gefunden - dann setze ich einen DUMMYNAMEN als PC Name."
Leider passt meine Zeile 42-47 nicht ganz....sollte jemand weiterhelfen können wäre ich dankbar.
Leider passt meine Zeile 42-47 nicht ganz....sollte jemand weiterhelfen können wäre ich dankbar.
LÖSUNG 11.05.2010 um 09:59 Uhr
Hallo djbazo!
Ersetze
durch
[Edit] bzw noch einfacher:
[/Edit]
Grüße
bastla
Ersetze
01.
Do Until objFile.AtEndOfStream
02.
strLine = objFile.ReadLine
03.
If UCase(Left(strLine, Len(strMacFind))) = UCase(strMacFind) Then
04.
computername = Split(strLine, ",")(1)
05.
Else
06.
computername = "DUMMYNAME"
07.
Exit Do
08.
End If
09.
Loop
01.
computername = ""
02.
Do Until objFile.AtEndOfStream
03.
strLine = objFile.ReadLine
04.
If UCase(Left(strLine, Len(strMacFind))) = UCase(strMacFind) Then
05.
computername = Split(strLine, ",")(1)
06.
Exit Do
07.
End If
08.
Loop
09.
If computername = "" Then computername = "DUMMYNAME"
01.
computername = "DUMMYNAME"
02.
Do Until objFile.AtEndOfStream
03.
strLine = objFile.ReadLine
04.
If UCase(Left(strLine, Len(strMacFind))) = UCase(strMacFind) Then
05.
computername = Split(strLine, ",")(1)
06.
Exit Do
07.
End If
08.
Loop
Grüße
bastla
LÖSUNG 13.10.2010 um 15:46 Uhr
Hallo bastla
Beim Aufrufen des Scripts erhalte ich folgende. Dein Hinweis:
fruchtet nicht...
Danke, Laszlo
Beim Aufrufen des Scripts erhalte ich folgende
01.
Fehlermeldung: .....(58,3) Laufzeitfehler in Microsoft VBScript: Variable ist nicht definiert: 'objShell'
01.
Dim fso, ntwrk,strComputer,objWMIService,colAdapters,objAdapter,SAVEMACAddress
Danke, Laszlo
LÖSUNG 13.10.2010 um 16:04 Uhr
Hallo Laszlo!
Mein Hinweis hätte zur Zeile
führen sollen ...
Grüße
bastla
Mein Hinweis hätte zur Zeile
Dim fso, ntwrk,strComputer,objWMIService,colAdapters,objAdapter,SAVEMACAddress,objShell
Grüße
bastla
LÖSUNG 14.10.2010 um 08:54 Uhr
Guten Morgen baslta
Danke für die prompte Antwort. Wieder einen Schritt weiter Musste noch ergänzen. Nun erscheint folgende Fehlermeldung: Fehler: Die Parameter der Methode sind ungültig. Code: 8004102F. Quelle: SWbemObjectEx. Die Fehlermeldung bezieht sich auf die Zeile
am Ende des Scripts.
Ich habe noch herausgefunden, wenn in der Zeile durch
ersetzt wird (Der Grund für das Semikolon ist, in der Textdatei "Vergleich.csv" ist die Mac-Adresse und der Hostname durch ein ";" getrennt). Dafür erscheint jetzt diese Fehlermeldung: Der Remoteservercomputer ist existiert nicht oder ist nicht verfügbar 'GetObject'. Die Fehlermeldung bezieht sich auf die Zeile
Vielleicht sollte ich erwähnen, dass das Script unter Windows 7 läuft.
Danke für Deine Hilfe, Laszlo
Danke für die prompte Antwort. Wieder einen Schritt weiter Musste noch
01.
colComputers, objComputer
01.
err = objComputer.Rename(computernamerename)
Ich habe noch herausgefunden, wenn in der Zeile
01.
strComputer = "."
01.
strComputer = ";"
01.
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Danke für Deine Hilfe, Laszlo
LÖSUNG 14.10.2010 um 09:17 Uhr
Hallo Laszlo!
... etwas geändert wird, ist das definitiv die falsche Stelle - die Aufteilung der CSV-Datei erfolgt in Zeile 43 ...
Grüße
bastla
wenn in der Zeile
01.
strComputer = "."
Grüße
bastla
LÖSUNG 14.10.2010 um 09:55 Uhr
Hi bastla
Habs wieder geändert... Dann erscheint diese Fehlermeldung Die Parameter der Methode sind ungültig. Sie bezieht sich auf diese Zeile
Danke im Voraus, Laszlo
Habs wieder geändert... Dann erscheint diese Fehlermeldung Die Parameter der Methode sind ungültig. Sie bezieht sich auf diese Zeile
01.
err = objComputer.Rename(computernamerename)
LÖSUNG 14.10.2010 um 12:31 Uhr
Hallo Laszlo!
korrigiert? (Und sichergestellt, dass der eingelesene Computername ok ist, also zB kein Komma enthält)?
Grüße
bastla
Habs wieder geändert...
... und auch die Zeile 43 aufcomputername = Split(strLine, ";")(1)
Grüße
bastla
LÖSUNG 14.10.2010 um 13:32 Uhr
Hi bastla
also. habs geändert. In Zeile 43 heisst es nun und in der Zeile 66 heisst es
Nun kommt die Fehlermeldung Index ausserhalb des gültigen Bereichs: '[number: 1]'. Die Datei Vergleich.csv hat folgenden Inhalt
An Stelle des Semikolons habe ichs auch schon mit einem Punkt probiert. Immer die gleiche Fehlermeldung.
Danke & Gruss, Laszlo
also. habs geändert. In Zeile 43 heisst es nun
01.
computername = Split(strLine, ",")(1)
01.
strComputer = "."
01.
0A:0B:0C:0D:0E:0F;WI112200
Danke & Gruss, Laszlo
LÖSUNG 14.10.2010 um 15:38 Uhr
Hallo Laszlo!
Wenn Deine Textdatei offensichtlich tatsächlich ";" als Trennzeichen verwendet, solltest Du mir (bzw meinem Posting von 12:31:52 Uhr ) vertrauen und in Zeile 43 zwischen den Anführungszeichen genau dieses Tennzeichen verwenden ...
Falls dann dennoch "objComputer.Rename" fehlschlägt, könnte ich nur noch vermuten, dass Du keine Adminrechte hättest ...
Grüße
bastla
Wenn Deine Textdatei offensichtlich tatsächlich ";" als Trennzeichen verwendet, solltest Du mir (bzw meinem Posting von 12:31:52 Uhr ) vertrauen und in Zeile 43 zwischen den Anführungszeichen genau dieses Tennzeichen verwenden ...
Falls dann dennoch "objComputer.Rename" fehlschlägt, könnte ich nur noch vermuten, dass Du keine Adminrechte hättest ...
Grüße
bastla
LÖSUNG 14.10.2010 um 16:14 Uhr
Hallo bastla
*uff*... es waren die Adminrechte > Nun funkioniert es!
Herzlichen Dank! Ev. bis bald Laszlo
*uff*... es waren die Adminrechte > Nun funkioniert es!
Herzlichen Dank! Ev. bis bald Laszlo
Ähnliche Inhalte
Neue Wissensbeiträge
Heiß diskutierte Inhalte