Isso é possível com um script de logon, mas é um pouco complicado e exigiria testes para garantir que funcione corretamente no ambiente de destino. Ele faz suposições sobre as entradas da ACE na ACL (sistema, administradores e o usuário) e que o usuário é o proprietário (geralmente são). Não é uma segurança à prova de balas, mas pode ajudar a minimizar o cenário casual "salve um arquivo iso de 2 GB para a pasta da área de trabalho do perfil móvel".
Em traços amplos, quando um usuário faz logon, no final do último script de logon, ACL seu Desktop e outros locais para que eles tenham permissão de leitura e execução.
No script de logoff, reverta as permissões de volta ao normal.
No início do script logON, também deve haver uma verificação para redefinir as permissões para o normal, caso o script de logoff falhe.
Há uma variedade de ferramentas ACL a serem usadas: icacls, fileacl, setacl.
A determinação do caminho correto pode ser executada usando a seguinte sintaxe do PowerShell:
[Environment]::GetFolderPath("DesktopDirectory")
Isso deve ser usado para garantir que a operação seja executada no local redirecionado e não no local.
Para obter uma lista de todos os locais da pasta especial do ambiente:
[Environment+SpecialFolder]::GetNames([Environment+SpecialFolder])
Isso normalmente retorna:
Desktop
Programas
Pessoal Pessoal
MyDocuments
Favoritos
Inicialização
Notícias recentes
SendTo Review
StartMenu
MyMusic
DesktopDirectory
MyComputer
Modelos
ApplicationData
LocalApplicationData
InternetCache
Cookies
História
CommonApplicationData
Sistema
ProgramFiles
MyPictures
CommonProgramFiles
Observe que há pastas especiais Desktop e DesktopDirectory.
Aqui está um exemplo de comando do PowerShell para usar o FileAcl para definir a pasta Desktop como Read and Execute para um usuário:
$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
Para definir a pasta para modificar a permissão do usuário, arg5 seria:
$ arg5=" "" + $user + "
" "+": RWXD "