Question Liste des membres avec attribut DepartmentNumber et appartenance Groupes spcécif

Plus d'informations
il y a 1 an 4 mois #32795 par Julien
Bonjour,

Je débute en powershell, je fais donc appel à la communauté des connaisseurs pour de l'aide sur un petit bout de code.

Je souhaiterais, à partir d'une extraction AD, récupérer tous les collaborateurs membres de groupes dont les noms débutent forcément par "Grp_vpn*" et dont chaque collaborateur a comme attribut "DepartmentNumber", un numéro prédéfini.

Je parviens pour le moment à récupérer la liste des collaborateurs dont l'attribut "DepartmentNumber" est le numéro prédéfini, et ce, dans deux OU souhaitées. En revanche, je ne sais pas comment m'y prendre, à partir de cette liste, pour filtrer uniquement ceux membres d'un groupe débutant par "Grp_vpn*".

Ci-dessous les lignes correspondantes :

$Members = Get-ADUser -SearchBase $OU -Filter {departmentNumber -eq $Budget -or department -eq $Budget -or department -like $Ville } -Property departmentNumber | Select Name,sAMAccountName,userPrincipalName,departmentNumber,department

$GroupVPN= $Members | ForEach-Object {Get-ADPrincipalGroupMembership -Identity $_.SamAccountName} |  Select-Object -Property @{Name = 'Groupes' ; Expression = {$_.sAMAccountName}}

Cette dernière ligne me ressort les groupes d'affectations en une liste.

Je souhaiterais idéalement pouvoir récupérer dans une unique variable, la liste de ces utilisateurs filtrés donc sur leurs departmentNumber + leurs appartenances aux groupes tels que Grp_vpn*

Merci pour votre aide

Julien


 

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 1 an 4 mois #32798 par Laurent Dardenne
Salut,
pour filtrer tu peux utiliser une expression régulière :
$groupeDebutantPar='^Grp_vpn.*'
'grp_vpn','Pasgrp_vpn','grp_vpn xyz','autreNom'|% { $_ -match $groupeDebutantPar}

foreach ($grpName in @('grp_vpn','Pasgrp_vpn','grp_vpn xyz','autreNom')) 
{
  if ($grpName -match $groupeDebutantPar) 
  { Write-warning "grp_vpn: '$grpName'"} 
}
Il existe également l'opérateur -like.

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 1 an 4 mois #32799 par Julien Groizard
Hello,

Je pensais aussi, pour rebondir sur ton idée, à remplacer le if dans le for each par un where pour pouvoir enregistrer toutes les infos direct dans une variable.

foreach ($grpName in @('grp_vpn','Pasgrp_vpn','grp_vpn xyz','autreNom'))
{
if ($grpName -match $groupeDebutantPar)
{ Write-warning "grp_vpn: '$grpName'"}
}
Par
@('grp_vpn','Pasgrp_vpn','grp_vpn xyz','autreNom') | ? {$_ -match $groupeDebutantPar}
Ou
$grpNames = @('grp_vpn','Pasgrp_vpn','grp_vpn xyz','autreNom') | ? {$_ -match $groupeDebutantPar}

Bonne journée/soirée ^^

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 1 an 4 mois #32801 par Laurent Dardenne
Oui c'est une autre construction.

L'instruction Foreach peut être associé à une affectation :
$Resultat=Foreach ($x in $List) {... }
Et la collection associé au IN provenir d'un pipeline
$Resultat=Foreach ($x in (Get-AdUser | XYZ)) {... }
Je trouve l'instruction Foreach plus lisible et plus facile à modifier.
Enfin tu peux aussi utiliser Filter (similaire à une fonction+bloc process) pour l'insérer dans un pipeline

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 1 an 4 mois #32825 par Julien
Bonjour,

Avec beaucoup de retard, désolé, ton commentaire m'a bien aidé.
Problème résolu.

Merci encore

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.073 secondes
Propulsé par Kunena