2017-03-24 4 views
0

드라이브의 각 폴더 및 그룹의 각 구성원의 사용자 이름 뒤에 그룹 권한을 가져 오려고 시도한 다음 CSV 파일로 내 보냅니다.폴더 사용 권한의 그룹 가져 오기 및 그룹 구성원 내보내기 csv

문제는 그룹이 그룹 앞에 디렉토리 이름을 가지고 있다는 것입니다. gescogroup/GR_blablabla이므로 (Remove(0,12))을 사용하여 Gescogroup\을 삭제합니다.

내가 알기로는 먼저 사용자가 분석하려는 드라이브의 폴더를 선택하게하고 코드는 드라이브 내부의 폴더를 통해 실행하고 각 폴더에 대해 그룹을 가져온 다음 그룹 이름과 함께 제거 중 "만들기 소유자를,"관리자 ","

내 코드가 작동하지 않습니다. 나는 회원을 얻어야한다)에 등 "내장,하지만 오류를 얻을 수 없다. 너희들이 나를 도와 드릴까요?

cls 
    $result = [System.Windows.MessageBox]::Show("Select the path of the drive.`n"+"Once the Drive is selected, a excel file will be made with all the informations`n"+"of the selected Harddrive's directory premissions") 
    if ($result = "OK") 
    { 
    Add-Type -AssemblyName System.Windows.Forms 
    $FolderBrowser = New-Object System.Windows.Forms.FolderBrowserDialog 
    [void]$FolderBrowser.ShowDialog() 
    $Selection = $FolderBrowser.SelectedPath 
    } 
    $result2 = [System.Windows.MessageBox]::Show("Pleas select where to save your file") 
    if ($result2 = "OK") 
    { 
    Add-Type -AssemblyName System.Windows.Forms 
    $FolderBrowser2 = New-Object System.Windows.Forms.FolderBrowserDialog 
    [void]$FolderBrowser2.ShowDialog() 
    $FolderBrowser2.Description = "Select where to save your file" 
    $Selection2 = $FolderBrowser2.SelectedPath 
    } 
    $title = "ADPermissions.csv" 
    $title2 = "ADPermissions2.csv" 
    $ss =$Selection1 -replace '[\W]', '' 
    $subtitle = "HardDrive"+ $ss 



    $OutFile = ($Selection2+"\"+$subtitle+$title) 
    Write-Host = $OutFile 



     Remove-Item $OutFile 
     $Header = "Folder Path,IdentityReference,names" 


      $RootPath = $Selection 

      $Folders = dir $RootPath | where {$_.psiscontainer -eq $true} 
     try { 
     foreach ($Folder in $Folders){$ACLs = get-acl $Folder.fullname | ForEach-Object { $_.Access } 
        Foreach ($ACL in $ACLs){ 
        if($ACL.IdentityReference -notlike "Administrators" -and $ACL.IdentityReference -notlike "Creator Owner"-and $ACL.IdentityReference -notlike "BUILTIN\Administrators" -and $ACL.IdentityReference -notlike "NT AUTHORITY\SYSTEM" -and $ACL.IdentityReference -notlike "System") 
         { 
         $strAcl = $ACL.IdentityReference 


           $strAcls = $ACL.IdentityReference.ToString() 
           [email protected]() 
          $strNames=$strAcls.Remove(0,12) 
          $A = Get-ADGroupMember -identity $strNames -Recursive | Get-ADUser -Property DisplayName | Select Name | Sort-Object Name 


            foreach($strNames in $A) 
            { 
             $strUsers+=$A 

            } 

          } 

          } 
          } 


           $OutInfo = $Folder.fullname + "," + $trAcl+$strUsers 
           Add-Content -Value $OutInfo -Path $OutFile | sort-Object -Unique 

          }catch [System.IO.IOException] { 

     } 

답변

0

해결책입니다.

try { 

     foreach ($Folder in $Folders){$ACLs = get-acl $Folder.fullname | ForEach-Object { $_.Access } 
       Foreach ($ACL in $ACLs){ 
       if($ACL.IdentityReference -notlike "Administrators" -and $ACL.IdentityReference -notlike "Creator Owner"-and $ACL.IdentityReference -notlike "BUILTIN\Administrators" -and $ACL.IdentityReference -notlike "NT AUTHORITY\SYSTEM" -and $ACL.IdentityReference -notlike "System") 
        { 
          $strAcls = $ACL.IdentityReference.ToString() 
          [email protected]() 
         $strNames=$strAcls.Remove(0,12) 
         $A = Get-ADGroupMember -identity $strNames -Recursive | Get-ADUser -Property DisplayName | Select Name | Sort-Object Name 

         foreach ($env:USERNAME in $A){ 
          $strUsers +=$env:USERNAME 
         } 
          $OutInfo = $Folder.fullname + "," + $ACL.IdentityReference + $strUsers 
         } 
         } 

         } 
         }catch [System.IO.IOException] { 

    } 

} 
+0

코드를 설명하는 것이 좋습니다. 간단하면 몇 문장만으로 충분합니다. –