Jump to content

adsi Attribute per Script setzen


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Hallo zsammen,

 

ich habe eine Liste mit Accountnamen. Für diese Accountnamen möchte ich die ADSI Einträge mDBOverHardQuotaLimit, mDBOverQuotaLimit, mDBStorageQuota verändern.

 

Hat zufällig jemand ein Script bei der Hand, dass diese Einträge ändert? Am besten wäre natürlich ein Script dass aus einer csv liest.

 

Normalerweise würde ich das bei ein paar Benutzern mit der Hand machen. Dummerweise sprechen wir hier von 12000+ Benutzern. :shock:

 

Ich wäre euch wirklich dankbar wenn ihr da was aus eurer Schatzkiste zabern könnt.

Link zu diesem Kommentar

Hallo Abraxas,

 

probiers mal hiermit... das Script liest die Anmeldenamen der Benutzer aus einer Input-Datei, sucht dann das entsprechenden User-Objekt und setzt dann die Werte. Ich habe mal angenommen, dass Du fixe Werte setzen willst, wenn die Werte sich noch pro User unterscheiden und dass in der Input-Datei hinter dem User stehen muß, dann gibt's noch was zu Ändern am Script... Aber mit einer Text-Datei, in der pro Zeile ein Anmeldename eines Users steht, müßte es funktionieren.

 

Vergiss nicht, deinen eigenen Domänennamen als LDAP-PFad einzusetzen. Anregungen/Erklärungen, wie das Script die User sucht und die Werte setzt, gibt's hier:

 

SelfADSI : LDAP Objekte im Verzeichnis suchen mit ADO

 

SelfADSI : LDAP Objekt-Attribute schreiben

 

On Error resume next
[color="Red"]inputFilename = "c:\usernames.txt"   'hier eigene Werte einsetzen!
domainDN = "DC=yourdomain,dc=com"                   'wert für Domäne "yourdomain.com"[/color]


Set ado = CreateObject("ADODB.Connection")     'Neue ADO Connection erzeugen
ado.Provider = "ADSDSOObject"                        'Die ADSI-Schnittstelle verwenden
ado.Open "ADS-Search"                                   'Beliebigen Namen für die Connection vergeben

Set adoCmd = CreateObject("ADODB.Command")  'Neues ADO-Kommando erzeugen
adoCmd.ActiveConnection = ado                       'Zuordnung zur bestehenden ADO-Connection

Set fso = CreateObject ("Scripting.Filesystemobject")	'Input-Datei öffnen
Set inputFile = fso.OpenTextFile(inputFilename)

While Not inputFile.AtEndOfStream                     'Zeilen mit Usernamen lesen...
userName = Trim(inputFile.ReadLine())

If (Len(userName) > 0) Then
	wscript.Echo "<LDAP://" & domainDN & ">;(sAMAccountName=" & userName & ");ADsPath;subtree"

	adoCmd.CommandText = "<LDAP://" & domainDN & ">;(sAMAccountName=" & userName & ");ADsPath;subtree"
	Set objectList = adoCmd.Execute           'Suche durchführen 
	If (objectList.RecordCount = 1) Then

		Err.Clear                                    'mit dem UserObject verbinden
		Set user = GetObject(objectList.Fields("ADsPath"))
		If (Err.Number <> 0) Then
			WScript.Echo "ERROR: Could not connect to user: " & userName & " : " & Err.Number
		End If

		user.mDBStorageQuota  = [color="Red"]180000[/color]				'Werte setzen
		user.mDBOverQuotaLimit = [color="Red"]200000[/color]
		user.mDBOverHardQuotaLimit = [color="Red"]240000[/color]
		Err.Clear
		user.SetInfo
		If (Err.Number <> 0) Then
			WScript.Echo "ERROR: Could not set limits for user: " & userName & " : " & Err.Number
		End If
	Else
		WScript.Echo "ERROR: User not found: " & userName
	End If
End If
Wend

 

Gruß,

Philipp

Link zu diesem Kommentar
Hallo Abraxas,

 

probiers mal hiermit... das Script liest die Anmeldenamen der Benutzer aus einer Input-Datei, sucht dann das entsprechenden User-Objekt und setzt dann die Werte. Ich habe mal angenommen, dass Du fixe Werte setzen willst, wenn die Werte sich noch pro User unterscheiden und dass in der Input-Datei hinter dem User stehen muß, dann gibt's noch was zu Ändern am Script... Aber mit einer Text-Datei, in der pro Zeile ein Anmeldename eines Users steht, müßte es funktionieren.

 

Vergiss nicht, deinen eigenen Domänennamen als LDAP-PFad einzusetzen. Anregungen/Erklärungen, wie das Script die User sucht und die Werte setzt, gibt's hier:

 

