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.
Ich wäre euch wirklich dankbar wenn ihr da was aus eurer Schatzkiste zabern könnt.
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:
On Error resume next
inputFilename = "c:\usernames.txt" 'hier eigene Werte einsetzen!
domainDN = "DC=yourdomain,dc=com" 'wert für Domäne "yourdomain.com"
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 = 180000 'Werte setzen
user.mDBOverQuotaLimit = 200000
user.mDBOverHardQuotaLimit = 240000
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
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:
On Error resume next
inputFilename = "c:\usernames.txt" 'hier eigene Werte einsetzen!
domainDN = "DC=yourdomain,dc=com" 'wert für Domäne "yourdomain.com"
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 = 180000 'Werte setzen
user.mDBOverQuotaLimit = 200000
user.mDBOverHardQuotaLimit = 240000
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.
ADModify kann ich nicht benutzen, da ich keine Rechte habe über die Powershell Werte zu ändern.
Wie kommst du zu der Annahme dass ADModify ein Powerhell Befehl wäre? Und die Berechtigungen sind ausserdem nicht an das Werkzeug (Powershell, ADModify, LDIFDE...) gebunden.
Wie kommst du zu der Annahme dass ADModify ein Powerhell Befehl wäre? Und die Berechtigungen sind ausserdem nicht an das Werkzeug (Powershell, ADModify, LDIFDE...) gebunden.
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.
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.
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?? Die Fehlermeldung wirkt so, als wenn in der Datei in mindestens in der erten Zeile "User" steht, vielleicht als Spalten-Header irgendeines CSVDE-Exports....