2014-09-11 4 views
1

전체 파일 시스템에 걸쳐 foders, subfolders 및 files의 정보를 표시하려고합니다. 그것은 잘 각 파일에 대한 배수 결과를 얻는 것보다 잘 작동하는 것 같습니다. 이 스크립트를 실행하면 결과 csv는 각 파일에 대해 동일한 데이터를 포함하는 세 개의 행을 표시합니다. (내 파일을 내가 원하는 것보다 훨씬 크게 만듭니다.)powershell 스크립트에서 중복 출력이 발생했습니다.

$OutFile = "C:\Owners.csv" 
$Header = "Folder Path,FileName,LastAccessTime,Owner" 
Del $OutFile 
Add-Content -Value $Header -Path $OutFile 
$RootPath = "S:\0411" 
$Folders = dir $RootPath -recurse 
    foreach ($Folder in $Folders){ 
     $ACLs = get-acl $Folder.fullname | ForEach-Object { $_.Access } 
     Foreach ($ACL in $ACLs){ 
     $OutInfo = $Folder.Fullname + "," + $Folder.name + "," + $Folder.LastAccessTime  + "," + ((Get-ACL $Folder.FullName).Owner) 
    $arr += $obj 
     Add-Content -Value $OutInfo -Path $OutFile 
     }} 

답변

0

더 좋은 해결책을 찾으려면 건너 뜁니다. 이 첫 번째 비트는 질문에 대한 대답을 설명하지만 더 좋은 방법이 있습니다.

각 파일/폴더에 대해 ACL을 얻은 다음 액세스 목록을 통해 반복하고있는 각 ACL에 대해 속임수가 적용됩니다. 그래서 ...의 말을하자

폴더 : C : \ 온도
소유자 : BUILTIN \ 관리자
액세스 목록 :

  • BUILTIN \ 관리자
  • NT AUTHORITY \ SYSTEM
  • NT AUTHORITY \ 인증 된 사용자

따라서 해당 폴더에 대해 3 개의 엔터티가있는 액세스 목록을 반복합니다. ies. 각 항목에 대해 CSV 파일에 행을 출력합니다.

더 나은 솔루션 :

좋아, 당신은 수동으로 CSV 파일을 구축하고, 그건 그냥 미친 짓이야. 이 작업을보다 쉽게 ​​수행해보십시오.

1

각 파일/폴더에 여러 개의 ACL이 연결되어있어 여러 개의 결과가 표시됩니다.

각 파일/폴더를 가져 와서 반복하고 ACL을 각각 가져옵니다.

무슨 뜻인지 보려면 다음에 $ OutInfo에 대한 줄을 수정

$OutInfo = $Folder.Fullname + "," + $Folder.name + "," + $Folder.LastAccessTime  + "," + ((Get-ACL $Folder.FullName).Owner) + "," + $ACL.IdentityReference + "," + $ACL.FileSystemRights 

편집 : 오타은 Get-ChildItem을이 모든 폴더와 파일을 그냥 얻을 것이다

0
$OutFile = "C:\Owners.csv" 
$RootPath = "S:\0411" 
Get-ChildItem $RootPath -Recurse | Select-Object FullName,Name,LastAccessTime, 
    @{n='Owner';e={(get-acl $_.FullName).owner}} | Export-CSV $OutFile 

주 폴더. 변수 $ 폴더의 이름을 지정했기 때문에 컨테이너 만 필요하다고 생각합니까? 스크립트에서 별칭을 사용하지 마십시오 1) : 권고

$OutFile = "C:\Owners.csv" 
$RootPath = "S:\0411" 
Get-ChildItem $RootPath -ad -Recurse | Select-Object FullName,Name,LastAccessTime, 
     @{n='Owner';e={(get-acl $_.FullName).owner}} | Export-CSV $OutFile 

몇 : 그렇다면, -ad 스위치를 사용하십시오. 콘솔에서 사용하기에 좋다. 누구도 읽을 필요가 없다. 예 : Get-ChildItem의 경우 'dir', Remove-Item의 경우 'del'. 2) CSV 출력을 찾으려면 Select-Object 및 Export-CSV 사용 방법을 익히십시오. 3) Export-CSV는 기존 파일을 덮어 쓰므로 먼저 삭제할 필요가 없습니다.

관련 문제