#powershell
#powershell
Вопрос:
У меня есть скрипт, который проверяет разрешения ACL в папках и записывает их в файл CSV. Я хочу, чтобы результат при наследовании выглядел следующим образом:
Allow Full Control, this folder, subfolders and files (Inherited)
На данный момент он выводит только это:
Allow FullControl, (Inherited)
Может кто-нибудь посоветовать мне, пожалуйста, я просто хочу, чтобы отображался отсутствующий текст:
$RootPath = "C:"
$Folders = dir $RootPath -recurse | where {$_.psiscontainer -eq $true}
$isInherited = @{
$true = 'Inherited'
$false = 'Not Inherited'
}
$inheritance = @{
0 = 'files only'
1 = 'this folder and subfolders'
2 = 'this folder and files'
3 = 'subfolders and files'
}
$fldr = $Folder.FullName
$Folders | % {
$fldr = $_.FullName
Get-Acl $fldr | select -Expand Access |
select @{n='Account';e={$_.IdentityReference}},
@{n='Ace String';e={"{0} {1}, {2} ({3})" -f $_.AccessControlType,
$_.FileSystemRights, $inheritance[$_.InheritanceFlags],
$isInherited[$_.IsInherited]}},
@{n='Object Path';e={$fldr}} |
ConvertTo-Csv -NoTypeInformation |
Select -Skip 1 | % {$_ -replace '"', ""} |
Out-File $OutFile -Force -Encoding ascii -Append
}
Ответ №1:
При проверке System.Security.AccessControl.InheritanceFlags
объекта:
TypeName: System.Security.AccessControl.InheritanceFlags
Name MemberType Definition
---- ---------- ----------
CompareTo Method int CompareTo(System.Object target)
Equals Method bool Equals(System.Object obj)
GetHashCode Method int GetHashCode()
GetType Method type GetType()
GetTypeCode Method System.TypeCode GetTypeCode()
ToString Method string ToString(), string ToString(string format, System.IFormatProvider provider), string To...
value__ Property System.Int32 value__ {get;set;}
похоже, у объекта есть value__
свойство. Итак, измените строку
$_.FileSystemRights, $inheritance[$_.InheritanceFlags],
Для
$_.FileSystemRights, $inheritance[$_.InheritanceFlags.value__],
Это правильно передаст параметр типа [int]
в $inheritance
hash.
Комментарии:
1. Спасибо, это вызывает у меня головные боли со вчерашнего дня.