2017-01-06 1 views
2

드라이브를 점검하고 Everyone이 NTFS 권한으로 설정되어 있는지 확인하려면 스크립트를 실행하고 싶습니다. 거의 잘 작동NTFS로만 최상위 폴더 찾기 모두들

Get-ChildItem D:\ -Recurse | Where-Object { 
    (Get-Acl $_.FullName).Access | Where-Object { 
     $_.IdentityReference -eq 'Everyone' 
    } 
} | Where-Object { 
    $_.Mode -match "d" 
} | Format-Table FullName 

을하지만 난 많은 얻고있다 : 현재 내가 실행하고 "지정된 경로, 파일 이름, 또는 둘 다 너무 긴 완전한 파일 이름은 260 자 미만이어야합니다.".

상위 드라이브 상속 수준에서 모든 D 드라이브를 검사하지만 스크립트를 중지 할 수 있습니까? \ 테스트 \의 TEST2 및 TEST2 테스트에서 모두가 난 단지 결과로

d:\test

하지

d:\test 
d:\test\test2

을 볼 상속 : 나는 거라고 경우 예를

에 대한

.

답변

2

상속되지 않은 ACE 만 확인하십시오. 또한 $_.Mode 대신 $_.PSIsContainer을 확인하고 ACL을 확인하기 전에이 작업을 수행하는 것이 좋습니다. PowerShell v3 이상에서는 결과를 디렉터리로만 제한하기 위해 Get-ChildItem 스위치 -Directory을 사용하십시오.

Get-ChildItem D:\ -Recurse | Where-Object { 
    $_.PSIsContainer -and 
    (Get-Acl $_.FullName).Access | Where-Object { 
     $_.IdentityReference -eq 'Everyone' -and 
     -not $_.IsInherited 
    } 
} | Select-Object -Expand FullName 

이것은 260 자보다 긴 경로를 처리하지 않습니다. 이는 Win32 API의 제한 사항이며 더 긴 경로를 처리하기 위해서는 다른 도구가 필요합니다.

+0

감사합니다. 나는 260의 chars 길을 위해 희망하고있다! ;] – user5711825