web-dev-qa-db-fra.com

Vérifiez si l'utilisateur est membre d'une liste de groupes AD

$groups = 'group1', 'group2'....

Je dois vérifier si l'utilisateur est dans un groupe AD spécifique et faire écho au nom du groupe s'il ne l'est pas; puis-je le faire dans le pipeline?

J'ai beaucoup cherché sur Google et je ne trouve rien, peut-être que je suis trop mauvais pour la recherche Google en anglais :).

$groups |
    Get-QADGroupMember |
    Get-QADUser -SamAccountName 'lalala' | ForEach-Object {
        if ($_.SamAccountName -ne $null) {
            Write-Host "ok"
        } else {
            Write-Host 'not ok'
        }
    }

Comment afficher: not ok. user is not ingroup_name?

4
Igor Kuznetsov

La question est de savoir pourquoi souhaitez-vous utiliser le pipeline alors que le simple fait de parcourir les résultats est si facile?

Pour vérifier si un utilisateur est membre d'une liste de groupes:

$user = "TestUsername"
$groups = 'Domain Users', 'Domain Admins'

foreach ($group in $groups) {
    $members = Get-ADGroupMember -Identity $group -Recursive | Select -ExpandProperty SamAccountName

    If ($members -contains $user) {
        Write-Host "$user is a member of $group"
    } Else {
        Write-Host "$user is not a member of $group"
    }
}

Et pour plusieurs utilisateurs:

$users = "TestUsername1", "TestUsername2", "TestUsername3"
$groups = 'Domain Users', 'Domain Admins'

foreach ($user in $users) {
    foreach ($group in $groups) {
        $members = Get-ADGroupMember -Identity $group -Recursive | Select -ExpandProperty SamAccountName

        If ($members -contains $user) {
            Write-Host "$user is a member of $group"
        } Else {
            Write-Host "$user is not a member of $group"
        }
    }
}
4
James C.

Si la fonction Active Directory PowerShell n'est pas installée sur votre serveur, vous pouvez utiliser cette méthode. Ici, je vérifie si un groupe de domaine fait partie du groupe d'administrateurs local sur le serveur, mais vous pouvez simplement changer le GroupPrincipal en UserPrincipal et fournir le nom d'utilisateur si vous voulez vérifier si un l'utilisateur appartient à un groupe. De plus, si le groupe est un groupe de domaine, utilisez le $domainContext pour les deux appels FindByIdentity.

function Test-DomainGroupIsMemberOfLocalAdministrators([string] $domainName, [string] $domainGroupName)
{
    Add-Type -AssemblyName 'System.DirectoryServices.AccountManagement'
    $domainContext = [System.DirectoryServices.AccountManagement.PrincipalContext]::new([System.DirectoryServices.AccountManagement.ContextType]::Domain, $domainName)
    $localMachineContext = [System.DirectoryServices.AccountManagement.PrincipalContext]::new([System.DirectoryServices.AccountManagement.ContextType]::Machine)
    $domainGroup = [System.DirectoryServices.AccountManagement.GroupPrincipal]::FindByIdentity($domainContext, $domainGroupName)
    $localAdministratorsGroup = [System.DirectoryServices.AccountManagement.GroupPrincipal]::FindByIdentity($localMachineContext, "Administrators")

    if($domainGroup -ne $null)
    {
        if ($domainGroup.IsMemberOf($localAdministratorsGroup))
        {
            return $true
        }
    }
    return $false
}
0
deadlydog