Наследование PowerShell False - PullRequest
0 голосов
/ 25 февраля 2020

Попытка показать только папки, которые IsInherited имеет значение False

Мой код

$folder = "C:\TZTEST"
$aclentry = get-childitem $folder -recurse -force | get-acl | % {$_.Access}
$manypaths = get-childitem $folder -recurse -force
$aclentry | Format-Table

$newlist = @()

foreach($onepath in $manypaths) {
$acldata=$(get-childitem $folder -recurse -force | get-acl | % {$_.Access})
$itemobject = New-Object –TypeName PSObject
    if ($onepath.Mode -match "d-----" -and $acldata.IsInherited -eq $false -and $acldata.PropagationFlags -eq "InheritOnly") {
        $itemobject | Add-Member –MemberType NoteProperty –Name "Location" -Value $onepath.FullName
        $itemobject | Add-Member –MemberType NoteProperty –Name "IsInherited" -Value $acldata.IsInherited
        $newlist +=$itemobject
        }
}
$newlist

Работает частично Когда все папки наследуют разрешения в соответствии с целевая папка не выводит (правильно) Если одна или несколько папок не наследуют разрешения, на выходе отображаются все папки в целевой папке (неверно)

Настройка папки Целевая папка | -Subfolder1 - Подпапка3 | -Подпапка2

Наследование включено в 2 из 3 подпапок (Подпапка1, Подпапка2 включено ) (Подпапка3 отключено ) (неверный вывод) Разрешение папки - Подпапка3 Нет наследования

Наследование включено для всех подпапок (правильный вывод) Разрешение папки - Все наследование (без вывода)

Мой вопрос Есть ли какой-нибудь способ сделать так, чтобы в моем выводе отображалась только папка, для которой не включено наследование?

Заранее благодарим за любую помощь или понимание, которое вы можете предоставить.

1 Ответ

1 голос
/ 25 февраля 2020

Я думаю, что вы просто хотите вывод из папок, в которых 'IsInherited' для всех записей контроля доступа имеет значение false. Имея это в виду, нам просто нужно оценить их на предмет наличия $ true.

Я установил путь к папке, аналогичный вашему примеру, и отключил наследование в нижнем каталоге.

C:\Test\Test\NoInherit

Get-ChildItem C:\Test -Recurse | 
? { $_.Attributes -eq [System.IO.FileAttributes]::Directory } | 
? { ((Get-Acl -Path $_.FullName).GetAccessRules($true,$true,[System.Security.Principal.NTAccount]).IsInherited -notcontains $true) -eq $true }
...