djbazo
Goto Top

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:
set fso = createobject ("scripting.filesystemobject")  
set ntwrk = createobject ("wscript.network")  
strComputer = ntwrk.computername

Set objWMIService = GetObject _
("winmgmts:{impersonationLevel=impersonate}!\\" _  
& strComputer & "\root\cimv2")  

Set colAdapters = objWMIService.ExecQuery _
("Select * From Win32_NetworkAdapterConfiguration " _  
& "Where IPEnabled = True")  

For Each objAdapter in colAdapters
WScript.Echo objAdapter.MACAddress
Next

Vergleichen der Variablen
Option Explicit

Dim objFSO, objWshNetwork, objFile
Dim strWorkDir, strText, strLine, strPathFind
Const ForReading = 1, ForWriting = 2, ForAppending = 8

strWorkDir = "PfadzurVergleich.txt"  
strText = ""  
strPathFind = VariableDerMacAdresseDieVerglichenwerdensoll

Set objFSO = Wscript.CreateObject("Scripting.FileSystemObject")  

strText = strWorkDir
wscript.echo strText
  If objFSO.FileExists(strText) Then
  Set objFile = objFSO.OpenTextFile(strText, ForReading)
    Do Until objFile.AtEndOfStream
    strLine = objFile.ReadLine
        If strLine = strPathFind Then
        wscript.echo strPathFind
        End If
    Loop
    objFile.Close
  End If

Zum umbenennen des Clients:
If WScript.Arguments.length =0 Then
  Set objShell = CreateObject("Shell.Application")  
  'Pass a bogus argument with leading blank space, say [ uac]  
  objShell.ShellExecute "wscript.exe", Chr(34) & _  
  WScript.ScriptFullName & Chr(34) & " uac", "", "runas", 1  
Else

Dim computername
computername=varComputernameTextliste 'Hier soll die Variable, die aus der Textliste gefunden wurde befüllt werden.  

