thepinky777
Goto Top

VBS Script AD Gruppe mit Umlaut auslesen

Hallo,

folgendes Problem, vielleicht hatte das schon jemand.

Wir haben unser Active Directoy, dies ist Deutsch installiert worden.
Also gibts standard Gruppen wie:
Domänencomputer
Domänenuser
und sowas mit Umlaut im Namen

ich will ein VBS Script grad bauen, das mit die Member auflistet. klappt auch ohne Probleme,
nur bei Gruppen mit dem ä drin also umlauten klappts nicht.
Und da das Standard Default Names sind werde ich sicher nicht die Namen umbennen im AD.

Gibt es eine andere Möglichkeit?

On Error Resume Next
SetLocale("de-de")  

Set objShell = WScript.CreateObject("WScript.Shell")   
Set objFSO = CreateObject("Scripting.FileSystemObject")  

sMonat = Month(Date)
If sMonat < 10 Then
	sMonat = "0" & sMonat  
End If
sDay = Day(Date)
If sDay < 10 Then
	sDay = "0" & sDay  
End If
sStunde = hour(time)
If sStunde < 10 Then
	sStunde = "0" & sStunde   
End If
sMinute = Minute(time)
If sMinute < 10 Then
	sMinute = "0" & sMinute  
End If

sDate = Year(Date) & "." & sMonat & "." & sDay & "-" & sStunde & sMinute   
wscript.echo sDate 



Dim objDSE, strDefaultDN, strDN, objContainer, objChild


'GroupNameString = "CN=Dom"&Chr(195)&Chr(164)&"nencomputer,OU=Users,DC=domain,DC=com"  '### Test per chr aber geht auch nicht  
GroupNameString = "CN=Domänencomputer,OU=Users,DC=domain,DC=com"  
wscript.echo GroupNameString 

'wscript.quit '## DEBUG   

	LDAPvar = "LDAP://" & GroupNameString   
sTEMPDATA = LDAPvar & vbCrLf 
	'wscript.echo LDAPvar   
	
	Set objGroup = GetObject(LDAPvar)
	objGroup.GetInfo
	 
	arrMemberOf = objGroup.GetEx("member")  
	 
	WScript.Echo "Members:"  
	For Each strMember in arrMemberOf
		'WScript.echo strMember  
		ArrayMemberOne = Split(strMember,",")  
		ArrayMemberTwo =  Split(ArrayMemberOne(0),"=")  
		Wscript.echo ArrayMemberTwo(1) ' & "," & strMember  

		sTEMPDATA = sTEMPDATA & ArrayMemberTwo(1) & "," & strMember & vbCrLf   

	Next


Const ForWritingFile = 2 
FileName = WorkingDir() & sDate & "_AD_Gruppe.txt"  
Set objFSO = CreateObject("Scripting.FileSystemObject")  
set FileWrite = objFSO.OpenTextFile(FileName, ForWritingFile, true)
FileWrite.WriteLine(sTEMPDATA)
FileWrite.Close


function WorkingDir()
	Dim sWorkingDir
	Dim sLeftString
	Dim sLenString

	sWorkingDir = WScript.ScriptFullName
	sLeftString = Right(sWorkingDir,1)

	Do Until sLeftString = "\"  
		sLenString = Len(sWorkingDir)-1
		sWorkingDir = Left(sWorkingDir,sLenString)
		sLeftString = Right(sWorkingDir,1)
	Loop

	WorkingDir = sWorkingDir

end function

Oberer Teil wird nur Datum definiert ausgelesen, dann AD Daten ausgelesen, dann in ein txt file geschrieben, unten die funktion ermittelt aktuelles arbeits Directory
somit speichert er txt file im selben dir wo das vbsscript gespeichert (gestartet) wurde.

Content-ID: 41964917748

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

Ausgedruckt am: 21.11.2024 um 12:11 Uhr

erikro
erikro 16.08.2024 um 10:03:05 Uhr
Goto Top
Moin,

warum? Warum nutzt Du nicht

get-adgroupmember

auf der Powershell?

Liebe Grüße

Erik
ThePinky777
ThePinky777 16.08.2024 aktualisiert um 14:54:38 Uhr
Goto Top
könnt ja jeder face-smile

ne weil ich halt alles auf VBS bei mir hab.
Daher eben spezifisch die frage VBS Script technisch

wobei zur not geht auch
get-adgroupmember -Identity "Domänencomputer" | select name  
im Powershell.

