none
File Permission 복사 RRS feed

답변

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

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

     

    문의 하신 “File Permission 복사에 대한 답변을 드리겠습니다

     

    PowerShell Sciprt를 이용하면 윈도우 기본 파일 시스템을 복구 할 수 있습니다.

     

    아래의 시나리오는 동일한 A, B 서버에서 A서버의 C: File Permission B서버에 동일하게 적용합니다.

     

     

    Step 1 : File Permission 저장

     

    아래의 Script A서버에서 작업하며 해당 폴더 하위 폴더, 파일의 Permission을 파일에 저장을 합니다.

     

    function Get-FilePermission

    {

        param(

            [Parameter(Mandatory=$true)]

            $folderPath,

            [Parameter(Mandatory=$true)]

            $filePath

        )

       

        trap [Exception]

        {

            Write-Host $_.Exception.Message;

            continue;

        }

       

        $stringBuilder = New-Object System.Text.StringBuilder

       

        Get-Childitem -Path $folderPath -Recurse | %  {

            $currentFileName = $_.FullName;

            $stringBuilder.AppendLine((cacls $_.FullName /s)[0]) | out-null;

            Write-Host $_.FullName "is success."

             }

       

        $streamWriter = New-Object System.IO.StreamWriter $filePath,"true"

       

        $streamWriter.WriteLine($stringBuilder.ToString())

       

        $streamWriter.Close()   

       

    }

     

     

    Get-FilePermission "C:\" "C:\TempData\FilePermissionData.txt"

     

    위에서 저장하는 파일은 아래와 같이 미리 작성을 해야 합니다.

     

     

     

    Step2  : File Permission 덮어 씌우기

     

    B서버에서 작업하며 File Permission을 저장한 파일을 이용해서 다른 시스템에 동일하게 File Permission을 복사할 수 있습니다. 하지만 기존 Permission의 정보는 제거되기 때문에 작업하기 전에 백업을 추천합니다.

     

    function Set-FilePermission

    {

        param(

            [Parameter(Mandatory=$true)]

            $fileFullName

        )

       

        trap [Exception]

        {       

            Write-Host $currentFileName

            Write-Host $_.Exception.Message;

            continue;

        }  

       

       

        Import-CSV $fileFullName -Delimiter ' ' | % {

                $currentFileName = $_.Fullname;

                $acl = Get-Acl $_.Fullname;

                $acl.SetSecurityDescriptorSddlForm($_.SDDL);

                Set-Acl -aclObject $acl $_.Fullname;

                Write-Host $currentFileName "is success."

        }

    }

     

     

    Set-FilePermission "C:\TempData\FilePermissionData.txt"

     

     

    참고 자료

     

    Using the Import-Csv Cmdlet

    http://technet.microsoft.com/en-us/library/ee176874.aspx

    Set-Acl

    http://technet.microsoft.com/ko-kr/library/dd315261.aspx

    Get-ChildItem

    http://technet.microsoft.com/ko-kr/library/dd347686.aspx

     

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

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

     

    • 답변으로 표시됨 김도남 2011년 11월 14일 월요일 오전 7:34
    2011년 11월 11일 금요일 오전 2:14
    중재자