SelfADSI : LDAP Objekte im Verzeichnis suchen mit ADO

 

SelfADSI : LDAP Objekt-Attribute schreiben

 

On Error resume next
[color="Red"]inputFilename = "c:\usernames.txt"   'hier eigene Werte einsetzen!
domainDN = "DC=yourdomain,dc=com"                   'wert für Domäne "yourdomain.com"[/color]


Set ado = CreateObject("ADODB.Connection")     'Neue ADO Connection erzeugen
ado.Provider = "ADSDSOObject"                        'Die ADSI-Schnittstelle verwenden
ado.Open "ADS-Search"                                   'Beliebigen Namen für die Connection vergeben

Set adoCmd = CreateObject("ADODB.Command")  'Neues ADO-Kommando erzeugen
adoCmd.ActiveConnection = ado                       'Zuordnung zur bestehenden ADO-Connection

Set fso = CreateObject ("Scripting.Filesystemobject")	'Input-Datei öffnen
Set inputFile = fso.OpenTextFile(inputFilename)

While Not inputFile.AtEndOfStream                     'Zeilen mit Usernamen lesen...
userName = Trim(inputFile.ReadLine())

If (Len(userName) > 0) Then
	wscript.Echo "<LDAP://" & domainDN & ">;(sAMAccountName=" & userName & ");ADsPath;subtree"

	adoCmd.CommandText = "<LDAP://" & domainDN & ">;(sAMAccountName=" & userName & ");ADsPath;subtree"
	Set objectList = adoCmd.Execute           'Suche durchführen 
	If (objectList.RecordCount = 1) Then

		Err.Clear                                    'mit dem UserObject verbinden
		Set user = GetObject(objectList.Fields("ADsPath"))
		If (Err.Number <> 0) Then
			WScript.Echo "ERROR: Could not connect to user: " & userName & " : " & Err.Number
		End If

		user.mDBStorageQuota  = [color="Red"]180000[/color]				'Werte setzen
		user.mDBOverQuotaLimit = [color="Red"]200000[/color]
		user.mDBOverHardQuotaLimit = [color="Red"]240000[/color]
		Err.Clear
		user.SetInfo
		If (Err.Number <> 0) Then
			WScript.Echo "ERROR: Could not set limits for user: " & userName & " : " & Err.Number
		End If
	Else
		WScript.Echo "ERROR: User not found: " & userName
	End If
End If
Wend

 

Gruß,

Philipp

 

Hallo Philipp,

 

Das Script sieht gut aus. Dummerweise kommt, egal nach welchem User ich suche

 

User not found: User

 

Ich weiß noch nicht wirklich woran das liegt.

 

@Norbert:

ADModify kann ich nicht benutzen, da ich keine Rechte habe über die Powershell Werte zu ändern.

Link zu diesem Kommentar

Hey, ich nochmal,

 

also grundsätzlich haben die anderen Jungs natürlich Recht und ADModify kann das auch, wobei du immer Rechte brauchst, das zu tun, was du tun willst im AD, egal ob mit einem VBScript, Powershell oder inem Tool.... also daran kann es nicht liegen.

 

Naja, das Script hat in unserem Fall halt die Stärke, dass man eben genau die User aus der Datei auslesen kann, deren Wert man setzen will, und dass man es später erweitern kann wenn man für verschiedene User verschiedene Werte setzen will... Wenn du einfach ALLE User der Domäne oder unterhalb einer bestimmten OU mit einem Einheitswert beglücken willst, dann geht es mit ADModify wirklich _viel_ schneller...

 

Jetzt zu Deinen nicht gefundenen Benutzern: Sicher dass Du oben bei domainDN = ... den richtigen LDAP-PFad Deiner Domäne gesetzt hast... Also für firma.de müßte z.B. DC=firma,DC=de da stehen, und für support.firma.de entsprechend dann DC=support,DC=firma,DC=de. :eek:

 

Außerdem mußt Du das Script auf einem Domänenmitglied ausführen, und zwar als Benutzer, der das Recht dazu hat, im AD die entsprechenden Benutzereigenschaften zu ändern. :eek:

 

Und: Bitte geh sicher, dass in deiner Input-Textdatei mit Benutzernamen pro Zeile _NUR_ der Anmeldenamen des Benutzers dasteht. Ist da vielleicht noch ein Semicolon hinter jedem Namen?? :eek: Die Fehlermeldung wirkt so, als wenn in der Datei in mindestens in der erten Zeile "User" steht, vielleicht als Spalten-Header irgendeines CSVDE-Exports....

 

Gruß,

Philipp

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...