2010-07-19 16 views
32

Tôi đang cố gắng bắt chước hành động nhấp chuột phải vào thư mục, đặt "sửa đổi" trên thư mục và có quyền áp dụng cho thư mục và thư mục con và tệp cụ thể .Đặt cờ Thừa kế và Tuyên truyền bằng set-acl và powershell

Tôi chủ yếu ở đó bằng cách sử dụng Powershell, tuy nhiên kế thừa chỉ được đặt là "thư mục con và tệp" thay vì toàn bộ "thư mục, thư mục con và tệp".

Có một số cờ không công bố cho System.Security.AccessControl.PropagationFlags sẽ đặt giá trị này đúng không?

Đây là những gì tôi đang làm việc cho đến thời điểm này.

$Folders = Get-childItem c:\TEMP\ 
$InheritanceFlag = [System.Security.AccessControl.InheritanceFlags]::ContainerInherit -bor [System.Security.AccessControl.InheritanceFlags]::ObjectInherit 
$PropagationFlag = [System.Security.AccessControl.PropagationFlags]::InheritOnly 
$objType = [System.Security.AccessControl.AccessControlType]::Allow 

foreach ($TempFolder in $Folders) 
{ 
echo "Loop Iteration" 
$Folder = $TempFolder.FullName 

$acl = Get-Acl $Folder 
$permission = "domain\user","Modify", $InheritanceFlag, $PropagationFlag, $objType 
$accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule $permission 

$acl.SetAccessRule($accessRule) 
Set-Acl $Folder $acl 
} 
+9

Tôi đã tạo biểu đồ ánh xạ giữa các hộp thoại cấp phép tệp và quyền kết quả: http://bit.ly/inheritMatrix –

+0

Vui lòng thêm sửa đổi từ mã bên dưới bạn đã thực hiện để thực hiện công việc này – riahc3

Trả lời

23

Tôi nghĩ câu trả lời của bạn có thể được tìm thấy trên this page. Từ trang này:

This Folder, thư mục con và tập tin:

InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit 
PropagationFlags.None 
+1

Cảm ơn - hoạt động hoàn hảo ! –

+1

Bạn có thể thêm mã không? Liên kết tới một trang và trích dẫn IMO không phải là câu trả lời đúng. – riahc3

8

Chỉ vì bạn đang ở trong PowerShell không quên về ol' người yêu cũ tốt. Đôi khi, họ có thể cung cấp giải pháp dễ dàng nhất, ví dụ:

icacls.exe $folder /grant 'domain\user:(OI)(CI)(M)' 
+0

Vâng, tôi gần như giải quyết được vấn đề với một tập tin batch DOS và icacls hoặc setacl, nhưng cố gắng tìm hiểu powershell .. cách tốt nhất để tìm hiểu là bằng cách giải quyết một vấn đề với nó, vv –

+1

Tôi hiểu. OTOH Tôi đã sử dụng PowerShell trong> 5 năm nay và tôi không ngần ngại quay trở lại EXE nếu nó dễ hơn đáng kể so với tương đương PowerShell. IOW có rất nhiều điều để học trong PowerShell - một số đáng giá hơn những người khác. :-) –

47

Đây là bảng giúp tìm các cờ bắt buộc cho các kết hợp quyền khác nhau.

 ╔═════════════╦═════════════╦═══════════════════════════════╦════════════════════════╦══════════════════╦═══════════════════════╦═════════════╦═════════════╗ 
    ║    ║ folder only ║ folder, sub-folders and files ║ folder and sub-folders ║ folder and files ║ sub-folders and files ║ sub-folders ║ files ║ 
    ╠═════════════╬═════════════╬═══════════════════════════════╬════════════════════════╬══════════════════╬═══════════════════════╬═════════════╬═════════════╣ 
    ║ Propagation ║ none  ║ none       ║ none     ║ none    ║ InheritOnly   ║ InheritOnly ║ InheritOnly ║ 
    ║ Inheritance ║ none  ║ Container|Object    ║ Container    ║ Object   ║ Container|Object  ║ Container ║ Object  ║ 
    ╚═════════════╩═════════════╩═══════════════════════════════╩════════════════════════╩══════════════════╩═══════════════════════╩═════════════╩═════════════╝ 

Vì vậy, khi David nói, bạn sẽ muốn

 
    InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit 
    PropagationFlags.None 

+0

rất đẹp .. cảm ơn. – nawfal

+4

+1 cho bảng. Sẽ cung cấp thêm +1 chỉ cho các nhân vật vẽ hộp, nếu chỉ tôi có thể :) – Timwi

0

Dưới đây là mô tả the MSDN page cờ và kết quả của việc kết hợp khác nhau của họ là gì.

Flag combinations => Propagation results 
========================================= 
No Flags => Target folder. 
ObjectInherit => Target folder, child object (file), grandchild object (file). 
ObjectInherit and NoPropagateInherit => Target folder, child object (file). 
ObjectInherit and InheritOnly => Child object (file), grandchild object (file). 
ObjectInherit, InheritOnly, and NoPropagateInherit => Child object (file). 
ContainerInherit => Target folder, child folder, grandchild folder. 
ContainerInherit, and NoPropagateInherit => Target folder, child folder. 
ContainerInherit, and InheritOnly => Child folder, grandchild folder. 
ContainerInherit, InheritOnly, and NoPropagateInherit => Child folder. 
ContainerInherit, and ObjectInherit => Target folder, child folder, child object (file), grandchild folder, grandchild object (file). 
ContainerInherit, ObjectInherit, and NoPropagateInherit => Target folder, child folder, child object (file). 
ContainerInherit, ObjectInherit, and InheritOnly => Child folder, child object (file), grandchild folder, grandchild object (file). 
ContainerInherit, ObjectInherit, NoPropagateInherit, InheritOnly => Child folder, child object (file). 

Để có nó áp dụng các điều khoản vào thư mục, cũng như tất cả các thư mục và các tập tin con đệ quy, bạn sẽ muốn sử dụng những lá cờ:

InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit 
PropagationFlags.None 

Vì vậy, thay đổi mã cụ thể mà bạn cần để làm ví dụ của bạn là:

$PropagationFlag = [System.Security.AccessControl.PropagationFlags]::None 
4

Dưới đây là một số mã Powershell ngắn gọn để áp dụng quyền mới cho thư mục bằng cách sửa đổi ACL hiện có (Danh sách điều khiển truy cập).

# Get the ACL for an existing folder 
$existingAcl = Get-Acl -Path 'C:\DemoFolder' 

# Set the permissions that you want to apply to the folder 
$permissions = $env:username, 'Read,Modify', 'ContainerInherit,ObjectInherit', 'None', 'Allow' 

# Create a new FileSystemAccessRule object 
$rule = New-Object -TypeName System.Security.AccessControl.FileSystemAccessRule -ArgumentList $permissions 

# Modify the existing ACL to include the new rule 
$existingAcl.SetAccessRule($rule) 

# Apply the modified access rule to the folder 
$existingAcl | Set-Acl -Path 'C:\DemoFolder' 

Mỗi phòng trong số các giá trị trong danh sách biến $permissions liên quan đến các thông số của this constructor cho lớp FileSystemAccessRule.

Được phép của this page.