Здравствуйте!
Программа создаёт GUI файловых каталогов в виде дерева. После открытия конечного каталога хочу поместить внутрь все группы безопасности, что могут зайти в каталог. Хочу сделать это с помощью такого кода:
Ошибка из-за разных форматов.
Не удается преобразовать аргумент "node", со значением: "System.Object[]", для "Add" в тип "System.Windows.Forms.TreeNode": "Не удается преобразовать значение "System.Object[]" типа "System.Object[]" в тип "System.Windows.F
orms.TreeNode"."
Подскажите пожалуйста, как преобразовать объект, который получается в результате Get-Acl в строку или подходящий для node формат?
Вы не указали, одной нодой хотите видеть эти записи или несколькими
Если просто запихнуть всё в одну, достаточно из массива сделать строку с помощью -join
p.s. Powershell, конечно, удобно сделал так чтобы из массива можно было одно свойство выбрать через $fold.Access.IdentityReference, но понимания людям убавил.
вы должны понимать, что на самом деле $fold.Access - это массив, $fold.Access.IdentityReference - это тоже массив, но уже из значений поля IdentityReference первого массива. Тогда будет сразу понятно, что, чтобы из массива сделать одну строку, его надо объединить. Или, наоборот, перебрать массив по элементу
Get-Acl возвращает вам, по сути, набор строк. Перебираете этот набор с помощью Foreach и добавляете каждую строку как node нужного уровня в TreeView:
PS C:\windows\system32> (Get-Acl c:\!New).Access.IdentityReference.Value
BUILTIN\Администраторы
NT AUTHORITY\СИСТЕМА
BUILTIN\Пользователи
NT AUTHORITY\Прошедшие проверку
NT AUTHORITY\Прошедшие проверку