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, 8474 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 ..
Ähnliche Inhalte
Windows Server
gelöst AD RMS - Sharepoint mag ihn nicht (1)

Frage von DerWoWusste zum Thema Windows Server ...

LAN, WAN, Wireless
gelöst Interneteinschränkung anhand MAC-Adresse der Clients (16)

Frage von Colisspo zum Thema LAN, WAN, Wireless ...

Windows Server
Windows Server 2012R2 - Ausfall AD, DNS etc. nach Update (14)

Frage von m8ichael zum Thema Windows Server ...

Neue Wissensbeiträge
Tipps & Tricks

Wie Hackt man sich am besten in ein Computernetzwerk ein

(29)

Erfahrungsbericht von Herbrich19 zum Thema Tipps & Tricks ...

Humor (lol)

Bester Vorschlag eines Supporttechnikers ever: APC

(15)

Erfahrungsbericht von DerWoWusste zum Thema Humor (lol) ...

Windows Server

Exchange 2010 Active Directory und Windows Server 2016

(4)

Erfahrungsbericht von Herbrich19 zum Thema Windows Server ...

Heiß diskutierte Inhalte
Internet
gelöst Mitarbeiter surft auf unerwünschter Seite - Wie damit umgehen? (44)

Frage von sabines zum Thema Internet ...

Netzwerke
Wie erstelle ich ein Intranet (19)

Frage von Leonardnet zum Thema Netzwerke ...

LAN, WAN, Wireless
gelöst Eintägige Netzwerkunterbrechung trotz Backupleitung (15)

Frage von iAmbricksta zum Thema LAN, WAN, Wireless ...

Windows Server
Server 2012 R2 - Zugriff Verweigert bei jeglicher Tätigkeit (13)

Frage von DarkLevi zum Thema Windows Server ...