Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

MAC Adresse auslesen in Variable,Variable mit Textliste vergleichen, Computernamen umbenennen

Frage Entwicklung VB for Applications

Mitglied: djbazo

djbazo (Level 1) - Jetzt verbinden

10.05.2010, aktualisiert 16:38 Uhr, 9509 Aufrufe, 14 Kommentare

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:
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
Vergleichen der Variablen
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
Zum umbenennen des Clients:
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
Mitglied: bastla
10.05.2010 um 16:48 Uhr
Hallo djbazo!

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
Grüße
bastla

P.S.: Aus dem Variablennamen "strPathFind" hätte ich nicht unbedingt auf den Variableninhalt "MAC-Adresse" geschlossen ...
Bitte warten ..
Mitglied: djbazo
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.
Bitte warten ..
Mitglied: djbazo
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.

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
Vielen Dank für deine Antwort!!!
Bitte warten ..
Mitglied: djbazo
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.
Bitte warten ..
Mitglied: bastla
11.05.2010 um 09:59 Uhr
Hallo djbazo!

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
durch
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"
[Edit] bzw noch einfacher:
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
[/Edit]

Grüße
bastla
Bitte warten ..
Mitglied: 94454
13.10.2010 um 15:46 Uhr
Hallo bastla

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

Danke, Laszlo
Bitte warten ..
Mitglied: bastla
13.10.2010 um 16:04 Uhr
Hallo Laszlo!

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

Grüße
bastla
Bitte warten ..
Mitglied: 94454
14.10.2010 um 08:54 Uhr
Guten Morgen baslta

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

Ich habe noch herausgefunden, wenn in der Zeile
01.
strComputer = "."
durch
01.
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
01.
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
Bitte warten ..
Mitglied: bastla
14.10.2010 um 09:17 Uhr
Hallo Laszlo!
wenn in der Zeile
01.
strComputer = "."
... etwas geändert wird, ist das definitiv die falsche Stelle - die Aufteilung der CSV-Datei erfolgt in Zeile 43 ...

Grüße
bastla
Bitte warten ..
Mitglied: 94454
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
01.
err = objComputer.Rename(computernamerename)
Danke im Voraus, Laszlo
Bitte warten ..
Mitglied: bastla
14.10.2010 um 12:31 Uhr
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
Bitte warten ..
Mitglied: 94454
14.10.2010 um 13:32 Uhr
Hi bastla

also. habs geändert. In Zeile 43 heisst es nun
01.
computername = Split(strLine, ",")(1)
und in der Zeile 66 heisst es
01.
strComputer = "."
Nun kommt die Fehlermeldung Index ausserhalb des gültigen Bereichs: '[number: 1]'. Die Datei Vergleich.csv hat folgenden Inhalt
01.
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
Bitte warten ..
Mitglied: bastla
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
Bitte warten ..
Mitglied: 94454
14.10.2010 um 16:14 Uhr
Hallo bastla

*uff*... es waren die Adminrechte > Nun funkioniert es!

Herzlichen Dank! Ev. bis bald Laszlo
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Netzwerke
Clientname anhand MAC Adresse herausfinden (13)

Frage von VerruecktesPferd zum Thema Netzwerke ...

Windows Mobile
MAC-Adresse in Windows CE per Befehl ermitteln? (1)

Frage von timemaster zum Thema Windows Mobile ...

Netzwerkmanagement
DHCP Mac Adresse einer IP zuweisen (8)

Frage von vikozo zum Thema Netzwerkmanagement ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (14)

Frage von liquidbase zum Thema Windows Update ...