Question AD creation de code numerique unique

Plus d'informations
il y a 4 ans 4 mois #29467 par gaudefroy
Bonjour,

Je souhaiterai à la création de mon utilisateur AD, créer un code numérique à 6 chiffres compris entre 100000 et 999999 unique. Je m'explique mes utilisateurs déjà présent dans l'AD ont déjà un code unique et j'aimerai à la création de mon utilisateur créer un chiffre et vérifier si ce chiffre existe déjà pour quelqu'un dans l'ad. si le chiffre généré n'existe pas ok sinon en régénérer un autre et refaire la vérification jusqu'à ce qu'on un chiffre unique.

Pour générer un code à 6 chiffres aléatoire j'utilise ceci.

[code:1]$password = ( Get-Random -Minimum 100000 -Maximum 999999 ).ToString('000000')[/code:1]

Je pense qu'il serait interessant de créer un fonction pour cela mais je ne sais pas trop comment m'y prendre.
Il faudrait je pense générer un chiffre, comparer avec les autres utilisateurs que ce chiffre n'est pas déjà présent ensuite 2 solutions soit le chiffre n'existe pas et dans ce cas là on garde le chiffre sinon on boucle la génération jusqu'à tomber sur un chiffre libre.
Quelqu'un peut il m'aiguiller sur la méthodologie et les commandes qui peuvent correspondre ?

Merci d'avance

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

Plus d'informations
il y a 4 ans 4 mois #29468 par gaudefroy
en faisant le code ci-dessous j'arrive à tester si le chiffre existe déjà. Je precise que le code en question est dans l'attribut AD: extensionAttribut1

[code:1]$GeneratePuk = ( Get-Random -Minimum 100000 -Maximum 999999 ).ToString('000000')

$PresencePuk = Get-ADUser -Filter \"extensionAttribute1 -eq '$GeneratePuk'\"

if ($PresencePuk -eq $null) {

write-host \"le code $GeneratePuk n'existe pas\" -ForegroundColor green
}

else {
Write-Host \"le code $GeneratePuk existe deja\" -ForegroundColor Red
}[/code:1]

Je souhaiterai que si le $generatePuk n'existe pas il me garde ce chiffre et s'il existe qu'il boucle la génération jusqu'à trouver un chiffre unique.
Peut etre devrais je utiliser switch pultot que IF-else mais je maitrise mal Switch.
Aussi j'aimerai créer un fonction pour pouvoir l'intégrer à mon script de création d'utilisateur

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

Plus d'informations
il y a 4 ans 4 mois #29473 par Halouc
Bonjour,

Je penserai plutôt à une boucle do-while.
[code:1]


function new-idGenerator
{
[cmdLetBinding()]
param
(
[string]$Server,
[pscredential]$credential
)

Process
{
do
{
try
{
$id = (Get-Random -Minimum 100000 -Maximum 999999).ToString(\"000000\"«»)
$r = Get-AdUser -ldapFilter \"(extensionAttribute1=$($id))\" @PSBoundParameters
if ( $null -eq $r )
{
Write-Verbose \"utilisation de l'id : [$($id)] !\"
$f = $true
}
}
catch
{
throw $_.Exception.Message
}

}
while ( $f -eq $false )

return $id
}
}[/code:1]

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

Plus d'informations
il y a 4 ans 4 mois #29479 par gaudefroy
Merci Halouc pour ton aide et le code semble fonctionner parfaitement.
Peux tu m'expliquer un peu la logique de ton code ? En fait j'aimerai progresser et comprendre ce que tu m'indiques:

Voici mes questions:

- pourquoi utiliser la fonction do...while plutôt que Do...until ? Si je comprends bien il fait la boucle tant que la variable $f -eq $false
- A quoi sert \"@PSBoundParameters\" je ne connais pas

Merci d'avance

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

Plus d'informations
il y a 4 ans 4 mois #29480 par Halouc
Pourquoi \"do while\" et pas \"do until\". Je te dirai que c'est une question d'habitude.

$PSBoundParameters est une variable créer automatiquement par Powershell lors de l'exécution d'une fonction. Elle sort un dictionnaire (hastable) de tous les paramètres que tu as passé.
ss64.com/ps/psboundparameters.html


Si tu remarques les paramètres de la fonction, je précise \"server\" et \"credential\" qui sont des paramètres qui existent dans la commande \"get-aduser\". Je récupère ce tableau créer par powershell et j'utilise la technique du splatting qui permet d'exécuter une commande en utilisant un dictionnaire :-).
www.powershell-du-zero.fr/2019/05/03/com...iliser-le-splatting/

docs.microsoft.com/en-us/powershell/modu...ng?view=powershell-6

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

Plus d'informations
il y a 4 ans 4 mois #29481 par Halouc
doublon<br><br>Message édité par: Halouc, à: 25/11/19 18:07

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

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