PowerShell 文件夹权限错误 - 部分或全部身份引用无法翻译

Posted

技术标签:

【中文标题】PowerShell 文件夹权限错误 - 部分或全部身份引用无法翻译【英文标题】:PowerShell folder permission error - Some or all identity references could not be translated 【发布时间】:2012-07-11 12:16:34 【问题描述】:

我以管理员身份运行此脚本,它确实创建了所需的文件夹,只是没有设置适当的权限。

$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

我得到的字符串 3 中的第一个错误如下。我认为这是最重要的,并且会解决其他 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

【问题讨论】:

第 1 个 $accessRule 有一个身份参数有一个域名'O1OAK' 第 4 个 '1OAK'。对吗? 【参考方案1】:

对我来说,这是我使用$user = Get-Credential "username" 验证脚本执行是否知道密码的情况。我不得不把我的$user 变成$user.UserName 给脚本参数他们期望的值

【讨论】:

【参考方案2】:

添加这个以防任何 C#/ASP.NET 开发人员得到这个(这是我的场景,我找到了这篇文章)。

我在公司环境中使用 .NET Core,我需要检查 UserGroups 作为安全性的一部分。代码是这样的(其中“用户”是ClaimsPrincipal):

var windowsIdentity = user.Identity as WindowsIdentity;
if( windowsIdentity is null )
    throw new Exception( $"Invalid Windows Identity user.Identity.Name" );
return windowsIdentity.Groups
    .Select( g => g.Translate( typeof( NTAccount ) ).Value );

无论如何,组负责人删除了我所属的组,AD复制滞后导致我得到标题中的错误。注销和/或重启工作正常。

【讨论】:

【参考方案3】:

用户 ID 的一个问题是 AD 会截断用户名,因此具有长名称“j_reallylongname”的用户将有一个被截断的 samid(安全帐户管理器 (SAM) 帐户名)。 (j_reallylong)

因此,在获取用户名时,请确保在使用 AD 之前对其进行验证。

获得 upns 后,我运行 dsget 查询以获取 samid,然后使用它来构建身份参考。

【讨论】:

【参考方案4】:

错误很明显:Some or all identity references could not be translated.

这意味着找不到该帐户。因此,您要做的就是验证您的帐户。由于您要添加 4 个 ACE,因此您需要确定哪些是无效的。

最简单的方法是使用 ISE 或 PowerGUI 逐行调试。

我用“NT AUTHORITY\SYSTEM”和“BUILTIN\Administrators”尝试了你的代码,它可以工作,所以问题出在"O1OAK\$user""1OAK\$user"。您的文本文件中可能有一个无效帐户。

【讨论】:

谢谢。这是一个愚蠢的错误。我发誓我一整天都在校对。我猜它只是随着时间的推移才开始看起来正确。很抱歉给您带来麻烦并感谢您的时间。

以上是关于PowerShell 文件夹权限错误 - 部分或全部身份引用无法翻译的主要内容,如果未能解决你的问题,请参考以下文章

googlecloud权限访问失败powershell

PowerShell 的 PSSecurityException

PowerShell 的 PSSecurityException

PowerShell 设置文件夹权限

Powershell - 任务管理器 - 权限?

在不同文化中使用 PowerShell 设置文件夹权限