2010-12-16 4 views

답변

8

나는 martona의 스 니펫을 확장하여 모든 폴더와 하위 폴더에 대한 액세스 권한을 부여 할 수있었습니다. 내 코드는 다음과 같습니다.

$FilesAndFolders = gci "c:\data" -recurse | % {$_.FullName} 
foreach($FileAndFolder in $FilesAndFolders) 
{ 
    #using get-item instead because some of the folders have '[' or ']' character and Powershell throws exception trying to do a get-acl or set-acl on them. 
    $item = gi -literalpath $FileAndFolder 
    $acl = $item.GetAccessControl() 
    $permission = "Everyone","FullControl","Allow" 
    $rule = New-Object System.Security.AccessControl.FileSystemAccessRule $permission 
    $acl.SetAccessRule($rule) 
    $item.SetAccessControl($acl) 
} 
+0

감사합니다. 잘 작동하고 "Get-Item -LiteralPath"가 UNC 경로에서 작동하는지 궁금해하는 경우 원격 컴퓨터에 사용 권한을 적용 할 수 있습니다. – Patrick

4
$acl = Get-Acl c:\mydir 
$permission = "Everyone","FullControl","Allow" 
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule $permission 
$acl.SetAccessRule($rule) 
$acl | Set-Acl c:\mydir 
+0

감사하지만 Everyone 그룹이 최상위 폴더에만 추가되었으며 FullControl 확인란도 선택되어 있지 않습니다. 내가 뭘 놓치고 있니? – tempid

+0

이것은이 질문에 대한 좋은 답변이 아니었지만, 오늘이 예제가 유용하다는 것을 알았습니다. – yzorg

3

때로는 "기본"PowerShell 방식이 반드시 최선의 방법은 아닙니다. 이런 식으로 나는 여전히 icacls.exe를 사용합니다. 좋은 ol 'exes는 PowerShell에서 꽤 잘 작동한다는 것을 기억하십시오. 당신이 설정하고 실행하고자하는 디렉토리에 그냥 CD를

icacls $pwd /grant "Everyone":(OI)(CI)F 

이 모든 사람에게 (권한 상속을 통해) 아래로 현재 디렉토리에 대한 전체 액세스 권한을 제공 할 것입니다. 이것은 dir 구조의 Everyone에 대한 명시적인 거부가없는 한 작동해야합니다.

+0

아래 스크립트를 사용하면 모든 사람 계정이 추가되었지만 권한이 부여되지 않았습니다. 이 접근법은 저에게 효과적이었습니다 ... – BrianH

+0

마법 코드가 의미하는 바를 알고 있다면 이것을 사용합니다. '(OI) (CF)'저는 devop을 돕기 위해 노력하는 개발자입니다. 자동화하는 것을 시도하는 관리자가 아니기 때문에, 아래의 "Read"또는 "FullControl"powershell과 비교할 때 그와 같은 마법은 무섭습니다. – yzorg

관련 문제