Исключить результаты из скрипта Powershell - PullRequest
0 голосов
/ 04 декабря 2018

Я нахожусь в процессе создания сценария powershell, который извлекает разрешения, связанные с каталогом, и выводит результаты в CSV.Этот сценарий в настоящее время работает, как и предполагалось, но теперь я хочу, чтобы он исключил учетную запись NT AUTHORITY \ SYSTEM и BUILTIN \ Administrators из списка.Подскажите, пожалуйста, как мне этого добиться?

$FolderPath = dir -Directory -Path "C:\GMT\Common\" -Recurse -Force
$Report = @()
Foreach ($Folder in $FolderPath) {
$Acl = Get-Acl -Path $Folder.FullName
foreach ($Access in $acl.Access)
    {
        $Properties = [ordered]@{'FolderName'=$Folder.FullName;'AD Group or User'=$Access.IdentityReference;'Permissions'=$Access.FileSystemRights}
        $Report += New-Object -TypeName PSObject -Property $Properties
    }
}
$Report | Export-Csv -path "C:\Temp\server_permissions.csv"

Ответы [ 2 ]

0 голосов
/ 04 декабря 2018

Если вы немного перефакторите свой код для использования конвейера, тогда вы можете фильтровать с помощью Where-Object:

Get-ChildItem -Directory -Path "C:\GMT\Common\" -Recurse -Force |
    ForEach-Object {
        $folder = $_
        (Get-Acl -Path $folder.FullName).Access |
            Where-Object IdentityReference -notin "NT AUTHORITY\SYSTEM","BUILTIN\Administrators" |
                ForEach-Object {
                    [PsCustomobject]@{
                        'FolderName'   = $folder.FullName
                        'ADGroupOrUser'= $_.IdentityReference
                        'Permissions'  = $_.FileSystemRights
                    }
                }                
     } | Export-Csv -path "C:\Temp\server_permissions.csv" -NoTypeInformation

Даже если вы не хотите использовать этот метод, ярекомендую избегать использования пробелов в именах свойств, таких как 'AD Group or User' = $Access.IdentityReference.Хотя это работает, это только потом даст вам ненужные головные боли.

0 голосов
/ 04 декабря 2018

Вы можете просто использовать выражение if, например:

$FolderPath = dir -Directory -Path "C:\GMT\Common\" -Recurse -Force
$Report = @()
Foreach ($Folder in $FolderPath) {
    $Acl = Get-Acl -Path $Folder.FullName
    foreach ($Access in $acl.Access) {
        if (!($Access.IdentityReference -eq "BUILTIN\Administrators") -and !($Access.IdentityReference -eq "NT AUTHORITY\SYSTEM")) {
            $Properties = [ordered]@{
                'FolderName'       = $Folder.FullName
                'AD Group or User' = $Access.IdentityReference
                'Permissions'      = $Access.FileSystemRights
            }
            $Report += New-Object -TypeName PSObject -Property $Properties
        }
    }
}
$Report | Export-Csv -path "C:\Temp\server_permissions.csv"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...