【问题标题】:Powershell script creating home folder for user and setting permissionsPowershell脚本为用户创建主文件夹并设置权限
【发布时间】:2013-02-15 11:13:03
【问题描述】:

我正在做一个 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
    }
}

主文件夹创建正常,但是当我检查用户的权限时,没有勾选任何框。

【问题讨论】:

  • Set-Acl 不返回值。

标签: powershell folder-permissions


【解决方案1】:

问题是你的继承。您不允许在子文件夹和文件(他在他的文件夹中拥有的项目)上继承权限。这就是您在基本安全窗口中看不到权限(仅“特殊权限”)的原因。如果您打开“高级安全设置”,您将看到用户可以完全控制此文件夹,而不是内容。只要您为 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
}

【讨论】:

    【解决方案2】:

    很遗憾,我无法投票,但我同意上述两个答案(Graimer 和 C.B.),实际答案是两者的结合。
    - 您需要在“高级”窗口中检查权限
    - 即使您的代码“有效”,但如果没有继承,您的用户将无法在您分配给他们的文件夹中做很多事情。

    【讨论】:

      【解决方案3】:

      所有权限都正确设置为'Special Permmissions',您可以点击Advanced查看“授权”选项卡。

      【讨论】:

        【解决方案4】:

        保持简单,事半功倍...您错过的是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
        
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-09-30
          • 2023-03-28
          • 2017-05-31
          • 2017-04-04
          • 1970-01-01
          • 1970-01-01
          • 2015-10-18
          相关资源
          最近更新 更多