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

Ausgelesene MAC in SMBIOS GUID Feld im AD eintragen

Frage Linux Samba

Mitglied: RetroDude

RetroDude (Level 1) - Jetzt verbinden

30.07.2010 um 09:19 Uhr, 8334 Aufrufe, 6 Kommentare

Hallo zusammen. Ich brauche ein Tool mit dem ich anhand eines eigegebenen PC Namens (per GUI), dessen MAC auslesen und anschliessend diese mit 20 Nullen addiert im AD auf dessen Computerobjekt im Feld SMBIOS GUID eintragen kann. Wir wollen nicht mehr die richtige GUID nehmen, weil die beim Aufsetzen der Clients via PXE WDS subnetzübergreifend irgendwie Probleme verursacht . Die Methode mit der MAC und den 20 Nullen funktioniert aber immer. Cool wäre natürlich, wenn man diesem GUI mehrere Hostnahmen angeben könnte.
Ich hab da bereits was gefunden um die MAC auszulesen. Die Addition der Nullen ist auch kein Problem. Das Problem ist aber, dass die MAC mit : als Trennzeichen ausgelesen wird... so kann ich den Wert nicht übergeben.. Dies ist bereits mein erstes Problem..


' -------------------------------------------------------------------------------------
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
Client_MAC = objAdapter.MACAddress
Client_SMBIOS = Client_MAC&"00000000000000000000"
WScript.Echo Client_SMBIOS
Next
' ------------------------------------------------------------------------------------

Besten Dank im Voraus!
Gruss
Mitglied: 60730
30.07.2010 um 09:28 Uhr
Moin,

ne ganz doofe gegenfrage meinerseits..

Dein VBS läuft unter Windows und du willst die Daten, die das erzeugt dazu benutzen, das Windows erst via PXE WDS auf die Kisten zu bekommen?

Na klar - mit dem Bart oder ner anderen Version von PE ginge das, aber obs schpeedmäßig auch Sinn macht?

Und dann
For Each objAdapter in colAdapters
hmm - wenn die Ksuet aber nun Blauzahn usw. hat - greift das Vbs aber nicht wirklich.......

Gruß
Bitte warten ..
Mitglied: RetroDude
30.07.2010 um 09:45 Uhr
Hallo. Nein, ich will diese Korrektur im AD vor dem Setup mit WDS vornehmen. Das wären PCs die bereits installiert sind und per WDS neu aufgestetzt werden müssen. Durch vor Ort Supporter z.B.. Es sollte auch möglich sein die MAC von Hand anzugeben in diesem GUI. Somit wären auch Kisten abgedeckt, welche nicht abgefragt werden können. Es handelt sich um Phatclients mit 1 NIC. Kein Blauzahn und so..

Ich habe da noch mehr Code zusammen getragen:


'Auslesen 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
Client_MAC = objAdapter.MACAddress
Client_SMBIOS = Client_MAC&"00000000000000000000"
Next

'--------------------------------------------
Ich versuche nun meine (Noch mit Doppelpunkten versehene..) Variable dem zweiten Codeblock zu übergeben. So sollte ich den Wechsel der GUID vornehmen können. Wie kann ich die Doppelpunkte aus der gelieferten MAC Adresse filtern?
Bitte warten ..
Mitglied: RetroDude
05.08.2010 um 15:09 Uhr
So, die Guid hab ich formatiert. ich schaffs aber noch nicht sie auf dem AD Objekt einzutragen. Hat da jemand ne Idee? Wäre froh um Input..


Set fso = createobject ("scripting.filesystemobject")
' Set ntwrk = createobject ("wscript.network")
' strComputer = ntwrk.computername

' Prombt für Computernamen

strComputer = InputBox("Computernamen eingeben","SMBIOS_GUID in AD setzen")

' Auslesen der MAC-Adresse

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
Client_MAC = objAdapter.MACAddress
Next

' Herausfiltern der :

Dim MyString, MyArray, i
MyString = Client_MAC
MyArray = Split(MyString, ":", -1, 1)

For i = 0 to UBound(MyArray)
' MsgBox (MyArray(i))
Next

MAC_Neu = MyArray(0)&MyArray(1)&MyArray(2)&MyArray(3)&MyArray(4)&MyArray(5)&"00000000000000000000"

' MsgBox (MAC_Neu)


' Setzen der SMBIOS GUID im AD

DN_Client = "cn="&strComputer&",ou=Client,dc=domain,dc=domain,dc=domain"
' MsgBox (DN_Client)

UpdateNetbootGuid MAC_Neu,DN_Client


Set oComputer = DN_Client
oComputer.Put "netbootGuid"
oComputer.SetInfo

