2012-07-11 22 views
7

He leído muchas publicaciones sobre esto, pero todavía no puedo conseguirlo. Estoy ejecutando este script como administrador y crea las carpetas requeridas, simplemente no establece los permisos apropiados. Cualquier ayuda sería apreciada. ¡Gracias!Error de permiso de la carpeta PowerShell: algunas o todas las referencias de identidad no se pudieron traducir.

$Users = Get-Content "D:\New_Users.txt" 
ForEach ($user in $users) 
{ 
    $newPath = Join-Path "F:\Users" -childpath $user 
    New-Item $newPath -type directory 

    $UserObj = New-Object System.Security.Principal.NTAccount("DOMAIN",$user) 

    $acl = Get-Acl $newpath 
    $acl.SetAccessRuleProtection($True, $False) 
    $accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule("O1OAK\$user","AppendData,CreateDirectories,CreateFiles,DeleteSubdirectoriesAndFiles,ExecuteFile,ListDirectory,Modify,Read,ReadAndExecute,ReadAttributes,ReadData,ReadExtendedAttributes,ReadPermissions,Synchronize,Traverse,Write,WriteAttributes,WriteData,WriteExtendedAttributes","ContainerInherit, ObjectInherit","None","Allow") 
    $acl.SetAccessRule($accessRule) 
    $accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule("NT AUTHORITY\SYSTEM","FullControl","ContainerInherit, ObjectInherit","None","Allow") 
    $acl.SetAccessRule($accessRule) 
    $accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule("BUILTIN\Administrators","FullControl","ContainerInherit, ObjectInherit","None","Allow") 
    $acl.SetAccessRule($accessRule) 
    $accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule("1OAK\$user","Delete","ContainerInherit, ObjectInherit","None","Allow") 
    $acl.removeAccessRule($accessRule) 
    $acl.SetOwner($UserObj) 
    $acl | Set-Acl $newpath 
} 

El primer error en una cadena de 3 que obtengo está por debajo. Creo que es el más importante y fija el otro 2.

Exception calling "SetAccessRule" with "1" argument(s): "Some or all identity references could not be translated." 
At D:\DOMAIN\IT\IT Private\User Drives\user_folders.ps1:12 char:20 
+  $acl.SetAccessRule <<<< ($accessRule) 
    + CategoryInfo   : NotSpecified: (:) [], MethodInvocationException 
    + FullyQualifiedErrorId : DotNetMethodException 

espero que esto no es un duplicado y lo siento si lo es, he estado leyendo durante horas. ¡Gracias!

+0

La 1ª $ accessRule tiene un parámetro de identidad tiene un nombre de dominio 'O1OAK' el 4 '1OAK'. es rigth? –

Respuesta

15

El error es bastante explicativo: Some or all identity references could not be translated.

Esto significa que la cuenta no se pudo encontrar. Entonces, lo que tienes que hacer es verificar tus cuentas. Como está agregando 4 ACE, deberá identificar cuál no es válida.

La forma más fácil de hacerlo es depurar línea por línea utilizando ISE o PowerGUI.

He intentado tu código con "NT AUTHORITY \ SYSTEM" y "BUILTIN \ Administrators" y funciona así que el problema es con "O1OAK\$user" o "1OAK\$user". Es probable que tengas una cuenta no válida en tu archivo de texto.

+1

Gracias. El hombre es un error tonto. Juro que probé todo el día. Supongo que simplemente comenzó a verse bien con el tiempo. Perdón por el problema y gracias por el tiempo. – Siriss

0

un gotch con el ID de usuario es que AD trunca el nombre de usuario, por lo que un usuario con un nombre largo "j_reallylongname" tendrá un samid (nombre de cuenta de Security Account Manager (SAM)) que se trunca. (j_reallylong)

por lo tanto, al buscar nombres de usuario, asegúrese de verificar contra el AD antes de usarlo.

Cuando tengo las actualizaciones, entonces ejecuto una consulta de dsget para obtener el samid y luego lo uso para construir la referencia de identidad.

Cuestiones relacionadas