我将 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