2016-07-01 10 views
1

私は、目的地を取得し、それぞれの権限を持つフォルダとサブフォルダを出力するスクリプトを作成するように求められました。個々のフォルダのアクセス権を取得するPowershell

私は、実際のスクリプトであると思っていますが、実際のアクセス許可の種類が必要だと言われています。これは実際にGet-ACLを使って行うことができますか?誰もがこのために正しい方向に私を指すことができ、私はここで始めるには考えているし、私のその後のようなものですリストが表示されますPowershell

Add-Type -AssemblyName System.Windows.Forms 

$info = "" 
$OutputString = "" 
$step = 0 
$File = "C:\Gower\FolderPermissions.txt" 

function DisplayForm{ 
$OutputString = "" 

#Some GUI Code here taken out for readability 

if ($result -eq [System.Windows.Forms.DialogResult]::OK) 
{ 

    $baseFolder = $textBox.Text 
    $folderTest = Test-Path $baseFolder 
    if($folderTest -eq "True"){ 
     "$baseFolder `r`n" | Out-File $File -Append 
     Extract-Permissions($baseFolder) 
     "`r`n`r`n" | Out-File $File -Append 
     #OutputList 
     $info = "SAVED TO $File" 
     "Process complete `r`nFile Located at: $file" 
     DisplayForm 
    }else{ 
     $info = "$baseFolder not found" 
     DisplayForm 
    } 
} 
} 

function outputList{ 
    $OutputString 
} 



function Extract-Permissions($baseFolder) { 
    $folders = Get-ChildItem $baseFolder | Where-Object { $_.PSisContainer } 
    $baseACL = (Get-Acl $baseFolder).Access | Select-Object -ExpandProperty IdentityReference 

"$baseFolder : $baseACL" | Out-File $File -Append 

if($folders.Count -ne 0){ 
    foreach($folder in $folders) { 
     $folderACL = (Get-Acl $folder.FullName).Access | Select-Object -ExpandProperty IdentityReference 
     $childFolders = Get-ChildItem $folder.FullName | Where-Object { $_.PSisContainer } 

     "$($folder.FullName) : $folderACL" | Out-File $File -Append 

     if($childFolders.Count -gt 0){ 
      foreach($childFolder in $childFolders) { 
       $childACL = (Get-Acl $childFolder.FullName).Access | Select-Object -ExpandProperty IdentityReference 
       if(Compare-Object $childACL $folderACL) { 
        Extract-Permissions $childFolder.FullName 
       } else { 
        "$($childFolder.FullName) : $childACL" | Out-File $File -Append 
       } 
      } 
     } 
    } 
} 
} 

DisplayForm 

このコードを使用して、すべてのその多くの経験を持っていませんこの:

C:\temp : BUILTIN\Administrators BUILTIN\Administrators NT AUTHORITY\SYSTEM NT AUTHORITY\SYSTEM BUILTIN\Users NT AUTHORITY\Authenticated Users NT AUTHORITY\Authenticated Users 
C:\temp\du : BUILTIN\Administrators BUILTIN\Administrators NT AUTHORITY\SYSTEM NT AUTHORITY\SYSTEM BUILTIN\Users NT AUTHORITY\Authenticated Users NT AUTHORITY\Authenticated Users 
C:\temp\Gower : BUILTIN\Administrators BUILTIN\Administrators NT AUTHORITY\SYSTEM NT AUTHORITY\SYSTEM BUILTIN\Users NT AUTHORITY\Authenticated Users NT AUTHORITY\Authenticated Users 
C:\temp\penout : BUILTIN\Administrators BUILTIN\Administrators NT AUTHORITY\SYSTEM NT AUTHORITY\SYSTEM BUILTIN\Users NT AUTHORITY\Authenticated Users NT AUTHORITY\Authenticated Users 
C:\temp\Projects : NT AUTHORITY\SYSTEM DOMAIN\Domain Users DOMAIN\TestAdmin 
C:\temp\Projects\A000 - Test0 : DOMAIN\Domain Users NT AUTHORITY\SYSTEM DOMAIN\TestAdmin 
C:\temp\Projects\A122 - Test12 : DOMAIN\Domain Users NT AUTHORITY\SYSTEM DOMAIN\TestAdmin 
C:\temp\Projects\A212 - TestA13 : DOMAIN\Domain Users NT AUTHORITY\SYSTEM DOMAIN\TestAdmin 
C:\temp\Projects\Template : DOMAIN\sam DOMAIN\Domain Users NT AUTHORITY\SYSTEM DOMAIN\TestAdmin 
+0

しかし、なぜSysInternalsのは、それを行うためのプログラムがある場合車輪の再発明:https://technet.microsoft.com/en-gb/sysinternals/accessenum – TessellatingHeckler

答えて

1

あなたは、読み取りを取得書き、彼らはFileSystemRightsとしてリストされているオブジェクト(Get-Acl $baseFolder).Accessから種類を実行することができます。次の関数は、FileSystemRightsのデータを抽出して、アクセス権名の横に追加します。 BUILTIN\Administrators-FullAccess

function Extract-Permissions($baseFolder) { 
    $baseACLAccess = (Get-Acl $baseFolder).Access 
    $folders = Get-ChildItem $baseFolder | Where-Object { $_.PSisContainer } 
    $baseACL = $baseACLAccess | Select-Object -ExpandProperty IdentityReference 

    # Sort out output 
    $BaseOutperms = "" 
    $baseACLAccess | Foreach {$BaseOutperms += " "+$_.IdentityReference+"-"+$_.FileSystemRights } 
    "$baseFolder : $BaseOutperms" | Out-File $File -Append 

    if($folders.Count -ne 0){ 
     foreach($folder in $folders) { 
      $ACLAccess = (Get-ACL $folder.FullName).Access 
      $folderACL = $ACLAccess | Select-Object -ExpandProperty IdentityReference 
      $childFolders = Get-ChildItem $folder.FullName | Where-Object { $_.PSisContainer } 

      # Sort out output 
      $outperms = "" 
      $ACLAccess | Foreach {$outperms += " "+$_.IdentityReference+"-"+$_.FileSystemRights } 
      "$($folder.FullName) : $outperms" | Out-File $File -Append 

      if($childFolders.Count -gt 0){ 
       foreach($childFolder in $childFolders) { 
        $childACLAccess = (Get-Acl $childFolder.FullName).Access 
        $childACL = $childACLAccess | Select-Object -ExpandProperty IdentityReference 
        if(Compare-Object $childACL $folderACL) { 
         Extract-Permissions $childFolder.FullName 
        } else { 
         # Sort out output 
         $ChildOutperms = "" 
         $childACLAccess | Foreach {$ChildOutperms += " "+$_.IdentityReference+"-"+$_.FileSystemRights } 
         "$($childFolder.FullName) : $ChildOutperms" | Out-File $File -Append 
        } 
       } 
      } 
     } 
    } 
} 
+0

パーフェクトはあなたに感謝を。よく働く! –

関連する問題