Question Recherche une partie de chiffres dans l'attribut DepartmentNumber

Plus d'informations
il y a 1 an 2 mois - il y a 1 an 2 mois #32952 par Julien
Bonjour,

Je souhaite faire une recherche d'utilisateurs actifs et non expirés dans l'AD avec comme filtre l'attribut "departmentNumber"

J'ai en entrée une variable $budget contenant une suite de chiffres, pour mon exemple 06570. Un certain nombre d'utilisateurs dans l'AD ont comme attribut departmentNumber la valeur de cette variable (06570). Jusqu'à là, pas de problème. Je parviens bien à obtenir la liste de tous les utilisateurs actifs et non expirés ayant comme attribut departmentNumber la valeur de ma variable $budget.

Mon problème commence lorsque dans l'AD, certain utilisateurs ont comme valeur de l'attribut departmentNumber, seulement une partie du chiffre en entrée (par exemple 6570). Je ne parviens pas à indiquer à mon filtre de rechercher aussi bien les utilisateurs avec exactement le contenu de $budget ou avec seulement une partie, comme ici, 6570. J'ai bien essayé avec l'opérateur -match ou -like, mais ça ne semble pas probant.

Voici ma commande actuelle qui fonctionne lorsque $budget et departmentNumber sont strictement exacte.

$ListMembersProvisoire = Get-ADUser -SearchBase $OU -Filter {enabled -eq $true} -Properties AccountExpirationDate, accountExpires, departmentNumber, department | Where-Object {($_.departmentNumber -match $Budget -or $_.department -match $Budget) -and (($_.accountExpires -eq 0 -or $_.accountExpires -eq 9223372036854775807) -or ($_.AccountExpirationDate -(Get-Date).Date).Days -ge 1)}

$ListMembers = $ListMembersProvisoire | Select Name,sAMAccountName,userPrincipalName,@{N='Departmentnumber';E={$_.Departmentnumber[0]}},department

J'ai essayé également ceci, sans succès pour trouver une partie du contenu de $budget

Get-ADUser -SearchBase $OU -Filter {enabled -eq $true -and (departmentNumber -like $Budget -or department -like $Budget)} -Properties AccountExpirationDate, accountExpires, departmentNumber, department | Where-Object {($_.accountExpires -eq 0 -or $_.accountExpires -eq 9223372036854775807) -or ($_.AccountExpirationDate -(Get-Date).Date).Days -ge 1 }

Merci pour votre aide


 
Dernière édition: il y a 1 an 2 mois par Julien.

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

Plus d'informations
il y a 1 an 2 mois #32953 par Laurent Dardenne
Salut,
utilise une expression régulière et pas un nombre :
$Users=@(
 [PsCustomObject]@{Name='Un';departmentNumber="";department="06570"}
 [PsCustomObject]@{Name='Deux';departmentNumber="";department="6570"}
 [PsCustomObject]@{Name='Trois';departmentNumber="06570";department=""}
 [PsCustomObject]@{Name='Quatre';departmentNumber="6570";department=""}
)
$Budget='\d{0,1}6570'
$users|? { $_.departmentNumber -match $Budget}
$users|? { $_.department -match $Budget}
$users|? { ($_.departmentNumber -match $Budget -or $_.department -match $Budget)}
Pour ton exemple avec la ligne utilisant Where-Object.

la regex : \d{0,1} = présence optionnelle d'un et un seul chiffre en début.
Si le premier chiffre recherché est uniquement le chiffre zéro alors : $Budget='0{0,1}6570'

Tutoriels PowerShell

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

Plus d'informations
il y a 1 an 2 mois #32954 par Julien
Bonjour Laurent

Encore une fois merci pour ton aide, cependant, j'ai dû mal exprimer ma problématique ou alors je ne comprends pas comment transposer dans mon exemple.

$budget est une variable que j'alimente via un fichier en import et qui peut être différentes valeurs. Le budget représente en réalité le code du service de l'employé.
Mon problème est que la valeur de l'attribut AD departmentNumber de certains collaborateurs n'est pas toujours strictement identique à ma variable $budget.
Il manque en effet parfois sur leurs comptes AD un 0(zéro).
Dans cette condition, comment vérifier que l'attribut departmentNumber a à minima la suite de chiffre de $budget.
Là j'ai l'impression qu'on teste $budget dans ton exemple, mais c'est plutôt le contenu de departmentNumber que je veux comparer et rendre valide comme parti de $budget.

Merci

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

Plus d'informations
il y a 1 an 2 mois - il y a 1 an 2 mois #32955 par Laurent Dardenne
>>$budget est une variable que j'alimente via un fichier en import
Soit tu associes à budget une regex :
'06570'='\d{0,1}6570'
soit tu construit la regex dynamiquement, je ne sais pas si pertinent car je ne connais pas la norme.

>>Là j'ai l'impression qu'on teste $budget dans ton exemple,
Oui.

>>mais c'est plutôt le contenu de departmentNumber que je veux comparer et rendre valide comme parti de $budget.
C'est ce que le code d'exemple fait mais il supposait que la valeur de $budget. était tjr la même. Les spécifications servent justement à préciser les choses/le contexte.

>>Il manque en effet parfois sur leurs comptes AD un 0(zéro).
Est-ce que le code est tjr sur 5 chiffres, complété par des zéros en début de chaine : 12345 ou 01234 ou 00123 ?
En d'autre termes si le code est sur 4,3,2, ou1 chiffre, faut-il le compléter par des zéros : 01234, 00123, 000012 ,00001?

Si c'est juste un manque dans le cas où le nombre a 4 chiffres, teste ce cas et ajoute un zéro. Le code PS dépendra du type de departmentNumber ( int ou string).

>> j'ai dû mal exprimer ma problématique
Non. Mais cela demande d'être précis ou au moins expliciter le contexte.

Tutoriels PowerShell
Dernière édition: il y a 1 an 2 mois par Laurent Dardenne.

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

Plus d'informations
il y a 1 an 2 mois #32956 par Julien
Oui en effet, le budget, dans le fichier d'entrée, est toujours sur 5 positions.
L'attribut departmentNumber, sur les comptes AD, peut être malheureusement sur moins de 5 positions mais la norme est bien 5.
C'est une suite de chiffres à compléter à gauche d'autant de 0 qu'il manque de position.
Mon problème est donc de faire en sorte que dans le where le departmentNumber puisse être comparé et perçu comme identique au $budget même si le departmentNumber n'est pas sur 5 positions, du moment que sa suite de chiffres est partiellement identiques au budget.

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

Plus d'informations
il y a 1 an 2 mois #32957 par Laurent Dardenne
Je ne sais pas si ceci peut aider :
1..5|% {'{0:d5}' -f [int]('1' * $_)}
Car ceci :
>>du moment que sa suite de chiffres est partiellement identiques au budget.
nécessite de préciser le 'partiellement'.

Est-ce ceci :
'06570','6570', '570'|% {'{0:d5}' -f [int]$_}
Je supposes qu'il existe d'autres code tels que '06570' -> '07520','10291'

Tutoriels PowerShell

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

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