我正在做一个powershell脚本,它在AD中创建新的域用户帐户,并在文件服务器中创建具有相关权限的主目录。
我的问题是我无法获得权限设置。
在下面的代码中,my_fileServer是文件服务器名称; sso表示单点登录ID,在下面的测试代码中设置为“user9999”。
非常感谢任何帮助!
Set-Variable homeDir -option Constant -value "\\my_fileServer\Users"
Set-Variable sso -option Constant -value "user9999"
# If the folder for the user does not exist, make a new one and set the correct permissions.
if ( (Test-Path "$homeDir\$sso") -eq $false)
{
try
{
$NewFolder = New-Item -Path $homeDir -Name $sso -ItemType "Directory"
$Rights = [System.Security.AccessControl.FileSystemRights]"FullControl,Modify,ReadAndExecute,ListDirectory,Read,Write"
$InheritanceFlag = [System.Security.AccessControl.InheritanceFlags]::None
$PropagationFlag = [System.Security.AccessControl.PropagationFlags]::None
$objType =[System.Security.AccessControl.AccessControlType]::Allow
$objUser = New-Object System.Security.Principal.NTAccount "my_full_domain_name\$sso"
$objACE = New-Object System.Security.AccessControl.FileSystemAccessRule `
($objUser, $Rights, $InheritanceFlag, $PropagationFlag, $objType)
$ACL = get-acl -Path $NewFolder
$ACL.AddAccessRule($objACE)
$objReturn = Set-ACL -Path "$homeDir\$sso" -AclObject $ACL
$objReturn
}
catch
{
$msg = $_
$msg
}
}
主文件夹创建正常,但是当我检查用户的权限时,没有勾选任何框。
答案 0 :(得分:7)
问题是你的不干涉。您不允许在子文件夹和文件(他在其文件夹中拥有的项目)上继承权限。这就是您在基本安全窗口中看不到权限(仅“特殊权限”)的原因。如果您打开“高级安全设置”,您将看到用户完全控制OVER THIS文件夹,而不是内容。只要您为CREATOR OWNER添加权限(具有继承),以便所有者可以访问项目,我认为您会没事的。但是,您现在可以像这样修复它:
$InheritanceFlag = @([System.Security.AccessControl.InheritanceFlags]::ContainerInherit,[System.Security.AccessControl.InheritanceFlags]::ObjectInherit)
除非有特殊要求,否则您应该授予用户对其文件夹的完全访问权限(完全继承)。具有固定继承的完整解决方案(我还清理了您的Set-ACL
路径并删除了不必要的返回对象):
try
{
$NewFolder = New-Item -Path $homeDir -Name $sso -ItemType "Directory"
$Rights = [System.Security.AccessControl.FileSystemRights]"FullControl,Modify,ReadAndExecute,ListDirectory,Read,Write"
$InheritanceFlag = @([System.Security.AccessControl.InheritanceFlags]::ContainerInherit,[System.Security.AccessControl.InheritanceFlags]::ObjectInherit)
$PropagationFlag = [System.Security.AccessControl.PropagationFlags]::None
$objType =[System.Security.AccessControl.AccessControlType]::Allow
$objUser = New-Object System.Security.Principal.NTAccount "my_full_domain_name\$sso"
$objACE = New-Object System.Security.AccessControl.FileSystemAccessRule `
($objUser, $Rights, $InheritanceFlag, $PropagationFlag, $objType)
$ACL = Get-Acl -Path $NewFolder
$ACL.AddAccessRule($objACE)
Set-ACL -Path $NewFolder.FullName -AclObject $ACL
}
答案 1 :(得分:2)
我遗憾地无法投票,但我同意上述两个答案(Graimer和C.B.),实际答案是两者的结合。
- 您需要检查" advanced"窗口
- 即使你的代码"工作",没有继承,你的用户也无法在你指定的文件夹中做很多事情。
答案 2 :(得分:0)
所有权限都已正确设置为'Special Permmissions'
,您可以点击Advanced
查看“授权”标签。
答案 3 :(得分:0)
保持简单,少用它......你错过的是SetAccessRuleProtection功能。
这里的代码将为您提供所需的刻度。
if (-not (Test-Path "$homeDir\$sso"))
{
$acl = Get-Acl (New-Item -Path $homedir -Name $sso -ItemType Directory)
# Make sure access rules inherited from parent folders.
$acl.SetAccessRuleProtection($false, $true)
$ace = "$domain\$sso","FullControl", "ContainerInherit,ObjectInherit","None","Allow"
$objACE = New-Object System.Security.AccessControl.FileSystemAccessRule($ace)
$acl.AddAccessRule($objACE)
Set-ACL -Path "$homeDir\$sso" -AclObject $acl
}