2017-01-06 2 views
2

ドライブをチェックし、EveryoneがNTFSアクセス許可として設定されているかどうかを確認するスクリプトを実行します。現在、私は実行しています:ほとんど正常に動作しますが、私はたくさんの取得しています「指定したパスを、ファイル名、またはその両方が長すぎる完全修飾ファイル名は260文字未満でなければならない」NTFS Everyoneでトップフォルダのみを検索

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

を。

すべてのDドライブを確認するために繰り返し実行することはできますが、上の継承レベルでスクリプトを停止できますか?例

ため

私はD持っている場合:私は、結果として

d:\test

ない

d:\test 
d:\test\test2

が表示されるはずのテストからEveryoneを継承\テスト\のTEST2と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文字のパスを望んでいない! ;] – user5711825

関連する問題