Set oComputer = Nothing
End Sub
Bitte warten ..
Mitglied: RetroDude
11.08.2010 um 15:19 Uhr
So, hab mir ne Lösung gebastelt. Auch ohne Euch!

Ich hab das Ganze noch mit Inputbox, WMI etc. etwas angepasst: (VMWare wird erkannt und nicht berücksichtigt. Einfach erweiterbar)


Option Explicit
Dim strComputerName
strComputerName = InputBox("Computernamen eingeben","SMBIOS_GUID in AD setzen")
If strComputerName = "" Then
WScript.quit
Else
Call UpdateNetbootGuid(guidGetUUID, szGetDn)
End If

Function guidGetUUID
Dim NetworkAdapterSet, NetworkAdapter, objWMI
Set objWMI = GetObject("winmgmts:\\"& strComputerName &"\root\CIMV2")
Set NetworkAdapterSet = objWMI.InstancesOf("Win32_NetworkAdapter")
For Each NetworkAdapter In NetworkAdapterSet
If NetworkAdapter.AdapterType = "Ethernet 802.3" And Not (NetworkAdapter.Description = "Packet Scheduler Miniport" _
Or NetworkAdapter.Description = "VMware Virtual Ethernet Adapter for VMnet1" _
Or NetworkAdapter.Description = "VMware Virtual Ethernet Adapter for VMnet8") Then
guidGetUUID = "00000000-0000-0000-0000-" & Replace(NetworkAdapter.MACAddress, ":", "")
End If
Next
End Function

Function szGetDN

Dim objTrans, objDomain, wshNetwork ', strComputerName

Const ADS_NAME_INITTYPE_GC = 3
Const ADS_NAME_TYPE_NT4 = 3
Const ADS_NAME_TYPE_1779 = 1

Set wshNetwork = CreateObject("WScript.Network")
Set objTrans = CreateObject("NameTranslate")
Set objDomain = getObject("LDAP://rootDse")
objTrans.Init ADS_NAME_INITTYPE_GC, ""
objTrans.Set ADS_NAME_TYPE_NT4, wshNetwork.UserDomain & "\" _
& strComputerName & "$"
szGetDN = objTrans.Get(ADS_NAME_TYPE_1779)
szGetDN = UCase(szGetDN)
End Function

Sub UpdateNetbootGuid(guidUUID, szComputerDn)
Dim oComputer

Set oComputer = GetObject("LDAP://" & szComputerDn)
If ByteArrayToGuid(oComputer.netbootGuid) <> guidUUID Then
oComputer.Put "netbootGuid", baConvertGuidToByteArray(guidUUID)
oComputer.SetInfo
End If
MsgBox(guidUUID)
Set oComputer = Nothing
Set guidUUID = Nothing
End Sub

Function ByteArrayToGuid(arrbytOctet)
If Not IsEmpty(arrbytOctet) Then
ByteArrayToGuid = _
Right("0" & Hex(AscB(MidB(arrbytOctet, 4, 1))), 2) & _
Right("0" & Hex(AscB(MidB(arrbytOctet, 3, 1))), 2) & _
Right("0" & Hex(AscB(MidB(arrbytOctet, 2, 1))), 2) & _
Right("0" & Hex(AscB(MidB(arrbytOctet, 1, 1))), 2) & _
"-" & _
Right("0" & Hex(AscB(MidB(arrbytOctet, 6, 1))), 2) & _
Right("0" & Hex(AscB(MidB(arrbytOctet, 5, 1))), 2) & _
"-" & _
Right("0" & Hex(AscB(MidB(arrbytOctet, 8, 1))), 2) & _
Right("0" & Hex(AscB(MidB(arrbytOctet, 7, 1))), 2) & _
"-" & _
Right("0" & Hex(AscB(MidB(arrbytOctet, 9, 1))), 2) & _
Right("0" & Hex(AscB(MidB(arrbytOctet, 10, 1))), 2) & _
"-" & _
Right("0" & Hex(AscB(MidB(arrbytOctet, 11, 1))), 2) & _
Right("0" & Hex(AscB(MidB(arrbytOctet, 12, 1))), 2) & _
Right("0" & Hex(AscB(MidB(arrbytOctet, 13, 1))), 2) & _
Right("0" & Hex(AscB(MidB(arrbytOctet, 14, 1))), 2) & _
Right("0" & Hex(AscB(MidB(arrbytOctet, 15, 1))), 2) & _
Right("0" & Hex(AscB(MidB(arrbytOctet, 16, 1))), 2)
End If
End Function

Function baConvertGuidToByteArray(ByVal strHexString)
Dim fso, stream, temp, ts, n, szScrubbedString
Set fso = CreateObject ("scripting.filesystemobject")
Set stream = CreateObject ("adodb.stream")
Const TemporaryFolder = 2