oder wie ich mir beholfen habe einfach eine neue AD Gruppe ohne sonderzeichen und Add alle Computerkonten der Domain... geht auch... man muss halt jedesmal neue Gruppe anlegen - nerft. wenn fertig Gruppe wieder löschen...

Daher die frage ob es möglich ist das Zeichen per VBS Script irgendwie zu fixen um die Abfrage machen zu können.

Weil irgendwie muss es ja gehen kann ja nicht sein das zig tausend jahre vor powershell es nicht möglich war für admins die DEFAULT Gruppe im AD "Domänencomputer" abzufragen per script, und wenn ja dann wars echt mal reife leistung von Microsoft mal wieder...
erikro
erikro 16.08.2024 um 15:31:17 Uhr
Goto Top
OK, in welcher Kodierung wird denn Dein Skript gespeichert?
14135584197
Lösung 14135584197 16.08.2024, aktualisiert am 17.08.2024 um 12:38:36 Uhr
Goto Top
Das liegt nicht am Umlaut, die Gruppen Domänen-Benutzer und Domänen-Computer sind die primären Gruppen der User/Computer deswegen ist die member Property bei den Gruppen leer die Gruppe steht nämlich nur in der primaryGroupID property der Objekte und nicht in memberOf. face-wink

Wenn du alle User brauchst dessen primäre Gruppe z.B. die der Domänen-Benutzer ist dann hilft dir das hier
Dim adoCommand, adoConnection
Dim varBaseDN, varFilter
Dim objRootDSE, varDNSDomain, adoRecordset

Set adoCommand = CreateObject("ADODB.Command")  
Set adoConnection = CreateObject("ADODB.Connection")  
adoConnection.Provider = "ADsDSOObject"  
adoConnection.Open "Active Directory Provider"  
Set adoCommand.ActiveConnection = adoConnection

' Search entire Active Directory domain.  
Set objRootDSE = GetObject("LDAP://RootDSE")  
varDNSDomain = objRootDSE.Get("defaultNamingContext")  
varBaseDN = "<LDAP://" & varDNSDomain & ">"  

' Filter  
varFilter = "(primaryGroupID=513)"  

' Construct the LDAP syntax query.  
adoCommand.CommandText = varBaseDN & ";" & varFilter & ";sAMAccountName;Subtree"  
adoCommand.Properties("Page Size") = 10000  
adoCommand.Properties("Timeout") = 5  
Set adoRecordset = adoCommand.Execute

if adoRecordset.RecordCount > 0 then
	While Not adoRecordset.EOF
		MsgBox adoRecordset("sAMAccountName")  
		adoRecordset.MoveNext
	Wend
else
	msgbox "Keine Mitglieder gefunden",vbExclamation  
End if
adoRecordset.Close
adoConnection.Close
ThePinky777
ThePinky777 23.08.2024 um 16:16:15 Uhr
Goto Top
super Danke bacardi

Computerkonten also Mitglieder der Dänen-Computer :

Dim adoCommand, adoConnection
Dim varBaseDN, varFilter
Dim objRootDSE, varDNSDomain, adoRecordset

Set adoCommand = CreateObject("ADODB.Command")    
Set adoConnection = CreateObject("ADODB.Connection")    
adoConnection.Provider = "ADsDSOObject"    
adoConnection.Open "Active Directory Provider"    
Set adoCommand.ActiveConnection = adoConnection

' Search entire Active Directory domain.    
Set objRootDSE = GetObject("LDAP://RootDSE")    
varDNSDomain = objRootDSE.Get("defaultNamingContext")    
varBaseDN = "<LDAP://" & varDNSDomain & ">"    

' Filter    
varFilter = "(primaryGroupID=515)"    

' Construct the LDAP syntax query.    
adoCommand.CommandText = varBaseDN & ";" & varFilter & ";sAMAccountName;Subtree"    
adoCommand.Properties("Page Size") = 10000    
adoCommand.Properties("Timeout") = 5    
Set adoRecordset = adoCommand.Execute

if adoRecordset.RecordCount > 0 then
	While Not adoRecordset.EOF
		wscript.echo adoRecordset("sAMAccountName")    
		adoRecordset.MoveNext
	Wend
else
	msgbox "Keine Mitglieder gefunden",vbExclamation    
End if
adoRecordset.Close
adoConnection.Close

Wenn jemand mehr infos dazu haben will hier nette erklärung dazu

https://www.faq-o-matic.net/2015/02/18/die-primary-group-in-active-direc ...