Dies ist mit einem Anmeldeskript möglich, aber etwas schwierig und erfordert Tests, um sicherzustellen, dass es für die Zielumgebung ordnungsgemäß funktioniert. Es werden Annahmen über die ACE-Einträge in der ACL (System, Administratoren und Benutzer) getroffen und dass der Benutzer der Eigentümer ist (dies ist normalerweise der Fall). Es ist keine kugelsichere Sicherheit, kann jedoch dazu beitragen, das gelegentliche Szenario "Speichern einer 2-GB-ISO-Datei im Desktop-Ordner des Roaming-Profils" zu minimieren.
Wenn sich ein Benutzer am Ende des letzten Anmeldeskripts in großen Zügen anmeldet, ACL seinen Desktop und andere Speicherorte, sodass er über die Berechtigung Lesen und Ausführen verfügt.
Setzen Sie im logOFF-Skript die Berechtigungen auf den Normalwert zurück.
Zu Beginn des Anmeldeskripts sollte auch überprüft werden, ob die Berechtigungen auf den Normalwert zurückgesetzt werden, falls das Abmeldeskript fehlschlägt.
Es gibt eine Vielzahl von ACL-Tools: icacls, fileacl, setacl.
Das Ermitteln des richtigen Pfads kann mithilfe der folgenden PowerShell-Syntax durchgeführt werden:
[Environment]::GetFolderPath("DesktopDirectory")
Dies sollte verwendet werden, um sicherzustellen, dass der Vorgang am umgeleiteten Standort und nicht am lokalen Standort ausgeführt wird.
So erhalten Sie eine Liste aller Speicherorte für spezielle Umgebungsordner:
[Environment+SpecialFolder]::GetNames([Environment+SpecialFolder])
Das gibt normalerweise zurück:
Desktop-
Programme
Persönliche
MyDocuments-
Favoriten
Start
Letzte
SendTo
StartMenu
MyMusic
DesktopDirectory
MyComputer-
Vorlagen
ApplicationData
LocalApplicationData
InternetCache-
Cookies
Verlauf
CommonApplicationData
System
ProgramFiles
MyPictures
CommonProgramFiles
Beachten Sie, dass es sowohl Desktop- als auch DesktopDirectory-Spezialordner gibt.
Hier ist ein Beispiel für einen PowerShell-Befehl zur Verwendung von FileAcl. Stellen Sie den Desktop-Ordner für einen Benutzer auf Lesen und Ausführen ein:
$user = [System.Environment]::ExpandEnvironmentVariables("%USERDOMAIN%\%USERNAME%")
$exe = "C:\util\FileAcl\FileAcl.exe "
$arg1 = [System.Environment]::GetFolderPath("DesktopDirectory")
$arg2 = "/S"
$arg3 = "`"NT AUTHORITY\SYSTEM`":F"
$arg4 = "/S"
$arg5 = "`"" + $user + "`"" + ":RX"
$arg6 = "/S"
$arg7 = "`"BUILTIN\Administrators`":F"
$arg8 = "/REPLACE"
$arg9 = "/PROTECT"
$allArgs = @($arg1, $arg2, $arg3, $arg4, $arg5, $arg6, $arg7, $arg8, $arg9)
&$exe $allArgs
Um den Ordner auf die Berechtigung zum Ändern für den Benutzer zu setzen, lautet arg5:
$ arg5 = " "" + $user + "
" "+": RWXD "