Owner von Unterordner + Dateien lässt sich nicht ändern
Hallo zusammen,
folgendes Szenario habe ich, für das ich eine Lösung bräuchte, da meine eigenen Ansätze in den letzten Tage nicht wirklich gefruchtet haben, weil ich hier noch Blutiger Anfänger bin und es aktuell das ist, was ich mir bis jetzt zusammenklauben konnte.
Ich möchte per Script den Users und Profiles Ordner von ausgeschiedenen Mitarbeitern löschen.
Das was ich bis jetzt selbst geschafft habe, ist das er diverse Prüfungen zum Bestand des AD-Users, dem noch vorhandensein der 2 relevanten Ordner auf unseren verschiedenen File-Servern macht und heraussucht untern welchen Pfaden er die beiden relevanten Ordner gefunden hat.
Ebenso habe ich es bis jetzt geschafft, dass mir mein Script den Owner der beiden "Top-Ordner" ändert und einem Administratorkonto Vollzugriff auf die Ordner, Unterordner & Dateien zuweist.
Mein Problem ist jetzt, dass ich es nicht schaffe den Owner der Unterordner und Dateien zu ändern.
Mein Scrip schaut wie folgt aus, ist an ein paar Stellen noch Baustelle da ich aktuell Schritt für Schritt vorgehe
Wie gesagt der Code ist an einigen Stellen noch nicht fertig.
Primär arbeite ich aktuell am Teilkonstrukt ab dem Else bzw. dem unteren Bereich wenn der User nicht mehr in der AD vorhanden ist. Auch fehlt natürlich noch der Remove-String.
Wenn mir also hier einer mit ein bisserl Code aushelfen könnte der es mir ermöglicht auch für die Unterordner und Dateien den Owner auf den von mir gewünschten Administratoraccount zu setzen, wäre das super klasse.
Vielen Dank schon einmal im Voraus
folgendes Szenario habe ich, für das ich eine Lösung bräuchte, da meine eigenen Ansätze in den letzten Tage nicht wirklich gefruchtet haben, weil ich hier noch Blutiger Anfänger bin und es aktuell das ist, was ich mir bis jetzt zusammenklauben konnte.
Ich möchte per Script den Users und Profiles Ordner von ausgeschiedenen Mitarbeitern löschen.
Das was ich bis jetzt selbst geschafft habe, ist das er diverse Prüfungen zum Bestand des AD-Users, dem noch vorhandensein der 2 relevanten Ordner auf unseren verschiedenen File-Servern macht und heraussucht untern welchen Pfaden er die beiden relevanten Ordner gefunden hat.
Ebenso habe ich es bis jetzt geschafft, dass mir mein Script den Owner der beiden "Top-Ordner" ändert und einem Administratorkonto Vollzugriff auf die Ordner, Unterordner & Dateien zuweist.
Mein Problem ist jetzt, dass ich es nicht schaffe den Owner der Unterordner und Dateien zu ändern.
Mein Scrip schaut wie folgt aus, ist an ein paar Stellen noch Baustelle da ich aktuell Schritt für Schritt vorgehe
### Deklaration der zu prüfenden Laufwerkspfade ###
$UserToDelete = Read-Host "Anmeldename des zu löschenden Users"
$DeleteFolders = @("\\Pfad_zum\users$\$UserToDelete","\\Pfad_zum\usersextern$\$UserToDelete", "\\Pfad_zum\profiles$\$UserToDelete.V6", "\\Pfad_zum\wsprofiles$\$UserToDelete.V6", "\\Pfad_zum\shprofiles$\$UserToDelete.V6")
$CheckFolders=@("\\Pfad_zum\users$","\\Pfad_zum\usersextern$","\\Pfad_zum\profiles$","\\Pfad_zum\shprofiles$","\\Pfad_zum\wsprofiles$")
$username = Get-ADUser -Filter {SamAccountName -eq $UserToDelete} -ErrorAction SilentlyContinue
### Prüfen ob der zu löschende User in der AD vorhanden ist und löschen der entsprechenden Verzeichnisse###
### Wenn nicht in AD vorhanden Prüfung ob dennoch Users / Profiles Ordner noch vorhanden ist ###
if ($username) {
$result = Get-ChildItem -directory –path $CheckFolders | where {($_ -like "*$UserToDelete*")}
if ([string]::IsNullOrEmpty($result)) {
Write-Warning -Message "Für den Account - $UserToDelete - konnten keine Verzeichnisse gefunden werden.
Es existiert daher nur noch der AD-Account. Möchten Sie diesen nun ebenfalls löschen?"
} else {
Write-Host ""
Write-Host "Es wurden folgende Verzeichnisse gefunden"
Write-Host ""
Get-ChildItem -directory –path $CheckFolders | where {($_ -like "*$UserToDelete*")} | Select-Object -ExpandProperty Fullname
Write-Host ""
}
foreach ($folder in $DeleteFolders) {
if (Test-Path $folder) {
Do {
$delete = Read-Host "Soll der Ordner $Folder gelöscht werden (y/n)?"
Write-Host ""
}
while (($delete -eq "") -or ($delete -eq $null))
if ($delete -eq "y") {
$acl = Get-Acl $folder
$ar = New-Object System.Security.Principal.NTAccount("Administrators")
$acl.SetOwner($ar)
Set-Acl $folder $acl
$acl = Get-Acl $folder
$ar = New-Object System.Security.AccessControl.FileSystemAccessRule("Administrators","FullControl","ContainerInherit, ObjectInherit","None","Allow")
$acl.SetAccessRule($ar)
Set-Acl $folder $acl
Write-Host "Ordner $folder wurde gelöscht."
Write-Host ""
} Else {
Write-Host "Ordner $folder nicht gelöscht."
Write-Host ""
}
}
}
} else {
Write-Warning -Message "Der Account - $UserToDelete - ist NICHT in der AD vorhanden.
Im nächsten Schritt wird geprüft ob der User / Profile Ordner dennoch existieren"
Pause
Write-Host ""
Write-Host "Es wurden folgende Verzeichnisse gefunden"
Write-Host ""
Get-ChildItem -directory –path $CheckFolders | where {($_ -like "*$UserToDelete*")} | Select-Object -ExpandProperty Fullname
Write-Host ""
foreach ($folder in $DeleteFolders) {
if (Test-Path $folder) {
Do {
$delete = Read-Host "Soll der Ordner $Folder gelöscht werden (y/n)?"
Write-Host ""
}
while (($delete -eq "") -or ($delete -eq $null))
if ($delete -eq "y") {
Get-ChildItem $folder -Recurse | ForEach {
$acl = Get-Acl $folder
$ar = New-Object System.Security.Principal.NTAccount("Administrators")
$acl.SetOwner($ar)
Set-Acl $folder $acl
$acl = Get-Acl $folder
$ar = New-Object System.Security.AccessControl.FileSystemAccessRule("Administrators","FullControl","ContainerInherit, ObjectInherit","None","Allow")
$acl.SetAccessRule($ar)
Set-Acl $folder $acl
}
Write-Host "Ordner $folder wurde gelöscht."
Write-Host ""
} Else {
Write-Host "Ordner $folder nicht gelöscht."
Write-Host ""
}
}
}
}
Wie gesagt der Code ist an einigen Stellen noch nicht fertig.
Primär arbeite ich aktuell am Teilkonstrukt ab dem Else bzw. dem unteren Bereich wenn der User nicht mehr in der AD vorhanden ist. Auch fehlt natürlich noch der Remove-String.
Wenn mir also hier einer mit ein bisserl Code aushelfen könnte der es mir ermöglicht auch für die Unterordner und Dateien den Owner auf den von mir gewünschten Administratoraccount zu setzen, wäre das super klasse.
Vielen Dank schon einmal im Voraus
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 5946715688
Url: https://administrator.de/forum/owner-von-unterordner-dateien-laesst-sich-nicht-aendern-5946715688.html
Ausgedruckt am: 20.04.2025 um 18:04 Uhr
3 Kommentare
Neuester Kommentar
Servus,
die Besitzübernahme des Ordners als Besitzer ist gar nicht nötig und überflüssiger Balast im Skript, man muss das Skript nur mit einem Account ausführen der lokale Admin-Rechte auf dem Server des Shares hat und dann das Backup-Privilege-Token im aktuellen Kontext aktivieren, dann lassen sich Ordner egal mit welchen Berechtigungen oder Besitzern sie dort versehen sind löschen, auch wenn die Vererbung unterbrochen ist. So macht das übrigens auch Robocopy wenn man dort den Schalter /B verwendet.
Grüße Uwe
die Besitzübernahme des Ordners als Besitzer ist gar nicht nötig und überflüssiger Balast im Skript, man muss das Skript nur mit einem Account ausführen der lokale Admin-Rechte auf dem Server des Shares hat und dann das Backup-Privilege-Token im aktuellen Kontext aktivieren, dann lassen sich Ordner egal mit welchen Berechtigungen oder Besitzern sie dort versehen sind löschen, auch wenn die Vererbung unterbrochen ist. So macht das übrigens auch Robocopy wenn man dort den Schalter /B verwendet.
# restart elevated if needed
if(!(new-object System.Security.Principal.WindowsPrincipal([System.Security.Principal.WindowsIdentity]::GetCurrent())).IsInRole(544)){start powershell -Verb runas -ArgumentList '-File',$MyInvocation.MyCommand.Definition;exit}
# add privilege tokens to current session (SeTakeOwnershipPrivilege / SeBackupPrivilege / SeRestorePrivilege)
Add-Type '[DllImport("ntdll.dll")] public static extern int RtlAdjustPrivilege(int Privilege, bool Enable, bool CurrentThread, ref bool EnabledOut);' -name token -namespace privilege
9,17,18 | %{[void][privilege.token]::RtlAdjustPrivilege($_,1,0,[ref]0)}
# recursively remove folder
remove-item \\server\testshare\ordner -Recurse -Force -verbose
Grüße Uwe