Azure AD 帐户的 Windows 10 NTFS 权限

Azure AD 帐户的 Windows 10 NTFS 权限

我将 Windows 10 加入 Azure Active Directory,并使用我的 Azure AD 电子邮件地址和密码登录。

whoami返回AzureAD\<Full Name>,并且用户配置文件夹的 NTFS 权限也显示文件夹所有者为AzureAD\<Full Name>。该用户有一个名为 的配置文件夹Users\<Full Name>

Select a principal但是,当我想授予其他文件夹的权限时,我根本无法在对话框中选择此用户。 Azure AD 用户的正确语法是什么?

仅使用 Azure AD 帐户时,其中根本没有用户帐户Local Users(与链接到本地​​用户的 Microsoft 帐户不同)。

答案1

新版本显示实际域名,但同样的问题仍然存在。您可以使用 Powershell 设置权限。

    $dir = get-item -Path 'C:\users\jshelby\Desktop\testdir\'    
    $acl = $dir.GetAccessControl('Access')
    $username = 'domain\username'
    $AccessRights = New-Object System.Security.AccessControl.FileSystemAccessRule($username,'Modify','ContainerInherit,ObjectInherit','None','Allow')
    $acl.SetAccessRule($AccessRights)
    Set-Acl -path $dir -AclObject $acl

答案2

您可以使用这个简短的 PowerShell 示例,该示例已在 Windows 10 内部版本 1809 上测试过,该示例已注册 Azure Active Directory。请将 $path 修改为您的本地文件夹,对于 $permission,您可以使用任何 Azure AD 用户,但用户名必须采用 AzureAD\upn 格式(例如 AzureAD\[电子邮件保护]

$path = "C:\myfolder"
$permission = "AzureAD\[email protected]","FullControl","Allow"
(Get-Acl $path).SetAccessRule((New-Object System.Security.AccessControl.FileSystemAccessRule $permission)) | Set-Acl $path

答案3

耶稣的剧本里有一个错字。

Set-Acl : Cannot bind argument to parameter 'Path' because it is null.
At line:6 char:19
+     Set-Acl -path $Path -AclObject $Acl
+                   ~~~~~
    + CategoryInfo          : InvalidData: (:) [Set-Acl], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.SetAclCommand

这是更新后的脚本:

    $dir = get-item -Path 'C:\users\jshelby\Desktop\testdir\'    
    $acl = $dir.GetAccessControl('Access')
    $username = 'domain\username'
    $AccessRights = New-Object System.Security.AccessControl.FileSystemAccessRule($Username,'Modify','ContainerInherit,ObjectInherit','None','Allow')
    $Acl.SetAccessRule($AccessRights)
    Set-Acl -path $dir -AclObject $Acl

另外,我首先在 PowerShell Core 上尝试了这个。$dir.GetAccessControl()它似乎不存在于 PowerShell Core 中,只有 Windows PowerShell。

答案4

@Hrvoje Kusulja 的答案有正确的概念,但是有一个错误,因为SetAccessRule它没有返回调用它的 ACL 对象。

解决方法是将 ACL 分配给一个变量,以便在SetAccessRule调用之后我们仍然可以传递对它的引用Set-ACL

$path = "C:\myfolder"
$permission = "AzureAD\[email protected]","FullControl","Allow"
$acl = (Get-Acl $path)
$acl.SetAccessRule((New-Object System.Security.AccessControl.FileSystemAccessRule $permission)) 
$acl | Set-Acl $path

相关内容