2012-07-11 5 views
7

Ho letto molti post su questo, ma non riesco ancora a capirlo. Sto eseguendo questo script come amministratore e crea le cartelle richieste, semplicemente non imposta le autorizzazioni appropriate. Qualsiasi aiuto sarebbe apprezzato. Grazie!Errore di autorizzazione della cartella PowerShell: alcuni o tutti i riferimenti di identità non possono essere tradotti.

$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 
} 

Il primo errore in una stringa di 3 che ottengo è inferiore. Penso che sia il più importante e riparerà l'altro 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 

spero che questo non è un duplicato e mi dispiace se lo è, ho letto per ore. Grazie!

+0

Il 1 ° $ accessRule ha un parametro di identità con un nome di dominio 'O1OAK' il 4 ° '1OAK'. è rigth? –

risposta

15

L'errore è abbastanza autoesplicativo: Some or all identity references could not be translated.

Ciò significa che il conto non è stato trovato. Quindi quello che devi fare è verificare i tuoi account. Poiché stai aggiungendo 4 ACE, dovrai identificare quale non è valido.

Il modo più semplice per eseguire questa operazione è eseguire il debug, riga per riga, utilizzando ISE o PowerGUI.

ho provato il codice con "NT AUTHORITY \ SYSTEM" e "BUILTIN \ Administrators" e funziona in modo che il problema è con "O1OAK\$user" o "1OAK\$user". Probabilmente hai un account non valido nel tuo file di testo.

+1

Grazie. L'uomo è un errore stupido. Giuro che la prova lo leggo tutto il giorno. Immagino che abbia appena iniziato a sembrare giusto con il tempo. Ci scusiamo per il disturbo e grazie per il tempo. – Siriss

0

un getch con l'ID utente è che AD tronca il nome utente, quindi un utente con un nome lungo "j_reallylongname" avrà un samid (nome dell'account di Security Account Manager (SAM)) che viene troncato. (j_reallylong)

così quando si recuperano i nomi utente, assicurarsi di verificare contro l'annuncio prima di utilizzarlo.

Quando ho il upns, quindi eseguo una query dsget per ottenere il samid quindi utilizzare quello per creare il riferimento di identità.

Problemi correlati