2013-02-15 32 views
5

Tôi đang thực hiện kịch bản lệnh PowerShell tạo tài khoản người dùng miền mới trong AD và cũng tạo thư mục chính trong máy chủ tệp có quyền phù hợp.Kịch bản Powershell tạo thư mục nhà cho người dùng và quyền thiết lập

Vấn đề của tôi là tôi không thể nhận được quyền được đặt.

Trong mã bên dưới, my_fileServer là tên máy chủ tệp; sso nghĩa là id đăng nhập một lần, trong mã thử nghiệm bên dưới được đặt thành "user9999".

Bất kỳ trợ giúp nào được đánh giá cao!

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 
    } 
} 

Thư mục chính được tạo OK, nhưng khi tôi kiểm tra quyền cho người dùng, không có hộp nào được chọn. enter image description here

+0

Set-Acl không trả về giá trị. –

Trả lời

6

Vấn đề là sự cố gắng của bạn. Bạn không cho phép được thừa kế trên thư mục con và tệp (các mục mà anh ấy sở hữu trong thư mục của mình). Đó là lý do tại sao bạn không thấy các điều khoản (chỉ "Quyền đặc biệt") trong cửa sổ bảo mật cơ bản. Nếu bạn mở "Cài đặt bảo mật nâng cao", bạn sẽ thấy rằng người dùng có toàn quyền kiểm soát QUÊN thư mục này chứ không phải nội dung. Miễn là bạn thêm quyền (với thừa kế) cho CREATOR OWNER để quyền truy cập của chủ sở hữu vào các mục, tôi nghĩ bạn sẽ ổn. Tuy nhiên, bạn có thể sửa chữa ngay bây giờ như sau:

$InheritanceFlag = @([System.Security.AccessControl.InheritanceFlags]::ContainerInherit,[System.Security.AccessControl.InheritanceFlags]::ObjectInherit) 

Trừ khi có yêu cầu đặc biệt, bạn nên cấp cho người dùng quyền truy cập hoàn toàn vào thư mục của mình (thừa kế đầy đủ). giải pháp đầy đủ với thừa kế cố định (Tôi cũng dọn dẹp đường Set-ACL của bạn và xóa returnobject không cần thiết):

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 
} 
+0

Cảm ơn bạn rất nhiều !! bây giờ tôi hiểu tại sao .. – user1866880

0

Tất cả các quyền được đặt chính xác là 'Special Permmissions', bạn có thể kiểm tra nhấp vào Advanced và xem tab 'Ủy quyền'.

2

tôi buồn bã không thể bỏ phiếu lên, nhưng tôi đồng ý với cả hai câu trả lời trên (Graimer và CB), câu trả lời thực tế là sự kết hợp của cả hai.
- Bạn cần phải kiểm tra quyền trong cửa sổ "nâng cao"
- Mặc dù mã của bạn "hoạt động", không thừa kế người dùng của bạn sẽ không thể thực hiện nhiều trong thư mục bạn chỉ định.

0

Giữ cho nó đơn giản, làm điều đó với ít hơn ... Những gì bạn bỏ lỡ là chức năng SetAccessRuleProtection.

Đây là mã sẽ cung cấp cho bạn các dấu tích mà bạn muốn.

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 

} 
Các vấn đề liên quan