본문 바로가기
파워쉘(Powershell)/파워쉘 리모팅(Remoting-원격컴퓨터 제어)

파워쉘-원격 파일서버들의 공유폴더들 권한 읽기

by 예배파 2024. 4. 19.

원격 파일서버들의 모든 공유 폴더들의 permission 정보 읽는 방법

서버 이름으로 worksheet 만들고, 각 폴더의 공유권한 정보를 엑셀에 출력

$excel = New-Object -ComObject Excel.Application
$excel.Visible = $true
$workbook = $excel.Workbooks.add()

#$servers = 'File_Server-1'     #서버 한 대
#$servers = Get-Content .\Servers.txt   # Servers.txt 파일에 저장된 서버들 목록 갖고오
$servers = 'File_Server-1','File_Server-2','File_Server-3'
ForEach($com in $servers){
    Write-host $com
    $r = Invoke-Command -ComputerName $com -ScriptBlock{
        $arr = @()
        Get-WmiObject -Class Win32_LogicalShareSecuritySetting | Select-Object -ExpandProperty Name | %{
            Get-SmbShareAccess -Name $_ | %{
                $pco = [PSCustomObject]@{
                    FolderName = $_.Name 
                    AccountName = $_.AccountName
                    AccessRight = if($_.AccessRight -eq 0){"Full Control"}
                                  elseif($_.AccessRight -eq 1){"Change"}
                                  elseif($_.AccessRight -eq 2){"Read"}
                }
                $arr += $pco   
            }
        }
        $arr 
    }
    $sheet = $workbook.worksheets.Add()
    $sheet.Name = $com
    $sheet.Cells.Item(1,1) = 'Folder Name'
    $sheet.Cells.Item(1,1).Interior.ColorIndex = 44
    $sheet.Cells.Item(1,2) = 'Account Name'
    $sheet.Cells.Item(1,2).Interior.ColorIndex = 44
    $sheet.Cells.Item(1,3) = 'Access Right'
    $sheet.Cells.Item(1,3).Interior.ColorIndex = 44
    $nLineNo = 2
    $r | %{
        $sheet.Cells.Item($nLineNo,1) = $_.FolderName
        $sheet.Cells.Item($nLineNo,2) = $_.AccountName
        $sheet.Cells.Item($nLineNo,3) = $_.AccessRight
        $nLineNo++
    }
}
Write-Host "Done"