temp = fso.GetSpecialFolder(TemporaryFolder) & fso.gettempname ()

Set ts = fso.createtextfile (temp)

szScrubbedString = Replace(strHexString, "-", "")

ts.write Chr("&h" & Mid(szScrubbedString, 7, 2))
ts.write Chr("&h" & Mid(szScrubbedString, 5, 2))
ts.write Chr("&h" & Mid(szScrubbedString, 3, 2))
ts.write Chr("&h" & Mid(szScrubbedString, 1, 2))
ts.write Chr("&h" & Mid(szScrubbedString, 11, 2))
ts.write Chr("&h" & Mid(szScrubbedString, 9, 2))
ts.write Chr("&h" & Mid(szScrubbedString, 15, 2))
ts.write Chr("&h" & Mid(szScrubbedString, 13, 2))
ts.write Chr("&h" & Mid(szScrubbedString, 17, 2))
ts.write Chr("&h" & Mid(szScrubbedString, 19, 2))
ts.write Chr("&h" & Mid(szScrubbedString, 21, 2))
ts.write Chr("&h" & Mid(szScrubbedString, 23, 2))
ts.write Chr("&h" & Mid(szScrubbedString, 25, 2))
ts.write Chr("&h" & Mid(szScrubbedString, 27, 2))
ts.write Chr("&h" & Mid(szScrubbedString, 29, 2))
ts.write Chr("&h" & Mid(szScrubbedString, 31, 2))

ts.close

stream.type = 1
stream.open
stream.loadfromfile temp

baConvertGuidToByteArray = stream.read

stream.close
fso.deletefile temp

Set stream = Nothing
Set fso = Nothing
End Function


Gruss
Retrodude
Bitte warten ..
Mitglied: RetroDude
12.08.2010 um 09:22 Uhr
Ich habe in folgendem Coedblock ein Problem mit der Fehlerabfrage. Falls auf einem PC WMI nicht richtig funktioniert sollte das Script erneut eine Eingabemaske bringen. So kann man die MAC Adresse manuell eingeben. Wenn dieZuweisung " Set objWMI = GetObject("winmgmts:\\"& strComputerName &"\root\CIMV2")" scheitert ist kein Zugriff auf WMI möglich. Dies möchte ich abfangen. Ich habe zu Beginn des Scripts ein on error resume next reingepflastert und gehofft, dass ich mit der IsObject Prüfung dies abfangen könnte. Das funktioniert leider nicht. Habe keinen Ansatz wie ich dies abfangen könnte. Kann mir da jemand weiterhelfen? ...


Function guidGetUUID
Dim NetworkAdapterSet, NetworkAdapter, objWMI, Man_MAC
Set objWMI = GetObject("winmgmts:\\"& strComputerName &"\root\CIMV2")
If IsObject(objWMI) Then
Set NetworkAdapterSet = objWMI.InstancesOf("Win32_NetworkAdapter")
For Each NetworkAdapter In NetworkAdapterSet
If NetworkAdapter.AdapterType = "Ethernet 802.3" And Not (NetworkAdapter.Description = "Packet Scheduler Miniport" _
Or NetworkAdapter.Description = "VMware Virtual Ethernet Adapter for VMnet1" _
Or NetworkAdapter.Description = "VMware Virtual Ethernet Adapter for VMnet8") Then
guidGetUUID = "00000000-0000-0000-0000-" & Replace(NetworkAdapter.MACAddress, ":", "")
MsgBox(guidGetUUID)
End If
Next
Else
Man_MAC = InputBox("MAC kann nicht ausgelesen werden!","00:00:00:00:00:00")
guidGetUUID = "00000000-0000-0000-0000-" & Replace(Man_MAC, ":", "")
End If
End Function



Gruss
Bitte warten ..
Mitglied: RetroDude
17.08.2010 um 17:20 Uhr
Habs per DB Abfrage bzw. lokales Auslesen per Loginscript und Eintragen in SQL DB gelöst. WMI per Remote ist mir zu mühsam da fehleranfällig. Habe fertig.
Bitte warten ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Ähnliche Inhalte
Windows Netzwerk
Netzlaufwerk offline verfügbar für Mac

Frage von PharIT zum Thema Windows Netzwerk ...

Windows Server
AD Replikation zwischen untergeordneten Domäne zwingend? (4)

Frage von Gien-app zum Thema Windows Server ...

Heiß diskutierte Inhalte
Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

Microsoft Office
Keine Updates für Office 2016 (12)

Frage von Motte990 zum Thema Microsoft Office ...

Grafikkarten & Monitore
Tonprobleme bei Fernseher mit angeschlossenem Laptop über HDMI (11)

Frage von Y3shix zum Thema Grafikkarten & Monitore ...