A1exR 0 Geschrieben 12. September 2019 Melden Teilen Geschrieben 12. September 2019 Moin zusammen! Wir sind bei uns im Unternehmen gerade dabei den 2003 Server mit den ganzen Userprofilen umzustellen. Jetzt brauchte ich eine Liste der Benutzer, die Roaming Profile aktiviert haben. Das habe ich so gelöst: Get-ADUser -Filter "ProfilePath -like '*'" -Properties profilepath | sort SamAccountName | ft -property SamAccountName, Profilepath Hat auch alles wunderbar geklappt. Nur werden auch die Benutzer angezeigt die schon deaktiviert worden sind. Jetzt zu meinem Problem... Mein Chef wollte gerne, dass die Deaktivierten User in der Liste angezeigt werden und wann sich der User das letzte mal angemeldet hat. Leider habe ich kaum Fachwissen wenn es um Powershell geht, da ich noch in der Ausbildung bin und kaum mit PS gearbeitet habe. (BTW... mein Chef kennt sich da auch nicht aus ;D) PS: Habe Powershell auf meinem PC mit dem Active Directory Module ausgeführt. Vielen Dank! Alex Zitieren Link zu diesem Kommentar
testperson 1.707 Geschrieben 12. September 2019 Melden Teilen Geschrieben 12. September 2019 (bearbeitet) Hi, was stellt ihr denn da wie um und was habt ihr am Ende mit den Roaming Profiles vor? Ggfs. wäre es ein besserer Ansatz in diesem Zuge die Roaming Profiles abzulösen. Roaming Profiles brauchst du in der Regel seltenst bis nie. Der letzte Login eines Users ist etwas tricky. Da habe ich mir zuletzt was gebaut, was du gerne auseinandernehmen und für dich anpassen kannst: $ADUsers = @() $Output = @() do{ $OU = Get-ADOrganizationalUnit -SearchBase "OU=<hier liegen>,OU=<deaktivierte Konten>,DC=<domain>,DC=<tld>" -Filter * | Select-Object Name, DistinguishedName | Sort-Object Name | Out-GridView -Title "Welche OU?" -PassThru }until($OU) $OU = Get-ADOrganizationalUnit $OU.DistinguishedName Get-ADDomainController -Filter * | ForEach-Object { if(Test-Path -Path $("\\" + $_.Hostname + "\SYSVOL\*")){ foreach($ADUser in $(Get-ADUser -SearchBase $OU.DistinguishedName -Filter * -Properties lastLogon -Server $_.HostName)){ $temp_ADUsers = New-Object PSObject -Property @{ User = $ADUser.Name LastLogon = $([datetime]::FromFileTime($ADUser.lastLogon)) } $ADUsers += $temp_ADUsers } } else{ Write-Host "$($_.Hostname) ist derzeit nicht erreichbar!" -ForegroundColor Red } } foreach($ADUser in $($ADUsers | Select-Object User -Unique).User){ $Output += $ADUsers | ? User -eq $ADUser | Sort-Object LastLogon -Descending | Select-Object -First 1 } $Output = $Output | Sort-Object User $Output | Out-GridView Aber Achtung: Das Script geht jeden Domain-Controller der Domäne durch um sich dort den jeweiligen "lastLogon" zu holen. Die sollten also alle erreichbar sein, da es sonst sicherlich Fehler gibt. Gruß Jan P.S.: Notiz an mich selber: DCs auf Erreichbarkeit prüfen ins Script aufbauen. ;) bearbeitet 12. September 2019 von testperson Zitieren Link zu diesem Kommentar
MurdocX 953 Geschrieben 12. September 2019 Melden Teilen Geschrieben 12. September 2019 Das soll kein Wettbewerb sein. Hab mir mal den Spaß gemacht und das auch geschrieben. Schon mit @testperson seinem Vermerk auf die Erreichbarkeit $StartOUDN = 'OU=People,DC=MeineDomäne,DC=local' $UserEnabledList = @() Get-ADDomainController -Filter * | ForEach-Object { # Verarbeite DCs If((Test-Connection -ComputerName ($_.Hostname) -Quiet) -eq $false) { # DC nicht erreichbar! Continue } # Abfrage nur der aktivierten AD-Benutzer $UserEnabledList += Get-ADUser -Properties Enabled,LastLogon -Filter {Enabled -eq 'True'} -SearchBase $StartOUDN } # Sortiere und filtere doppelte Einträge heraus $UserEnabledList = $UserEnabledList | Select-Object -Property SamAccountName,LastLogon -Unique | Sort-Object -Property LastLogon -Descending # Auflistung der letzten Anmeldezeiten $UserEnabledList | Format-Table -Property @{Label='Benutzername';Expression={$_.SamAccountName}},@{Label='Letzte Anmeldung (absteigend)';Expression={[DateTime]::FromFileTime($_.Lastlogon)}} Zitieren Link zu diesem Kommentar
testperson 1.707 Geschrieben 12. September 2019 Melden Teilen Geschrieben 12. September 2019 vor 17 Minuten schrieb MurdocX: Schon mit @testperson seinem Vermerk auf die Erreichbarkeit Du bist doch viel zu langsam... Auch mein Test dürfte schneller (und verlässlicher) sein wie deiner. Zitieren Link zu diesem Kommentar
daabm 1.366 Geschrieben 12. September 2019 Melden Teilen Geschrieben 12. September 2019 'Meiner ist länger wie Deiner'? Und so ganz allgemein: Wenn Ihr Skripts entwerft - vermeidet Pipes (besser ForEach-Schleifen) und PS-Arrays und += (besser .NET ArrayList oder so was). Der Performancezuwachs dürfte hinlänglich bekannt sein. Zitieren Link zu diesem Kommentar
A1exR 0 Geschrieben 13. September 2019 Autor Melden Teilen Geschrieben 13. September 2019 Vielen Lieben Dank! Die Roaming Profiles sollen eigentlich alle deaktiviert werden, nur noch paar ausgewählte Personen sollen RP aktiviert haben. Das mit den Deaktivierten Konten war halt wichtig, da es insgesamt circa 1000 Konten sind die RP aktiviert haben. (Wir legen schon seit 4 Jahren keine Benutzer mehr mit RP an.) Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.