Benutzer mit den meisten Antworten
get-aduser | set-aduser --> Logfile?

Frage
-
Guten Morgen,
ich möchte gerne abfragen, welche realen Benutzer alle das PasswordNeverExpires auf True gesetzt haben. Im Feld Description steht bei mir immer "Mr", "Mrs", "Mr." oder "Mrs.", diese Felder nehme ich zur Identifikation eines Benutzers. Danach setze ich direkt den set-aduser, um das PasswordNeverExpires auf False zu setzen:
Get-ADUser -Filter {(Description -eq 'Mr' -or Description -eq 'Mrs' -or Description -eq 'Mr.' -or Description -eq 'Mrs.') -and (objectclass -eq "User") -and (PasswordNeverExpires -eq 'False')} | set-aduser -PasswordNeverExpires $False
Wie kann ich es jetzt noch einbauen, dass zusätzlich ein Logfile geschrieben wird mit "Datum, samaacountname" um zu dokumentieren, bei welchen Benutzern dieser Wert auf PasswordNeverExpires auf False gesetzt wurde?
Danke & Gruß,
Julian.
Antworten
-
Hallo,
ich würde dir zwei Möglichkeiten empfehlen. Entweder du schreibst deine gefundenen Nutzer in eine Variable und nimmst diese dann.:
$AllUserNeverExpired= Get-ADUser -Filter <Dein Filter> foreach($UserNeverExpired in $AllUserNeverExpired) { Set-ADUser -Identity $UserNeverExpired -PasswordNeverExpires $false } $AllUserNeverExpired | select samaacountname, @{label='Date';Expression={Get-Date}} | Out-File -FilePath c:\tmp\NeverExpired.txt
zugegeben, da ist keine Fehlerbehandlung dabei und wenn es bei einem Nutzer nicht klappt, steht dieser trotzdem in der Liste.
Alternativ kannst du das auch Zeilenweise in eine Datei ausgaben, oder brauchst du das zwingend als Tabelle? Da musst du mit einer Hashtable arbeiten. Aber das wäre ein Ansatz:
$output = "c:\tmp\Nervexpired.txt" New-Item -Path $output -Type file $AllUserNeverExpired= Get-ADUser | ForEach-Object { Set-ADUser -Identity $_.name -PasswordNeverExpires $false $samaccountname = $_.samaccountname $date = Get-Date Add-Content -Value "$samaccountname $date" -Path $output }
Ist jetzt nix elegantes aber ein alternativer Ansatz.
Grüße Andy
- Als Antwort markiert Denniver ReiningMVP, Moderator Dienstag, 21. Juli 2015 20:53
Alle Antworten
-
Hallo,
ich würde dir zwei Möglichkeiten empfehlen. Entweder du schreibst deine gefundenen Nutzer in eine Variable und nimmst diese dann.:
$AllUserNeverExpired= Get-ADUser -Filter <Dein Filter> foreach($UserNeverExpired in $AllUserNeverExpired) { Set-ADUser -Identity $UserNeverExpired -PasswordNeverExpires $false } $AllUserNeverExpired | select samaacountname, @{label='Date';Expression={Get-Date}} | Out-File -FilePath c:\tmp\NeverExpired.txt
zugegeben, da ist keine Fehlerbehandlung dabei und wenn es bei einem Nutzer nicht klappt, steht dieser trotzdem in der Liste.
Alternativ kannst du das auch Zeilenweise in eine Datei ausgaben, oder brauchst du das zwingend als Tabelle? Da musst du mit einer Hashtable arbeiten. Aber das wäre ein Ansatz:
$output = "c:\tmp\Nervexpired.txt" New-Item -Path $output -Type file $AllUserNeverExpired= Get-ADUser | ForEach-Object { Set-ADUser -Identity $_.name -PasswordNeverExpires $false $samaccountname = $_.samaccountname $date = Get-Date Add-Content -Value "$samaccountname $date" -Path $output }
Ist jetzt nix elegantes aber ein alternativer Ansatz.
Grüße Andy
- Als Antwort markiert Denniver ReiningMVP, Moderator Dienstag, 21. Juli 2015 20:53
-
Hi Andy,
cool, ich probiere es aus und gebe dir Rückmeldung! Vielen Dank schon mal! :) Und nein, ich benötige keine Tabelle, ein einfaches File genügt.
Bei dem zweiten Beispiel, sind dann die Variable so aus:
$AllUserNeverExpired= Get-ADUser -Filter {(Description -eq 'Mr' -or Description -eq 'Mrs' -or Description -eq 'Mr.' -or Description -eq 'Mrs.') -and (objectclass -eq "User") -and (PasswordNeverExpires -eq 'False')} | ForEach-Object
richtig?
GRüße/Julian.
-
Hi,
sorry das war mein Fehler beim Testen habe ich noch mit der Variable $AllUserNeverExpired gearbeitet. Also einfach die Variable im zweiten Beispiel weglassen und dann sollte es passen.
Ein kleiner Tipp noch, wenn du eine große AD-Umgebung hast solltest du dir dein Filter in ein LdapFilter umschreiben. Der LadapFilter ist nochmal um einige klassen besser. Ich kann es jetzt nicht Testen, aber dein Filter könnte in etwa so aussehen:
Get-ADUser -LDAPFilter "(&(objectCategory=person)(objectClass=user)(userAccountControl:1.2.840.113556.1.4.803:=65536)(Description=Mr??))"
Der wert UserAccountControl besagt, dass es sich um ein Konto handelt, bei dem das PW auf "läuft nie ab" gesetzt ist. Bei deiner Beschreibung, habe ich einfach mit Jokerzeichen gearbeitet, erspart die die vielen oder Abfragen. Voraussetzung ist nur, dass es keine Beschreibung gibt, die die gleiche Syntax hat du aber nicht in deiner Abfrage haben willst. Aber bei Mr?? ist das sehr unwahrscheinlich ?
Grüße
Andy
-
Hi Andy,
vielen Dank für deine Mühe - finde ich wirklich super wie du mir hilfst! Wenn ich in dem zweiten Beispiel die Variable weg lasse, dann fehlt mir der Filter für das Feld Description (Mr., Mrs..). Denn nur mit durch das Feld Description kann ich einen echten User identifizieren und verhindere, dass Service-Accounts versehentlich mit darunter sind.
Grüße,
Julian.
- Bearbeitet Julian79 Donnerstag, 16. Juli 2015 06:29