none
PowerShell에서 파일 권한 확인 RRS feed

답변

  • 안녕하십니까? 김도남 님

    Microsoft TechNet Forum 사이트를 방문해 주셔서 감사합니다.

     

    문의 하신 “PowerShell에서 파일 권한 확인에 대한 답변을 드리겠습니다.


    Step 1 :
    현재 유저 권한 확인

     

    아래의 Script Domain 환경내의 유저가 소속되어 있는 보안그룹을 확인할 수 있습니다.

     

    Add-type -assemblyname System.DirectoryServices.AccountManagement

     

    $domain = (Get-WmiObject Win32_ComputerSystem).Domain

       

    $user = [Environment]::UserName            

     

    $ctype = [System.DirectoryServices.AccountManagement.ContextType]::Domain

       

    $principal = new-Object System.DirectoryServices.AccountManagement.PrincipalContext $ctype, $domain

     

    $idtype = [System.DirectoryServices.AccountManagement.IdentityType]::SamAccountName

     

    $groupPrincipal = [System.DirectoryServices.AccountManagement.userPrincipal]::FindByIdentity($principal, $idtype, $user)

     

     

    Step 2 : 파일 권한 확인

     

    Get-Item 에서 제공받은 Instance GetAccessControl()함수를 이용해서 DACLs 정보를 제공할 수 있습니다.

     

    $fileObjec = Get-Item -Path $fileFullName

     

    $fileObjec.GetAccessControl().Access

     

     

    Step 3 : Full Script

     

    아래의 함수는 현재 유저의 권한을 확인해서 해당 파일에 할당 받은 권한 목록 정보를 제공을 합니다.

     

    function Confirm-FileAccess

    {

        param(

            [Parameter(Mandatory=$true)]

            $fileFullName

        )

       

        $fileObjec = Get-Item -Path $fileFullName

       

       

        Add-type -assemblyname System.DirectoryServices.AccountManagement

     

        $domain = (Get-WmiObject Win32_ComputerSystem).Domain

       

        $user = [Environment]::UserName  

       

        $userDomainName = [Environment]::UserDomainName

       

        $ctype = [System.DirectoryServices.AccountManagement.ContextType]::Domain

       

        $principal = new-Object System.DirectoryServices.AccountManagement.PrincipalContext $ctype, $domain

     

        $idtype = [System.DirectoryServices.AccountManagement.IdentityType]::SamAccountName

     

        $groupPrincipal = [System.DirectoryServices.AccountManagement.userPrincipal]::FindByIdentity($principal, $idtype, $user)

       

        $userSamACcount = "$userDomainName\$user"

       

        $accessRights = @()

       

        $fileACLS  = @{}

       

        $fileObjec.GetAccessControl().Access | % {

       

                $fileACLS[([string]$_.IdentityReference).ToLower()] = $_.FileSystemRights                       

            }      

       

       

       

       

        if($fileACLS.Keys -contains $userSamAccount.ToLower())

        {

            $accessRights += ($fileACLS[$UserSamAccount] | out-string).split(',') | %{ $_.Trim() }

        }

       

        foreach($group in $groupPrincipal.GetGroups())

        {

            $accessRights += ($fileACLS[$group.Name] | out-string).split(',') | %{ $_.Trim() }

        }     

       

        $accessRights | Select-Object -unique   

    }

     

     

    Confirm-FileAccess "C:\1.jpg"

     

     

    제가 문제에 대해 더 알아야 할 것이 있다면 응답 주시면 감사하겠습니다.

    제시해 드린 답변이 도움이 되었기를 바랍니다.

    • 답변으로 표시됨 김도남 2012년 1월 2일 월요일 오전 1:16
    2011년 12월 28일 수요일 오전 7:28
    중재자