Прежде всего, есть способ лучше вывести файл CSV, чем пытаться писать каждую строку самостоятельно (с риском пропустить требуемые кавычки), называемый Export-Csv
.
Для использования этот командлет, вам нужно будет создать массив объектов , что не сложно сделать.
$OutFile = "C:\users\user1\Desktop\test.csv" # Insert folder path where you want to save your file and its name
$Folder = "\\server1.tbank.com\share1"
# get the Acl.Access for the folder, loop through and collect PSObjects in variable $result
$result = (Get-Acl -Path $Folder).Access | ForEach-Object {
# -replace uses regex, so you need to anchor to the beginning of
# the string with '^' and escape the backslash by doubling it
$id = $_.IdentityReference -replace '^TBANK\\' # remove the starting string "TBANK\"
# Get-ADGroupMember can return users, groups, and computers. If you only want users, do this:
# $members = (Get-ADGroupMember -Identity $id | Where-Object { $_.objectClass -eq 'user'}).name -join ', '
$members = (Get-ADGroupMember -Identity $id).name -join ', '
# output an onbject with all properties you need
[PsCustomObject]@{
'Folder Path' = $Folder
'IdentityReference' = $id
'Members' = $members
'AccessControlType' = $_.AccessControlType
'IsInherited' = $_.IsInherited
'InheritanceFlags' = $_.InheritanceFlags -join ', '
'PropagationFlags' = $_.PropagationFlags -join ', '
}
}
# output on screen
$result | Format-List
# output to CSV file
$result | Export-Csv -Path $OutFile -Force -UseCulture -NoTypeInformation
Я добавил много встроенных комментариев, чтобы, надеюсь, прояснить для вас все .
Переключатель -UseCulture
в строке Export-Csv гарантирует, что используемый разделитель полей совпадает с установленным в вашей системе в качестве разделителя списка. Это помогает при открытии файла csv в Excel.
PS> командлет Get-ADGroupMember
также имеет переключатель с именем -Recursive
. При этом он также получит членов из групп внутри групп