Разрешения для Powershell to Audit Folder, показывающие членство в группе - PullRequest
0 голосов
/ 07 апреля 2020

Справочная информация: Я использую Netwrix для аудита разрешений сетевых ресурсов уже несколько лет, и это когда-то работало ровно 1 раз ..... Поэтому я решил перейти к простому сценарию PowerShell. Я столкнулся с блоком. Когда я пытаюсь разобрать членов группы, ему не нравится имя сети перед именем группы (TBANK). Затем мне также нужно сделать следующий шаг - просто показать имя, а не весь вывод get-adgroupmember. Любая помощь будет принята с благодарностью, так как я очень люблю писать скрипты с PowerShell. Текущий скрипт ниже:

$OutFile = "C:\users\user1\Desktop\test.csv" # Insert folder path where you want to save your file and its name
$Header = "Folder Path,IdentityReference, Members,AccessControlType,IsInherited,InheritanceFlags,PropagationFlags"
$FileExist = Test-Path $OutFile 
If ($FileExist -eq $True) {Del $OutFile} 
Add-Content -Value $Header -Path $OutFile 
$Folder = "\\server1.tbank.com\share1"
    $ACLs = get-acl $Folder | ForEach-Object { $_.Access  }
    Foreach ($ACL in $ACLs){
        $ID = $ACL.IdentityReference
        $ID = $ID -replace 'TBANK\' , ''
        $ACType = $ACL.AccessControlType
        $ACInher = $ACL.IsInherited
        $ACInherFlags = $ACL.InheritanceFlags
        $ACProp = $ACL.PropagationFlags
        $Members = get-adgroupmember $ID.
        $OutInfo = $Folder + "," + $ID  + "," + $Members  + "," + $ACType + "," + $ACInher + "," + $ACInherFlags + "," + $ACProp
        Add-Content -Value $OutInfo -Path $OutFile
     }

1 Ответ

0 голосов
/ 08 апреля 2020

Прежде всего, есть способ лучше вывести файл 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. При этом он также получит членов из групп внутри групп

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...