0
votes

PowerShell filtrant la sortie du groupe d'utilisateurs de bureau à distance

Utilisation de PowerShell J'essaie d'obtenir une liste d'utilisateurs / groupe qui ont des autorisations d'utilisateur de bureau à distance pour pouvoir vous connecter à un serveur.

Je peux utiliser " net localgroup" em> à Obtenez une liste des groupes / utilisateurs avec les autorisations de l'utilisateur de bureau distant: p>

PS C: \ users \ pal.test> nom d'alias de réseau local de caractères réseau Les utilisateurs de bureau à distance commenter les membres de ce groupe sont accordés le droit de logon à distance p>

membres p>


pal \ kron.pal de
PAL \ PAL-VPN-Clients
La commande s'est terminée avec succès. P> blockquote>

Cependant, si j'exécute cette commande et sortie à une variable, je reçois tous les en-têtes inclus: P>

PS C: \ Users \ Pal.Test> $ RDpusers = NET GLACKGROUP "Bureau distant Utilisateurs " p>

ps c: \ users \ pal.test> écriture-hôte $ RDpusers p>

nom d'alias nom de bureau à distance commenter les membres de cette le groupe reçoit le droit de logon membre à distance ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ ------------------------------- PAL \ KRON.PAL PAL \ PAL-VPN-Client-Client
La commande s'est terminée avec succès. P> blockQuote>

pour d'autres commandes telles que " get-wmiobject em>" je voudrais utiliser " | sélection-objet -expandproperty membres em> Pour filtrer la propriété et sélectionner uniquement la propriété valeurs. Toutefois, si j'utilise cela, obtenez une sortie vierge ou une erreur lorsque j'essaie d'utiliser -expandProperty: P>

PS C: \ Users \ Pal.Test> Le groupe local net "Utilisateurs de bureau à distance" | SELECT-OBJECT-OBJET -XPANDPROPERTY MEMBRES P>

Select-Object: Propriété "Membres" est introuvable. p>

en ligne: 1 Char: 41 P>

  • NET LocalGroupe "Utilisateurs de bureau à distance" | Membres Select-Object -ExpandProperty P> Li>

  • + CategoryInfo          : InvalidArgument: (Alias name     Remote Desktop Users:PSObject) [Select-Object], PSArgumentException
    
    + FullyQualifiedErrorId ExpandPropertyNotFound,Microsoft.PowerShell.Commands.SelectObjectCommand
    


4 commentaires

Pourriez-vous modifier votre question et formater le code sous forme de code ? Merci.


Pour Windows Server 2016, vous pouvez utiliser GET-LocalGroup .


Merci OLAF Le "Get-LocalGroup" fonctionne sur Windows Server 2016, mais la cmdlet ne semble pas être disponible dans Windows Server 2008 et 2012. Je reçois un "n'est pas le nom d'une cmdlet reconnue". Je vous utilise la version Windows pour créer une instruction IF et utiliser le "Get-LocalGroup" pour Windows Server 2016.


Quelqu'un connaît toute autre option pour Windows Server 2008 et 2012? Merci.


3 Réponses :


0
votes

Je pense que cela fonctionnera en 2008, mais ne peut pas le tester. [ blush ] xxx

Je ne sais pas lorsque les paramètres -skip * ont été ajoutés. Si cela échoue sur vos systèmes cible, essayez d'utiliser l'indexation du tableau pour obtenir uniquement ceux que vous souhaitez.


0 commentaires

1
votes

Cela aussi n'est pas testé par moi sur le serveur 2008/2012/2016, mais cela peut aider:

function Get-LocalGroupMembers {
    [CmdletBinding()]
    Param(
        [Parameter(Mandatory = $true, Position = 0)]
        [String]$Identity,
        [String]$ComputerName = $env:COMPUTERNAME
    )

    Add-Type -AssemblyName System.DirectoryServices.AccountManagement 
    $context = New-Object DirectoryServices.AccountManagement.PrincipalContext('Machine', $ComputerName)

    try {
        if (!([string]::IsNullOrEmpty($Identity))) {
            # search a specific group
            [DirectoryServices.AccountManagement.GroupPrincipal]::FindByIdentity($context, $Identity)
        }
        else {
            # search all local groups
            $groupPrincipal    = New-Object DirectoryServices.AccountManagement.GroupPrincipal($context)
            $principalSearcher = New-Object DirectoryServices.AccountManagement.PrincipalSearcher($groupPrincipal)
        }
    }
    catch {
        throw "Error searching group(s) on '$ComputerName'. $($_.Exception.Message)"
    }
    finally {
        if ($groupPrincipal)    {$groupPrincipal.Dispose()}
        if ($principalSearcher) {$principalSearcher.FindAll()}
    }
}

(Get-LocalGroupMembers -Identity "Remote Desktop Users").Members | Select-Object -ExpandProperty Name


0 commentaires

0
votes

merci lee_dailey; Votre solution était très proche de ce dont j'avais besoin. J'ai trouvé cependant que PowerShell 2.0 sur Windows 2008 n'a pas l'option "SkipLast" dans le cadre de l'option "Select-Object".

J'ai utilisé votre code comme base de solution alternative pour éviter l'option "SkipLast". Non disponible dans PowerShell 2.0 sous Windows 2008. P>

PS C:\Users\pal.test> net localgroup "Remote Desktop Users" | where {$_ -AND $_ -notmatch "command completed successfully"} | select -skip 4
PAL\kron.pal
PAL\PAL-VPN-Client


0 commentaires