Получение эффективных пользовательских разрешений для многих каталогов - PullRequest
1 голос
/ 05 марта 2019

Обычно $Plist - это массив, но, например, мы берем только один каталог.

Моя проблема в том, что я не могу использовать $ids var. Почему-то я не могу прочитать данные и не могу обойти их до:

Get-ADGroup -Identity $id -Properties member | Select-Object -ExpandProperty member

Мне нужны имена пользователей в каталоге с именами их групп.

Как: Path GroupName UserList

Может кто-нибудь помочь? Может быть, настроить мой код или сделать что-то подобное:)

$plist = "\\Server\Share"
$FList   = foreach($dir in $Plist)
{
    Resolve-Path -Path $dir
    Get-Acl -Path $dir -Filter Access | Select-Object -ExpandProperty Access | Where-Object {$_.IdentityReference -like "Domain\*"} | Select-Object IdentityReference
    Get-Item $dir | select FullName
}

$Flist | ft FullName, IdentityReference

$identity = $Flist.IdentityReference | out-string
$ids = foreach($ident in $identity)
{
    $ident = $ident.Replace("Domain\","")
    $ident    
}

foreach($id in $ids)
{
    $id
    Get-ADGroup -Identity $id -Properties member | Select-Object -ExpandProperty member
}

Ответы [ 2 ]

1 голос
/ 05 марта 2019

Делать , а не использовать ft (Format-Table) или Out-String для значений, которые вы можете указать позже в вашем скрипте.

$ids = foreach($ident in $Flist.IdentityReference){
    "$ident".Replace('Domain\','')
}

Вы также можете удалить префикс домена из всех имен пользователей за один раз с помощью оператора -replace:

foreach($id in $flist.IdentityReference.Value -replace 'Domain\\')
{
    Get-ADGroup $id -Properties member | Select-Object -ExpandProperty member
}
0 голосов
/ 06 марта 2019

Последний сценарий для тех, кому может понадобиться нечто подобное.Таким образом, вы можете прочитать действующие разрешения и показать члену группы разрешенных групп.

$ErrorActionPreference = "SilentlyContinue"
$Path   = "\\Server\Share\Logs\"
$Log    = $Path + "Effective_Permissions" + ".log"
$PPath = Read-Host "Enter Path to scan"
$plist = Get-Childitem -Path $PPath -Recurse | ?{ $_.PSIsContainer } | Select-Object FullName


foreach($Dir in $PList)
    {
        $Dir = $Dir -replace "@{FullName=", "" -replace "}"
        Resolve-Path -Path $Dir
        Write-Output "`n" | Out-File $log -append
        Write-Output "#######################################################################" | Out-File $Log -append
        Get-Item $Dir | select FullName | Out-File $Log -append
        $AclList = Get-Acl -Path $Dir -Filter Access | Select-Object -ExpandProperty Access | Where-Object {$_.IdentityReference -like "Domain\*"} | Select-Object IdentityReference
        Get-Acl -Path $dir -Filter Access | Select-Object -ExpandProperty Access | Where-Object {$_.IdentityReference -like "Domain\*"} | Out-File $Log -append
            foreach($Id in $AclList.IdentityReference.Value -replace 'Domain\\')
                {
                    $ADGroup = Get-ADGroup $Id -Properties member | Select-Object -ExpandProperty member
                    Write-Output "`n" | Out-File $Log -append
                    Write-Output "Member of $Id `n
---------------------------------" | Out-File $Log -append
                    foreach ($Object in $ADGroup)
                        {
                            $Group      = Get-ADUser -filter * -SearchBase "$Object"
                            if($Group -ne $null)
                                {
                                    $GrName     = $Group.Name
                                    Write-Output "$GrName" | Out-File $Log -append
                                }
                        } 
                }
Clear-Variable Object, Group, ADGroup, ACLList, GRName, Id
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...