strComputer = "."  
Set objWMIService = GetObject("winmgmts:" _  
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")  

Set colComputers = objWMIService.ExecQuery _
    ("Select * from Win32_ComputerSystem")  

For Each objComputer in colComputers
    err = objComputer.Rename(computername)
Next

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

Content-Key: 142539

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

Printed on: April 24, 2024 at 16:04 o'clock

Member: bastla
bastla May 10, 2010 at 14:48:26 (UTC)
Goto Top
Hallo djbazo!

Versuch es mit folgendem (ungetesteten) Ersatz für die Zeilen 19 bis 21:
If UCase(Left(strLine, Len(strPathFind))) = UCase(strPathFind) Then
    computername = Split(strLine, ";")(1)  
    WScript.Echo computername
    Exit Do
End If
Grüße
bastla

P.S.: Aus dem Variablennamen "strPathFind" hätte ich nicht unbedingt auf den Variableninhalt "MAC-Adresse" geschlossen ...
Member: djbazo
djbazo May 10, 2010 at 15:03:46 (UTC)
Goto Top
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.
Member: djbazo
djbazo May 11, 2010 at 06:43:13 (UTC)
Goto Top
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.

'Gesamt  
Option Explicit
'-----------------------------------------  
'getMAC  
'-----------------------------------------  
Dim fso, ntwrk,strComputer,objWMIService,colAdapters,objAdapter,SAVEMACAddress
set fso = createobject ("scripting.filesystemobject")  
set ntwrk = createobject ("wscript.network")  
strComputer = ntwrk.computername

Set objWMIService = GetObject _
("winmgmts:{impersonationLevel=impersonate}!\\" _  
& strComputer & "\root\cimv2")  

Set colAdapters = objWMIService.ExecQuery _
("Select * From Win32_NetworkAdapterConfiguration " _  
& "Where IPEnabled = True")  

For Each objAdapter in colAdapters
SAVEMACAddress = objAdapter.MACAddress
Next

'-----------------------------------------  
'Vergleich  
'-----------------------------------------  

Dim objFSO, objWshNetwork, objFile
Dim strWorkDir, strText, strLine, strMacFind, computername
Const ForReading = 1, ForWriting = 2, ForAppending = 8

strWorkDir = "Vergleich.csv"  
strText = ""  
strMacFind = SAVEMACAddress

Set objFSO = Wscript.CreateObject("Scripting.FileSystemObject")  

strText = strWorkDir
  If objFSO.FileExists(strText) Then
  Set objFile = objFSO.OpenTextFile(strText, ForReading)
    Do Until objFile.AtEndOfStream
    strLine = objFile.ReadLine
        If UCase(Left(strLine, Len(strMacFind))) = UCase(strMacFind) Then 
			computername = Split(strLine, ",")(1)  
		Else
			computername = "DUMMYNAME"  
			Exit Do
		End If
    Loop
    objFile.Close
  End If
  
'-----------------------------------------  
'Rename  
'-----------------------------------------  

If WScript.Arguments.length =0 Then
  Set objShell = CreateObject("Shell.Application")  
  'Pass a bogus argument with leading blank space, say [ uac]  
  objShell.ShellExecute "wscript.exe", Chr(34) & _  
  WScript.ScriptFullName & Chr(34) & " uac", "", "runas", 1  
Else

Dim computernamerename
computernamerename = computername

strComputer = "."  
Set objWMIService = GetObject("winmgmts:" _  
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")  

Set colComputers = objWMIService.ExecQuery _
    ("Select * from Win32_ComputerSystem")  

For Each objComputer in colComputers
    err = objComputer.Rename(computernamerename)
Next

End if

Vielen Dank für deine Antwort!!!
Member: djbazo
djbazo May 11, 2010 at 06:47:40 (UTC)
Goto Top
"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.
Member: bastla
bastla May 11, 2010 at 07:59:09 (UTC)
Goto Top
Hallo djbazo!

Ersetze
    Do Until objFile.AtEndOfStream
    strLine = objFile.ReadLine
        If UCase(Left(strLine, Len(strMacFind))) = UCase(strMacFind) Then 
			computername = Split(strLine, ",")(1)  
		Else
			computername = "DUMMYNAME"  
			Exit Do
		End If
    Loop
durch
    computername = ""  
    Do Until objFile.AtEndOfStream
    strLine = objFile.ReadLine
        If UCase(Left(strLine, Len(strMacFind))) = UCase(strMacFind) Then 
            computername = Split(strLine, ",")(1)  
            Exit Do
        End If
    Loop
    If computername = "" Then computername = "DUMMYNAME"  
[Edit] bzw noch einfacher:
    computername = "DUMMYNAME"  
    Do Until objFile.AtEndOfStream
    strLine = objFile.ReadLine
        If UCase(Left(strLine, Len(strMacFind))) = UCase(strMacFind) Then 
            computername = Split(strLine, ",")(1)  
            Exit Do
        End If
    Loop
[/Edit]

Grüße
bastla
Mitglied: 94454
94454 Oct 13, 2010 at 13:46:29 (UTC)
Goto Top
Hallo bastla

Beim Aufrufen des Scripts erhalte ich folgende
Fehlermeldung: .....(58,3) Laufzeitfehler in Microsoft VBScript: Variable ist nicht definiert: 'objShell'  
. Dein Hinweis:
Dim fso, ntwrk,strComputer,objWMIService,colAdapters,objAdapter,SAVEMACAddress
fruchtet nicht...

Danke, Laszlo
Member: bastla
bastla Oct 13, 2010 at 14:04:53 (UTC)
Goto Top
Hallo Laszlo!

Mein Hinweis hätte zur Zeile
Dim fso, ntwrk,strComputer,objWMIService,colAdapters,objAdapter,SAVEMACAddress,objShell
führen sollen ...

Grüße
bastla
Mitglied: 94454
94454 Oct 14, 2010 at 06:54:40 (UTC)
Goto Top
Guten Morgen baslta

Danke für die prompte Antwort. Wieder einen Schritt weiter face-wink Musste noch
colComputers, objComputer
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
err = objComputer.Rename(computernamerename)
am Ende des Scripts.

Ich habe noch herausgefunden, wenn in der Zeile
strComputer = "."  
durch
strComputer = ";"  
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
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")  

Vielleicht sollte ich erwähnen, dass das Script unter Windows 7 läuft.

Danke für Deine Hilfe, Laszlo
Member: bastla
bastla Oct 14, 2010 at 07:17:42 (UTC)
Goto Top
Hallo Laszlo!
wenn in der Zeile
strComputer = "."  
... etwas geändert wird, ist das definitiv die falsche Stelle - die Aufteilung der CSV-Datei erfolgt in Zeile 43 ...

Grüße
bastla
Mitglied: 94454
94454 Oct 14, 2010 at 07:55:40 (UTC)
Goto Top
Hi bastla

Habs wieder geändert... Dann erscheint diese Fehlermeldung Die Parameter der Methode sind ungültig. Sie bezieht sich auf diese Zeile
err = objComputer.Rename(computernamerename)

Danke im Voraus, Laszlo
Member: bastla
bastla Oct 14, 2010 at 10:31:52 (UTC)
Goto Top
Hallo Laszlo!
Habs wieder geändert...
... und auch die Zeile 43 auf
computername = Split(strLine, ";")(1)
korrigiert? (Und sichergestellt, dass der eingelesene Computername ok ist, also zB kein Komma enthält)?

Grüße
bastla
Mitglied: 94454
94454 Oct 14, 2010 at 11:32:34 (UTC)
Goto Top
Hi bastla

face-wink also. habs geändert. In Zeile 43 heisst es nun
computername = Split(strLine, ",")(1)  
und in der Zeile 66 heisst es
strComputer = "."  
Nun kommt die Fehlermeldung Index ausserhalb des gültigen Bereichs: '[number: 1]'. Die Datei Vergleich.csv hat folgenden Inhalt
0A:0B:0C:0D:0E:0F;WI112200
An Stelle des Semikolons habe ichs auch schon mit einem Punkt probiert. Immer die gleiche Fehlermeldung.

Danke & Gruss, Laszlo
Member: bastla
bastla Oct 14, 2010 at 13:38:56 (UTC)
Goto Top
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
Mitglied: 94454
94454 Oct 14, 2010 at 14:14:16 (UTC)
Goto Top
Hallo bastla

*uff*... es waren die Adminrechte >face-wink Nun funkioniert es!

Herzlichen Dank! Ev. bis bald face-wink Laszlo