App installieren
How to install the app on iOS
Follow along with the video below to see how to install our site as a web app on your home screen.
Anmerkung: This feature may not be available in some browsers.
Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden.
Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Allg. Löschen von Ordnern bestimmer&gelöschter Besitzer
- Ersteller Sightus
- Erstellt am
Sightus
Grand Admiral Special
- Mitglied seit
- 01.12.2006
- Beiträge
- 3.072
- Renomée
- 283
- Mitglied der Planet 3DNow! Kavallerie!
- Aktuelle Projekte
- Einige
- Meine Systeme
- Neumodische Taschenrechner mit grafischer Oberfläche
- BOINC-Statistiken
Moin,
ich habe ein paar (ca. 2.5k) Ordner samt Unterordner und Files von nicht mehr vorhandenen Usern. Werden User aus dem AD gelöscht, während diese Besitzer dieser Ordner waren, dann wird der Besitzer durch einen String wie z.B. S-1-5-21-4534759393.... ersetzt. Ich möchte nun irgendwie eine Prozedur haben (batch oder powershell), die mir alle Ordner solcher Karteileichen in einem bestimmten Pfad löscht. Von Hand geht das natürlich leicht, aber ich würde das gerne automatisieren.
Hat da jemand einen Tipp?
Danke und Gruß
ich habe ein paar (ca. 2.5k) Ordner samt Unterordner und Files von nicht mehr vorhandenen Usern. Werden User aus dem AD gelöscht, während diese Besitzer dieser Ordner waren, dann wird der Besitzer durch einen String wie z.B. S-1-5-21-4534759393.... ersetzt. Ich möchte nun irgendwie eine Prozedur haben (batch oder powershell), die mir alle Ordner solcher Karteileichen in einem bestimmten Pfad löscht. Von Hand geht das natürlich leicht, aber ich würde das gerne automatisieren.
Hat da jemand einen Tipp?
Danke und Gruß
Dalai
Grand Admiral Special
- Mitglied seit
- 14.06.2004
- Beiträge
- 7.420
- Renomée
- 262
- Standort
- Meiningen, Thüringen
- Mein Laptop
- Thinkpad T43 mit 15" UXGA (1600x1200), 2x 1 GiB RAM, 100GB HD, Bluetooth, GBit LAN, ATi X300
- Prozessor
- AMD Ryzen 5 2600 (Pinnacle Ridge)
- Mainboard
- ASUS Prime X370-A
- Kühlung
- Noctua NH-U12S mit 1x NF-F12
- Speicher
- Crucial Ballistix Sport LT weiß (BLS2K8G4D32AESCK): 2x 8 GiB DDR4-3200 (CL16) @ 1,25V
- Grafikprozessor
- Zotac GeForce GTX 1060 6GB AMP Edition
- Display
- Dell U2410, 24 Zoll, IPS, 16:10
- SSD
- Samsung 850 Evo 250 GB
- HDD
- WD40EZRZ (WD Blue) 4000GB SATA3, WD20EZRX (WD Green) 2000GB SATA3
- Optisches Laufwerk
- Pio DVR-212 (DVD-RAM), ASUS E818A6T (DVD-ROM), Pio DVD-106S (Slot-in DVD-ROM)
- Soundkarte
- Creative SoundBlaster Audigy 2 ZS PCI
- Gehäuse
- Lian Li PC-8NB Midi-Tower
- Netzteil
- Enermax EMP400AGT MaxPro 400W
- Betriebssystem
- Windows 7 Professional x64 und immer mal wieder ein neues Linux :-)
- Webbrowser
- Mozilla Firefox mit diversen Erweiterungen
- Verschiedenes
- 2x 120mm Gehäuselüfter (Front und Rückwand), DVBSky T9580, Sharkoon Frontpanel B (2x USB 3.0)
Sowas ähnliches hab ich vor einigen Monaten für Windows Firewall-Regeln gemacht, weil MS offensichtlich unfähig ist, Windows ordentlich zu programmieren. Hier das Skript, das ich dafür verwende:
Im Prinzip müsstest du nur den Befehl Get-NetFirewallRule ersetzen durch einen Mechanismus zum Iterieren/Auflisten über/von Verzeichnisse. Vielleicht mit Get-Acl oder sowas, denn das bietet auch einen Owner. Ob die Funktion SidToUser auch in einem AD funktioniert, kann ich nicht beurteilen, aber ich kann mich erinnern, dass ich bei meiner Suche vor einigen Monaten auch Mechanismen fand, die den SID an einem AD testen. Und das Löschen muss dann natürlich nicht mit Remove-NetFirewallRule erfolgen, is ja klar .
Vielleicht genügt das erstmal als Denkanstoß .
Grüße
Dalai
Code:
Param([switch] $dryRun
)
Function SidToUser
{
Param(
[Parameter(Mandatory=$true)] [string] $SID
)
$objSID = New-Object System.Security.Principal.SecurityIdentifier(${SID})
try
{
$objUser = $objSID.Translate([System.Security.Principal.NTAccount])
return $objUser.Value
}
catch
{
return $Null
}
}
$FWcount=0
Write-Host "`r`nGetting firewall rules from the system ..."
$FWrules = $(Get-NetFirewallRule | Where-Object Owner -Like "S-1-5-*")
Write-Host ""
foreach($rule in ${FWrules})
{
$sid=$rule.Owner
if (! (SidToUser "${sid}") )
{
Write-Host -NoNewline "Deleting rule "
Write-Host -NoNewline -ForegroundColor Cyan "$($(${rule}).DisplayName) "
Write-Host -NoNewline "in group "
Write-Host -NoNewline -ForegroundColor Cyan "$($($rule).DisplayGroup) "
Write-Host -NoNewline "of user with unknown SID "
Write-Host -ForegroundColor Cyan "${sid}"
$FWcount++
if (!$dryRun)
{
${rule} | Remove-NetFirewallRule
}
}
}
Write-Host -NoNewline "`r`nDeleted "
Write-Host -NoNewline -ForegroundColor Cyan "${FWcount} "
Write-Host "rules.`r`n"
Start-Sleep 5
Vielleicht genügt das erstmal als Denkanstoß .
Grüße
Dalai
Zuletzt bearbeitet:
BoMbY
Grand Admiral Special
- Mitglied seit
- 22.11.2001
- Beiträge
- 7.468
- Renomée
- 293
- Standort
- Aachen
- Prozessor
- Ryzen 3700X
- Mainboard
- Gigabyte X570 Aorus Elite
- Kühlung
- Noctua NH-U12A
- Speicher
- 2x16 GB, G.Skill F4-3200C14D-32GVK @ 3600 16-16-16-32-48-1T
- Grafikprozessor
- RX 5700 XTX
- Display
- Samsung CHG70, 32", 2560x1440@144Hz, FreeSync2
- SSD
- AORUS NVMe Gen4 SSD 2TB, Samsung 960 EVO 1TB, Samsung 840 EVO 1TB, Samsung 850 EVO 512GB
- Optisches Laufwerk
- Sony BD-5300S-0B (eSATA)
- Gehäuse
- Phanteks Evolv ATX
- Netzteil
- Enermax Platimax D.F. 750W
- Betriebssystem
- Windows 10
- Webbrowser
- Firefox
Am einfachsten wäre vermutlich eine simple Batch mit "del X:\Users\S-1-5-*" über den Task Scheduler jede Stunde, oder so, auszuführen ...
Dalai
Grand Admiral Special
- Mitglied seit
- 14.06.2004
- Beiträge
- 7.420
- Renomée
- 262
- Standort
- Meiningen, Thüringen
- Mein Laptop
- Thinkpad T43 mit 15" UXGA (1600x1200), 2x 1 GiB RAM, 100GB HD, Bluetooth, GBit LAN, ATi X300
- Prozessor
- AMD Ryzen 5 2600 (Pinnacle Ridge)
- Mainboard
- ASUS Prime X370-A
- Kühlung
- Noctua NH-U12S mit 1x NF-F12
- Speicher
- Crucial Ballistix Sport LT weiß (BLS2K8G4D32AESCK): 2x 8 GiB DDR4-3200 (CL16) @ 1,25V
- Grafikprozessor
- Zotac GeForce GTX 1060 6GB AMP Edition
- Display
- Dell U2410, 24 Zoll, IPS, 16:10
- SSD
- Samsung 850 Evo 250 GB
- HDD
- WD40EZRZ (WD Blue) 4000GB SATA3, WD20EZRX (WD Green) 2000GB SATA3
- Optisches Laufwerk
- Pio DVR-212 (DVD-RAM), ASUS E818A6T (DVD-ROM), Pio DVD-106S (Slot-in DVD-ROM)
- Soundkarte
- Creative SoundBlaster Audigy 2 ZS PCI
- Gehäuse
- Lian Li PC-8NB Midi-Tower
- Netzteil
- Enermax EMP400AGT MaxPro 400W
- Betriebssystem
- Windows 7 Professional x64 und immer mal wieder ein neues Linux :-)
- Webbrowser
- Mozilla Firefox mit diversen Erweiterungen
- Verschiedenes
- 2x 120mm Gehäuselüfter (Front und Rückwand), DVBSky T9580, Sharkoon Frontpanel B (2x USB 3.0)
@BoMbY:
Nee, so einfach geht's nicht.
Längere Erklärung: Jedes Dateisystemobjekt hat irgendeinen Besitzer, und dieser Besitzer hat einen SID (Security Identifier). Üblicherweise sieht man den Besitzer in den Eigenschaften des Dateisystemobjekts (Register Sicherheit). Wenn das zugehörige Nutzerkonto existiert, sieht man dort den Namen des Kontos. Wenn ein Nutzerkonto gelöscht wird, kann dieser SID nicht mehr aufgelöst werden, so dass der SID statt des Namens als Besitzer angezeigt wird. An den Dateisystemobjekten an sich ändert sich gar nichts.
Grüße
Dalai
Nee, so einfach geht's nicht.
Längere Erklärung: Jedes Dateisystemobjekt hat irgendeinen Besitzer, und dieser Besitzer hat einen SID (Security Identifier). Üblicherweise sieht man den Besitzer in den Eigenschaften des Dateisystemobjekts (Register Sicherheit). Wenn das zugehörige Nutzerkonto existiert, sieht man dort den Namen des Kontos. Wenn ein Nutzerkonto gelöscht wird, kann dieser SID nicht mehr aufgelöst werden, so dass der SID statt des Namens als Besitzer angezeigt wird. An den Dateisystemobjekten an sich ändert sich gar nichts.
Grüße
Dalai
Sightus
Grand Admiral Special
- Mitglied seit
- 01.12.2006
- Beiträge
- 3.072
- Renomée
- 283
- Mitglied der Planet 3DNow! Kavallerie!
- Aktuelle Projekte
- Einige
- Meine Systeme
- Neumodische Taschenrechner mit grafischer Oberfläche
- BOINC-Statistiken
Genau, diese Ordner bleiben als "Karteileichen" zurück. Ich schaue mir das obere Script mal morgen genauer an, ist nicht so mein Steckenpferd.
Dalai
Grand Admiral Special
- Mitglied seit
- 14.06.2004
- Beiträge
- 7.420
- Renomée
- 262
- Standort
- Meiningen, Thüringen
- Mein Laptop
- Thinkpad T43 mit 15" UXGA (1600x1200), 2x 1 GiB RAM, 100GB HD, Bluetooth, GBit LAN, ATi X300
- Prozessor
- AMD Ryzen 5 2600 (Pinnacle Ridge)
- Mainboard
- ASUS Prime X370-A
- Kühlung
- Noctua NH-U12S mit 1x NF-F12
- Speicher
- Crucial Ballistix Sport LT weiß (BLS2K8G4D32AESCK): 2x 8 GiB DDR4-3200 (CL16) @ 1,25V
- Grafikprozessor
- Zotac GeForce GTX 1060 6GB AMP Edition
- Display
- Dell U2410, 24 Zoll, IPS, 16:10
- SSD
- Samsung 850 Evo 250 GB
- HDD
- WD40EZRZ (WD Blue) 4000GB SATA3, WD20EZRX (WD Green) 2000GB SATA3
- Optisches Laufwerk
- Pio DVR-212 (DVD-RAM), ASUS E818A6T (DVD-ROM), Pio DVD-106S (Slot-in DVD-ROM)
- Soundkarte
- Creative SoundBlaster Audigy 2 ZS PCI
- Gehäuse
- Lian Li PC-8NB Midi-Tower
- Netzteil
- Enermax EMP400AGT MaxPro 400W
- Betriebssystem
- Windows 7 Professional x64 und immer mal wieder ein neues Linux :-)
- Webbrowser
- Mozilla Firefox mit diversen Erweiterungen
- Verschiedenes
- 2x 120mm Gehäuselüfter (Front und Rückwand), DVBSky T9580, Sharkoon Frontpanel B (2x USB 3.0)
Da es mich ebenfalls interessiert hat, wie man sowas bewerkstelligen kann, hab ich heute etwas gebastelt:
Nicht sonderlich schön, zumal Remove-Item fragt, wenn ganze nicht leere Verzeichnisse gelöscht werden sollen. Schnell scheint es auch nicht zu sein. Ist aber kein Wunder, denn PowerShell-Skripte hab ich bisher ziemlich wenige geschrieben, so dass da mit Sicherheit noch Optimierungspotential besteht .
Du solltest beim Testen unbedingt den Schalter dryRun benutzen! Ich hatte überlegt, ob man das Skript einfach nur die Dateisystemobjekte auflisten lässt, so dass man dessen Ausgabe dann selber in der PowerShell an Remove-Item übergeben kann - kommt eben auf das Einsatzgebiet an (manuell vs. automatisiert per Taskplaner o.ä.).
Grüße
Dalai
Code:
Param(
[Parameter(Mandatory=$true)] [string] $Path,
[switch] $dryRun
)
Function SidToUser
{
Param(
[Parameter(Mandatory=$true)] [string] $SID
)
$objSID = New-Object System.Security.Principal.SecurityIdentifier(${SID})
try
{
$objUser = $objSID.Translate([System.Security.Principal.NTAccount])
return $objUser.Value
}
catch
{
return $Null
}
}
$Count=0
Write-Host "`r`nReading directory contents of ${Path} ..."
$FSObjectList = $(Get-ChildItem -Recurse -Path "${Path}" | Get-Acl | Where-Object Owner -Like "O:S-1-5-*")
Write-Host ""
foreach($f in ${FSObjectList})
{
$sid=($f.Owner).SubString(2)
if (! (SidToUser "${sid}") )
{
Write-Host -NoNewline "Deleting object "
Write-Host -NoNewline -ForegroundColor Cyan "$(${f}.Path.SubString(38)) "
Write-Host -NoNewline "of user with unknown SID "
Write-Host -ForegroundColor Cyan "${sid}"
$Count++
if (!$dryRun)
{
${f} | Remove-Item
}
}
}
Write-Host -NoNewline "`r`nDeleted "
Write-Host -NoNewline -ForegroundColor Cyan "${Count} "
Write-Host "objects.`r`n"
Du solltest beim Testen unbedingt den Schalter dryRun benutzen! Ich hatte überlegt, ob man das Skript einfach nur die Dateisystemobjekte auflisten lässt, so dass man dessen Ausgabe dann selber in der PowerShell an Remove-Item übergeben kann - kommt eben auf das Einsatzgebiet an (manuell vs. automatisiert per Taskplaner o.ä.).
Grüße
Dalai
Ähnliche Themen
- Antworten
- 0
- Aufrufe
- 52K
- Antworten
- 0
- Aufrufe
- 377K