Скрипт Powershell для получения членства в AD Group для имен пользователей - PullRequest
0 голосов
/ 27 февраля 2020

Я хочу написать скрипт для получения членства в группе AD, который начинается с SSL_VPN для имен пользователей, перечисленных в CSV.

Я пробовал до сих пор:

Import-Csv C:\Users.csv |
  ForEach-Object -pv user { Get-AdUser -filter "displayname -eq '$($_.username)'"} |
    Get-ADprincipalGroupMembership |
      Select-Object @{ n = 'samaccountname'; e = { $user.samaccountname } }, name |
        Export-csv -path C:\UserPermiss.csv -NoTypeInformation

Ответы [ 2 ]

1 голос
/ 27 февраля 2020

Получение пользователей по их свойству DisplayName - не самая безопасная вещь. Было бы намного лучше, если бы у вашего CSV-файла были другие, более уникальные свойства, например SamAccountName, UserPrincipalName, DistinguishedName или EmailAddress ..

. l oop, вы должны проверить, может ли пользователь с таким именем быть найден, и только в этом случае получить членство в группе.

Import-Csv 'C:\Users.csv' | ForEach-Object { 
    $user = Get-ADUser -Filter "DisplayName -eq '$($_.username)'" -Properties DisplayName
    if ($user) {
        Get-ADprincipalGroupMembership -Identity $user.DistinguishedName |
        Where-Object { $_.name -like 'SSL_VPN*' } |
        Select-Object @{ Name = 'SamAccountName'; Expression = { $user.SamAccountName } },
                      @{ Name = 'Group'; Expression = { $_.name }}
    } 
    else {
        Write-Warning "User '$($_.username)' not found"

        # if you want this message to also appear in your output CSV, do something like this:
        [PsCustomObject]@{
            'SamAccountName' = "User '$($_.username)' not found"
            'Group' = ''
        }
    }
} | Export-Csv -Path 'C:\UserPermiss.csv' -NoTypeInformation

Если вы хотите увидеть предупреждение, когда пользователь не является членом группы SSL_VPN, вы можете сделать:

Import-Csv 'C:\Users.csv' | ForEach-Object { 
    $user = Get-ADUser -Filter "DisplayName -eq '$($_.username)'" -Properties DisplayName
    if ($user) {
        $group = Get-ADprincipalGroupMembership -Identity $user.DistinguishedName | 
                 Where-Object { $_.name -like 'SSL_VPN*' }
        if ($group) {
            [PsCustomObject]@{
                'SamAccountName' = $user.SamAccountName 
                'Group'          = $group.name
            }
        }
        else {
            Write-Warning "User '$($_.username)' is not a member of ssl_vpn group"
        }
    } 
    else {
        Write-Warning "User '$($_.username)' not found"
    }
} | Export-Csv -Path 'C:\UserPermiss.csv' -NoTypeInformation
0 голосов
/ 27 февраля 2020

Вы можете использовать что-то вроде этого (первая строка csv должна быть samaccountname):

$users=Import-Csv D:\adusers.CSV
foreach($user in $users){
$groupname=Get-ADPrincipalGroupMembership -Identity $user.samaccountname |where {$_.name -like "SSL_VPN*"}|select -ExpandProperty name
    if($groupname -ne $null){
        foreach($group in $groupname){
        [string]$data=($user|select -ExpandProperty samaccountname)+';'+$group
        $data|Out-File -FilePath d:\stack.csv -Encoding utf8 -Append
        } 
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...