Benutzer mit den meisten Antworten
Ordner löschen von nicht mehr vorhandenen AD- Usern

Frage
-
Hallo,
ich bräuchte Hilfe beim Thema Active Directory-Modul für Powershell. Wir haben sehr viele Nutzer und manchmal werden die Homelaufwerkeordner beim Verlassen des Kollegen nicht gelöscht. Kann man dies per Powershell abfragen und in einer Datei speichern? Bzw. die Ordner die keinen aktiven User mehr haben, löschen?
Mein Script (nicht selbst erstellt) zeigt nur sehr wenige Personen an, ich bin mir auch ziemlich sicher, dass da einiges falsch ist
get-aduser -filter * -properties Homedirectory |where {$_.HomeDirectory -ne $null}
Ich wäre wirklich dankbar wenn mir jemand helfen möchte :)
Mit freundlichen Grüßen
Antenne
- Bearbeitet antenne Mittwoch, 13. September 2017 10:42
Antworten
-
Hey Danke für deine Hilfe. Ich habe jetzt folgendes Script verwendet
$homeDriveRoot = "e:\test\"
$leaversRoot = "e:\verschoben\"
$folders = Get-ChildItem $homeDriveRoot | Select -ExpandProperty Name
$activeUsers = Get-ADUser -Filter {Enabled -eq $true} | Select -ExpandProperty SamAccountName
$differences = Compare-Object -ReferenceObject $activeUsers -DifferenceObject $folders | ? {$_.SideIndicator -eq "=>"} | Select -ExpandProperty InputObject
$differences | ForEach-Object {Move-Item -Path "$homeDriveRoot$_" -Destination "$leaversRoot$_" -Force}das funktioniert klasse. Eine Frage hätte ich aber noch. Wie kann ich Ordnerrechte setzen? Die User sollen auf ihren Laufwerken Vollzugriff bekommen, da wir vermehrt Probleme mit der Ordnerumleitung haben und Vollzugriff dieses Problem löst.
mfg antenne
- Bearbeitet antenne Mittwoch, 13. September 2017 12:51
- Als Antwort markiert Denniver ReiningMVP, Moderator Samstag, 23. September 2017 09:00
Alle Antworten
-
Moin,
versuch's mal mit
Get-ADUuser -Filter * -Properties Homedirectory | where {$_.HomeDirectory}
oder besser mit
Get-ADUser -LDAPFilter "(homedirectory=*)" -Properties Homedirectory
EDIT: Könnte es sein, dass Du insgesamt mehr als 1000 User hast?
Evgenij Smirnov
I work @ msg services ag, Berlin -> http://www.msg-services.de
I blog (in German) @ http://it-pro-berlin.de
my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
Exchange User Group, Berlin -> http://exusg.de
Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com- Bearbeitet Evgenij Smirnov Mittwoch, 13. September 2017 11:04
-
EDIT: Könnte es sein, dass Du insgesamt mehr als 1000 User hast?
Woher weißt du das? Ich versuche es gleich mal. Danke erstmal.
Was genau macht der Befehl jetzt? zeigt mir alle Ordner an, dessen Besitzer nicht mehr existieren?
- Bearbeitet antenne Mittwoch, 13. September 2017 11:31
-
Nee, der Befehl zeigt Dir alle Benutzer, die einen Homefolder gesetzt haben.
Wenn Du den umgekehrten Fall haben willst, musst Du zuerst eine Liste min Ordnernamen anfertigen, z.B. so:
$folders = @() Get-ChildItem "\\SERVER\HOMESHARE" | where { $_.PSIsContainer } | foreach {$folders += $_.Name}
(für PS 2)
oder
$folders = (Get-ChildItem "\\SERVER\HOMESHARE" -Directory).Name
(für moderne Versionen).
Dann gehst Du es durch und suchst nach AD-User, der diesen Namen hat. Wenn keiner gefunden wird, gibst Du den Namen aus, das ist dann ein "verwaister" Ordner.
$folders | foreach { if (!(Get-ADUser -LDAPFilter "(sAMAccountName=$_))") {$_} }
Noch präziser ist es, Du suchst nach UNC-Pfaden und schaust, ob bei einem AD-User genau dieser Pfad als "Homedirectory" gesetzt ist.
Evgenij Smirnov
I work @ msg services ag, Berlin -> http://www.msg-services.de
I blog (in German) @ http://it-pro-berlin.de
my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
Exchange User Group, Berlin -> http://exusg.de
Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com -
Hey Danke für deine Hilfe. Ich habe jetzt folgendes Script verwendet
$homeDriveRoot = "e:\test\"
$leaversRoot = "e:\verschoben\"
$folders = Get-ChildItem $homeDriveRoot | Select -ExpandProperty Name
$activeUsers = Get-ADUser -Filter {Enabled -eq $true} | Select -ExpandProperty SamAccountName
$differences = Compare-Object -ReferenceObject $activeUsers -DifferenceObject $folders | ? {$_.SideIndicator -eq "=>"} | Select -ExpandProperty InputObject
$differences | ForEach-Object {Move-Item -Path "$homeDriveRoot$_" -Destination "$leaversRoot$_" -Force}das funktioniert klasse. Eine Frage hätte ich aber noch. Wie kann ich Ordnerrechte setzen? Die User sollen auf ihren Laufwerken Vollzugriff bekommen, da wir vermehrt Probleme mit der Ordnerumleitung haben und Vollzugriff dieses Problem löst.
mfg antenne
- Bearbeitet antenne Mittwoch, 13. September 2017 12:51
- Als Antwort markiert Denniver ReiningMVP, Moderator Samstag, 23. September 2017 09:00
-
Wie kann ich Ordnerrechte setzen?
Evgenij Smirnov
I work @ msg services ag, Berlin -> http://www.msg-services.de
I blog (in German) @ http://it-pro-berlin.de
my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
Exchange User Group, Berlin -> http://exusg.de
Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com -
Hi.
Ich habe folgendes Script verwendet
$rootPath = "e:\test\"
$aclVZ = get-acl $rootPath $arVZ = new-object system.security.accesscontrol.filesystemaccessrule("Domain\$user","FullControl", "ContainerInherit, ObjectInherit", "None", "Allow") $aclVZ.SetAccessRule($arVZ) set-acl $rootPath $aclVZ
aber da bringt er eine Fehlermeldung, es kann keine Methode für eine Ausdruck mit dem Wert NULL aufgerufen werden.
Bei Zeile:1 Zeichen:21
edit:
ich habe das script nochmal abgeändert:
$rootPath = Join-Path "e:\test\" -childpath test.a
$aclVZ = get-acl $rootPath
$permission = "domain\test.a","FullControl","Allow"
$arVZ = new-object system.security.accesscontrol.filesystemaccessrule $permission
$aclVZ.SetAccessRule($arVZ)
set-acl $rootPath $aclVZ das funktioniert jetzt. wie kann ich es aber für alle ordner und deren besitzer machen und nicht nur für einen spezifischen?- Bearbeitet antenne Donnerstag, 14. September 2017 11:47
-
$Users = Get-Content "e:\Ordnerliste1.txt"
ForEach ($user in $users)
{
$rootPath = Join-Path "e:\test\" -childpath $user
$aclVZ = get-acl $rootPath
$permission = "domain$user","FullControl","Allow"
$arVZ = new-object system.security.accesscontrol.filesystemaccessrule $permission
$aclVZ.SetAccessRule($arVZ)
set-acl $rootPath $aclVZ
}ich habe es noch weiter abgeändert und dank einem anderen beitrag hier im forum, bin ich auf die schleife gekommen. jetzt funktioniert alles einwandfrei. aber ist es normal, dass die ordnerbesitzer dann spezialrechte haben? in diesen ist dann alles auf ja, also vollzugriff.
- Bearbeitet antenne Freitag, 15. September 2017 05:02