none
Script de création de compte AD en erreur RRS feed

  • Question

  • Bonjour,

    J'ai créé ce scripte pour permettre au niveau 1 de créer les comptes sans passer par l'AD en interface graphique.

    Mais j'ai une erreur lors de la création du compte.

    New-ADUser : Impossible de valider l'argument sur le paramètre «Name».
    L'argument est Null ou vide. Indiquez un argument qui n'est pas Null ou vide
    et réessayez.

    #AJOUT UTILISATEUR SCRIPT POWERSHELL AVEC INTERFACE GRAPHIQUE
    
    #CREATE GUI
    [void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing") 
    [void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") 
    
    Function AddUsers([string]$userUPN,[string]$license,[string]$userPageweb,[string]$userPhonenumber,[string]$useradresse,[string]$usercp,[string]$usercity,[string]$Bureau,[string]$Fonction,[string]$mail,[string]$SAM,[string]$nom,[string]$prenom,[string]$nomcomplet){
        #creation de l'utilisateur avec les infos recuperees pour celui-ci
        new-ADUser -Name "$nomcomplet" -AccountPassword (ConvertTo-SecureString -String "Bonjour@7" -AsPlainText -Force) -ChangePasswordAtLogon 1 -DisplayName "$nomcomplet" -EmailAddress "$mail" -Enabled 1 -GivenName "$prenom" -OfficePhone "$userPhonenumber" -Path "$ou" -SamAccountName "$SAM" -Surname "$nom" -UserPrincipalName "$mail" -PostalCode "$usercp" -City "$usercity" -StreetAddress "$useradresse" -HomePage "$userPageweb" -Office "$Bureau" -Title "$Fonction"
       }
    function MAJUsers([string]$Prefixe,[string]$proxyaddress,[string]$targetadd,[string]$SAM,[string]$SAMCOPY,[string]$Date_Expi){
        get-aduser -filter {samaccountName -like $SAM} | Set-Aduser -Replace @{msExchRecipientDisplayType="-2147483642"}
        get-aduser -filter {samaccountName -like $SAM} | Set-Aduser -Replace @{msExchRecipientTypeDetails="2147483648"}
        get-aduser -filter {samaccountName -like $SAM} | Set-Aduser -Replace @{mailnickname=$prefixe}
        get-aduser -filter {samaccountName -like $SAM} | Set-Aduser -Replace @{preferredlanguage="fr-FR"}
        get-aduser -filter {samaccountName -like $SAM} | Set-Aduser -add @{proxyAddresses=$proxyAddress}
        get-aduser -filter {samaccountName -like $SAM} | Set-Aduser -add @{proxyAddresses=$targetadd}
        get-aduser -filter {samaccountName -like $SAM} | Set-Aduser -replace @{targetAddress=$targetadd}
    
        Get-ADUser -filter {samaccountName -like $SAMCOPY} -Properties memberof | Select-Object -ExpandProperty memberof | Add-ADGroupMember -Members $SAM
        if ($Date_Expi -ne "")
            {$Date_Expi = (get-date $Date_Expi).AddDays(+1)
            Set-ADAccountExpiration $SAM -DateTime $Date_Expi}
        }
    
    $objForm = New-Object System.Windows.Forms.Form 
    $objForm.Text = "Création d'un Compte Utilisateur"
    $objForm.Size = New-Object System.Drawing.Size(600,1000) 
    $objForm.StartPosition = "CenterScreen"
    $objForm.BackColor = "#929fae"
    
    
    $objForm.KeyPreview = $True
    $objForm.Add_KeyDown({if ($_.KeyCode -eq "Valider") 
        {$x=$objTextBox.Text;$objForm.Close()}})
           $objForm.Add_KeyDown({if ($_.KeyCode -eq "Quitter") 
        {$objForm.Close()}})
     
    $OKButton = New-Object System.Windows.Forms.Button
    $OKButton.Location = New-Object System.Drawing.Size(75,920)
    $OKButton.Size = New-Object System.Drawing.Size(75,23)
    $OKButton.Text = "Valider"
    $OKButton.Add_Click({$x=$objTextBox.Text;$objForm.Close()})
    $objForm.Controls.Add($OKButton)
    
    $CancelButton = New-Object System.Windows.Forms.Button
    $CancelButton.Location = New-Object System.Drawing.Size(150,920)
    $CancelButton.Size = New-Object System.Drawing.Size(75,23)
    $CancelButton.Text = "Quitter"
    $CancelButton.Add_Click({$objForm.Close()})
    $objForm.Controls.Add($CancelButton)
    
    #text pour 1er textbox
    $objLabel = New-Object System.Windows.Forms.Label
    $objLabel.Location = New-Object System.Drawing.Size(10,20) 
    $objLabel.Size = New-Object System.Drawing.Size(280,20) 
    $objLabel.Text = "Entrer le compte SAM"
    $objForm.Controls.Add($objLabel) 
    #fin du text
    
    
    #text pour 2eme textbox
    $objLabel = New-Object System.Windows.Forms.Label
    $objLabel.Location = New-Object System.Drawing.Size(10,70) 
    $objLabel.Size = New-Object System.Drawing.Size(280,20) 
    $objLabel.Text = "Entrer le Prenom"
    $objForm.Controls.Add($objLabel) 
    #fin du text
    
    #text pour 3eme textbox
    $objLabel = New-Object System.Windows.Forms.Label
    $objLabel.Location = New-Object System.Drawing.Size(10,130) 
    $objLabel.Size = New-Object System.Drawing.Size(280,20) 
    $objLabel.Text = "Entrer le Nom"
    $objForm.Controls.Add($objLabel) 
    #fin du text
    
    #text pour 4eme textbox
    $objLabel = New-Object System.Windows.Forms.Label
    $objLabel.Location = New-Object System.Drawing.Size(10,190) 
    $objLabel.Size = New-Object System.Drawing.Size(280,20) 
    $objLabel.Text = "Entrer le Téléphone"
    $objForm.Controls.Add($objLabel) 
    #fin du text
    
    #text pour 5eme textbox
    $objLabel = New-Object System.Windows.Forms.Label
    $objLabel.Location = New-Object System.Drawing.Size(10,250) 
    $objLabel.Size = New-Object System.Drawing.Size(280,20) 
    $objLabel.Text = "Entrer le Bureau de l'utilisateur"
    $objForm.Controls.Add($objLabel) 
    #fin du text
    
    #text pour 6eme textbox
    $objLabel = New-Object System.Windows.Forms.Label
    $objLabel.Location = New-Object System.Drawing.Size(10,310) 
    $objLabel.Size = New-Object System.Drawing.Size(280,20) 
    $objLabel.Text = "Entrer la rue de l'utilisateur"
    $objForm.Controls.Add($objLabel) 
    #fin du text
    
    #text pour 7eme textbox
    $objLabel = New-Object System.Windows.Forms.Label
    $objLabel.Location = New-Object System.Drawing.Size(10,370) 
    $objLabel.Size = New-Object System.Drawing.Size(280,20) 
    $objLabel.Text = "Entrer le code postal de l'utilisateur"
    $objForm.Controls.Add($objLabel) 
    #fin du text
    
    #text pour 8eme textbox
    $objLabel = New-Object System.Windows.Forms.Label
    $objLabel.Location = New-Object System.Drawing.Size(10,430) 
    $objLabel.Size = New-Object System.Drawing.Size(280,20) 
    $objLabel.Text = "Entrer la ville de l'utilisateur"
    $objForm.Controls.Add($objLabel) 
    #fin du text
    
    #text pour 9eme textbox
    $objLabel = New-Object System.Windows.Forms.Label
    $objLabel.Location = New-Object System.Drawing.Size(10,490) 
    $objLabel.Size = New-Object System.Drawing.Size(280,20) 
    $objLabel.Text = "Entrer la fonction de l'utilisateur"
    $objForm.Controls.Add($objLabel) 
    #fin du text
    
    #text pour 10eme textbox
    $objLabel = New-Object System.Windows.Forms.Label
    $objLabel.Location = New-Object System.Drawing.Size(10,550) 
    $objLabel.Size = New-Object System.Drawing.Size(280,20) 
    $objLabel.Text = "Entrer la licence de l'utilisateur E1S / E3S"
    $objForm.Controls.Add($objLabel) 
    #fin du text
    
    #text pour 11eme textbox
    $objLabel = New-Object System.Windows.Forms.Label
    $objLabel.Location = New-Object System.Drawing.Size(10,610) 
    $objLabel.Size = New-Object System.Drawing.Size(280,20) 
    $objLabel.Text = "Entrer le compte SAM de copie"
    $objForm.Controls.Add($objLabel) 
    #fin du text
    
    #text pour 12eme textbox
    $objLabel = New-Object System.Windows.Forms.Label
    $objLabel.Location = New-Object System.Drawing.Size(10,670) 
    $objLabel.Size = New-Object System.Drawing.Size(280,20) 
    $objLabel.Text = "Entrer le Jour Mois et ville de naissance JJ/MM VILLE"
    $objForm.Controls.Add($objLabel) 
    #fin du text
    
    #text pour 13eme textbox
    $objLabel = New-Object System.Windows.Forms.Label
    $objLabel.Location = New-Object System.Drawing.Size(10,730) 
    $objLabel.Size = New-Object System.Drawing.Size(280,20) 
    $objLabel.Text = "Indiquer EXT si c'est un compte Externe"
    $objForm.Controls.Add($objLabel) 
    #fin du text
    
    #text pour 14eme textbox
    $objLabel = New-Object System.Windows.Forms.Label
    $objLabel.Location = New-Object System.Drawing.Size(10,790) 
    $objLabel.Size = New-Object System.Drawing.Size(280,20) 
    $objLabel.Text = "Date de fin d'expiration si nécessaire JJ/MM/AAAA"
    $objForm.Controls.Add($objLabel) 
    #fin du text
    
    
    $objTextBox = New-Object System.Windows.Forms.TextBox 
    $objTextBox.Location = New-Object System.Drawing.Size(10,40) 
    $objTextBox.Size = New-Object System.Drawing.Size(260,20) 
    $objForm.Controls.Add($objTextBox) 
    
    
    
    #modif ajout fenetre
    $objTextBox2 = New-Object System.Windows.Forms.TextBox 
    $objTextBox2.Location = New-Object System.Drawing.Size(10,90) 
    $objTextBox2.Size = New-Object System.Drawing.Size(260,20) 
    $objForm.Controls.Add($objTextBox2) 
    
    $objTextBox3 = New-Object System.Windows.Forms.TextBox 
    $objTextBox3.Location = New-Object System.Drawing.Size(10,150) 
    $objTextBox3.Size = New-Object System.Drawing.Size(260,20) 
    $objForm.Controls.Add($objTextBox3) 
    
    $objTextBox4 = New-Object System.Windows.Forms.TextBox 
    $objTextBox4.Location = New-Object System.Drawing.Size(10,210) 
    $objTextBox4.Size = New-Object System.Drawing.Size(260,20) 
    $objForm.Controls.Add($objTextBox4) 
    
    $objTextBox5 = New-Object System.Windows.Forms.TextBox 
    $objTextBox5.Location = New-Object System.Drawing.Size(10,270) 
    $objTextBox5.Size = New-Object System.Drawing.Size(260,20) 
    $objForm.Controls.Add($objTextBox5) 
    
    $objTextBox6 = New-Object System.Windows.Forms.TextBox 
    $objTextBox6.Location = New-Object System.Drawing.Size(10,330) 
    $objTextBox6.Size = New-Object System.Drawing.Size(260,20) 
    $objForm.Controls.Add($objTextBox6)
    
    $objTextBox7 = New-Object System.Windows.Forms.TextBox 
    $objTextBox7.Location = New-Object System.Drawing.Size(10,390) 
    $objTextBox7.Size = New-Object System.Drawing.Size(260,20) 
    $objForm.Controls.Add($objTextBox7)
    
    $objTextBox8 = New-Object System.Windows.Forms.TextBox 
    $objTextBox8.Location = New-Object System.Drawing.Size(10,450) 
    $objTextBox8.Size = New-Object System.Drawing.Size(260,20) 
    $objForm.Controls.Add($objTextBox8) 
    
    $objTextBox9 = New-Object System.Windows.Forms.TextBox 
    $objTextBox9.Location = New-Object System.Drawing.Size(10,510) 
    $objTextBox9.Size = New-Object System.Drawing.Size(260,20) 
    $objForm.Controls.Add($objTextBox9) 
    
    $objTextBox10 = New-Object System.Windows.Forms.TextBox 
    $objTextBox10.Location = New-Object System.Drawing.Size(10,570) 
    $objTextBox10.Size = New-Object System.Drawing.Size(260,20) 
    $objForm.Controls.Add($objTextBox10) 
    
    $objTextBox11 = New-Object System.Windows.Forms.TextBox 
    $objTextBox11.Location = New-Object System.Drawing.Size(10,630) 
    $objTextBox11.Size = New-Object System.Drawing.Size(260,20) 
    $objForm.Controls.Add($objTextBox11) 
    
    $objTextBox12 = New-Object System.Windows.Forms.TextBox 
    $objTextBox12.Location = New-Object System.Drawing.Size(10,690) 
    $objTextBox12.Size = New-Object System.Drawing.Size(260,20) 
    $objForm.Controls.Add($objTextBox12) 
    
    $objTextBox13 = New-Object System.Windows.Forms.TextBox 
    $objTextBox13.Location = New-Object System.Drawing.Size(10,750) 
    $objTextBox13.Size = New-Object System.Drawing.Size(260,20) 
    $objForm.Controls.Add($objTextBox13) 
    
    $objTextBox14 = New-Object System.Windows.Forms.TextBox 
    $objTextBox14.Location = New-Object System.Drawing.Size(10,810) 
    $objTextBox14.Size = New-Object System.Drawing.Size(260,20) 
    $objForm.Controls.Add($objTextBox14) 
    
    #fin de modif
    
    $objForm.Topmost = $True
    
    $objForm.Add_Shown({$objForm.Activate()})
    [void] $objForm.ShowDialog()
    
    $x
    
    #variable Identifiant $objTextBox.Text
    #variable Prenom $objTextBox2.Text
    #variable Nom $objTextBox3.Text
    #variable Tel $objTextBox4.Text
    #variable MAIL $objTextBox5.Text
    
    #Ajout Dans L'AD
    
    $ou = "OU=STANDARD-USERS,OU=USERS,OU=ENTREPRISE,DC=entreprise,DC=int"
    
    $userUPN = $objTextBox2.Text+ "." + $objTextBox3.Text + "@XXXXXX.com"
    $license = $objTextBox10.Text
    $userPageweb = $objTextBox12.Text
    $userPhonenumber = $objTextBox4.Text
    $useradresse = $objTextBox6.Text
    $usercp = $objTextBox7.Text
    $usercity = $objTextBox8.Text
    $Bureau = $objTextBox5.Text
    $Fonction = $objTextBox9.Text
    $Prefixe = $userUPN.Split("@")[0]
    $mail = "$($Prefixe)@" + "xxxx.com"
    $proxyaddress = "SMTP:" + $mail
    $targetadd = "smtp:" + "$($Prefixe)@" + "onlineXX.mail.onmicrosoft.com"
    $license = $objTextBox13.Text
    $nomcomplet= $objTextBox3.Text+ ", " +$objTextBox2.Text + " [Societe" + $objTextBox13.Text+"]"
    $SAM = $objTextBox.Text
    $nom=$objTextBox3.Text
    $prenom=$objTextBox2.Text
    $SAMCOPY = $objTextBox11.Text
    $Date_Expi = $objTextBox14.Text
    $wshell = New-Object -ComObject Wscript.Shell  
    $wshell.Popup("$SAM ",0,"Done",0x1)
    
    
        AddUsers($userUPN,$license,$userPageweb,$userPhonenumber,$useradresse,$usercp,$usercity,$Bureau,$Fonction,$mail,$SAM,$nom,$prenom,$nomcomplet)
        MAJUsers($Prefixe,$proxyaddress,$targetadd,$SAM,$SAMCOPY,$Date_Expi)
        get-aduser -filter {samaccountName -like $SAM} -properties * | select DisplayName, mail, userprincipalname, samaccountName, msExchRecipientDisplayType, msExchRecipientTypeDetails, extensionAttribute10, mailnickname, preferredlanguage, proxyAddresses, targetAddress, streetaddress, officephone, homepage, physicalDeliveryOfficeName
        #insertion du form popup
    $wshell = New-Object -ComObject Wscript.Shell   
        #verification creation utilisateur OK
        if($? -eq "1"){
    
            $wshell.Popup("Creation Utilisateur $nomcomplet reussie",0,"Done",0x1)
            #echo "creation utilisateur $pseudo reussie"
    		    
    		#Fin traitement pour l'utilisateur courant
            $wshell.Popup("Termine pour $nomcomplet",0,"Done",0x1)
    		#echo "termine pour $pseudo"
        }else{
            $wshell.Popup("Erreur a la creation de l'utilisateur $nomcomplet",0,"Done",0x1)
            #echo "erreur a la creation de l'utilisateur $pseudo"
        }
          


    • Modifié Beneal vendredi 7 septembre 2018 11:46
    vendredi 7 septembre 2018 09:18

Réponses

  • Tu as essayé ton script en mettant un point d'arrêt dans PowerShell ISE et en vérifiant la valeur et le type d'objet de ta variable $nomcomplet ?

    Si tu fais un test, tu verras que ta variable $nomcomplet est vide et que la variable $userUPN est une chaine de caractère concaténé de toutes les autres variables :

    C'est la manière dont tu fais appel a la fonction qui pose problème et qui est différente avec Powershell 

    A lire  : https://www.faqforge.com/windows/how-to-call-functions-in-powershell-windows/

    Dans ton cas lors de l'appel tu as envoyé une variable $userupn contenant un tableau avec toutes les valeurs 

    De plus tes variables dans ta fonction porte le même nom que les variables du corps du programme ce qui rend la lecture très complexe.

    Quand tu appelles une fonction tu peux soit mettre les variables dans l'ordre d'appel soit plus propre désigner ta variable à chaque paramètre ce qui facilite la lecture et élimine les doutes (sauf si les noms des variables dans la fonction et dans le corps du programme sont identiques, ca ne dérange pas Powershell pour qui les variables sont différentes et ont des portés différentes) , exemple 

    AddUsers -userUPN $userUPN -license $license -nomcomplet $nomcomplet -prenom $prenom

    Dans ce format tu verras que les variables de la fonction sont correctement renseignée. Tu n'es pas obligé de respecté l'ordre des variables et tu peux utiliser tab pour une saisie rapide ...

    Dans la partie ci dessous les " ne servent a rien :

    new-ADUser -Name "$nomcomplet"






    • Modifié Philippe BarthMVP samedi 8 septembre 2018 10:26
    • Marqué comme réponse Beneal lundi 10 septembre 2018 12:17
    samedi 8 septembre 2018 05:27

Toutes les réponses

  • Tu as essayé ton script en mettant un point d'arrêt dans PowerShell ISE et en vérifiant la valeur et le type d'objet de ta variable $nomcomplet ?

    Si tu fais un test, tu verras que ta variable $nomcomplet est vide et que la variable $userUPN est une chaine de caractère concaténé de toutes les autres variables :

    C'est la manière dont tu fais appel a la fonction qui pose problème et qui est différente avec Powershell 

    A lire  : https://www.faqforge.com/windows/how-to-call-functions-in-powershell-windows/

    Dans ton cas lors de l'appel tu as envoyé une variable $userupn contenant un tableau avec toutes les valeurs 

    De plus tes variables dans ta fonction porte le même nom que les variables du corps du programme ce qui rend la lecture très complexe.

    Quand tu appelles une fonction tu peux soit mettre les variables dans l'ordre d'appel soit plus propre désigner ta variable à chaque paramètre ce qui facilite la lecture et élimine les doutes (sauf si les noms des variables dans la fonction et dans le corps du programme sont identiques, ca ne dérange pas Powershell pour qui les variables sont différentes et ont des portés différentes) , exemple 

    AddUsers -userUPN $userUPN -license $license -nomcomplet $nomcomplet -prenom $prenom

    Dans ce format tu verras que les variables de la fonction sont correctement renseignée. Tu n'es pas obligé de respecté l'ordre des variables et tu peux utiliser tab pour une saisie rapide ...

    Dans la partie ci dessous les " ne servent a rien :

    new-ADUser -Name "$nomcomplet"






    • Modifié Philippe BarthMVP samedi 8 septembre 2018 10:26
    • Marqué comme réponse Beneal lundi 10 septembre 2018 12:17
    samedi 8 septembre 2018 05:27
  • Bonjour

    Merci pour votre réponse, le script fonctionne parfaitement.

    C'est les habitude d'autre langage pour appeler les fonctions.

    En tout cas un grand merci.

    Cordialement.

    lundi 10 septembre 2018 12:19