Question Script ajout d'utilisateur avec windows Form

Plus d'informations
il y a 7 ans 5 mois #27831 par gaudefroy
Bonjour je sollicite votre aide pour créer une interface de saisie Windows Form pour ajouter des utilisateurs à mon active directory. J'ai créé un form puis adapté un script qui fonctionne pour les csv.
Bien sur il ne fonctionne pas. Je voudrais récupérer les infos saisies dnas les champs texte pour créer mon utilisateur.
Voir script ci dessous

[code:1]
[void] [System.Reflection.Assembly]::LoadWithPartialName(\"System.Drawing\"«»)
[void] [System.Reflection.Assembly]::LoadWithPartialName(\"System.Windows.Forms\"«»)

Import-Module ActiveDirectory

#GUI Oberfläche
$Form = New-Object System.Windows.Forms.Form
$Form.Size = New-Object System.Drawing.Size(500,500)
$Form.Text = \"Ajout d'utilisateurs\"

#
Labels
#Label Titre
$labeladduser = New-Object System.Windows.Forms.Label
$labeladduser.Location = New-Object System.Drawing.Size(200,10)
$labeladduser.Size = New-Object System.Drawing.Size(200,30)
$labeladduser.Text = \"Ajout d'utilisateurs\"
$labeladduser.Name = \"Ajout d'utilisateurs\"
$Form.Controls.Add($labeladduser)

#Label Prenom
$Labelprenom = New-Object System.Windows.Forms.Label
$Labelprenom.Location = New-Object System.Drawing.Size(10,50)
$Labelprenom.Size = New-Object System.Drawing.Size(100,20)
$Labelprenom.Text = \"Prenom\"
$Labelprenom.Name = \"Prenom\"
$Form.Controls.Add($Labelprenom)

#Label Nom
$Labelnom = New-Object System.Windows.Forms.Label
$Labelnom.Location = New-Object System.Drawing.Size(10,80)
$Labelnom.Size = New-Object System.Drawing.Size(100,20)
$Labelnom.Text = \"Nom\"
$Labelnom.Name = \"Nom\"
$Form.Controls.Add($Labelnom)

#Label Service
$Labelservice = New-Object System.Windows.Forms.Label
$Labelservice.Location = New-Object System.Drawing.Size(10,110)
$Labelservice.Size = New-Object System.Drawing.Size(100,20)
$Labelservice.Text = \"Service\"
$Labelservice.Name = \"Service\"
$Form.Controls.Add($Labelservice)

#Label mot de passe
$LabelPass = New-Object System.Windows.Forms.Label
$Labelpass.Location = New-Object System.Drawing.Size(10,140)
$Labelpass.Size = New-Object System.Drawing.Size(100,20)
$Labelpass.Text = \"Mot de Passe\"
$Labelpass.Name = \"Mot de Passe\"
$Form.Controls.Add($Labelpass)

#
Buttons
#Close GUI Button
$BTcancel = New-Object System.Windows.Forms.Button
$BTcancel.Location = New-Object System.Drawing.Size(400,180)
$BTcancel.Size = New-Object System.Drawing.Size(75,23)
$BTcancel.Text = \"Cancel\"
$BTcancel.Name = \"Cancel\"
$BTcancel.Add_Click({$Form.Close()})
$Form.Controls.Add($BTcancel)

#Speichern Button
$BTcreer = New-Object System.Windows.Forms.Button
$BTcreer.Location = New-Object System.Drawing.Size(320,180)
$BTcreer.Size = New-Object System.Drawing.Size(75,23)
$BTcreer.Text = \"Creer\"
$BTcreer.Name = \"Creer\"
$Form.Controls.Add($BTcreer)

#
Textfields

#Textfield prenom
$Textboxprenom = New-Object System.Windows.Forms.TextBox
$Textboxprenom.Location = New-Object System.Drawing.Size(200,50)
$Textboxprenom.Size = New-Object System.Drawing.Size(200,20)
$addv = $Textboxprenom.Text
$Form.Controls.Add($Textboxprenom)

#Textfield nom
$Textboxnom = New-Object System.Windows.Forms.TextBox
$Textboxnom.Location = New-Object System.Drawing.Size(200,80)
$Textboxnom.Size = New-Object System.Drawing.Size(200,20)
$addn = $Textboxnom.Text
$Form.Controls.Add($Textboxnom)

#Textfield service
$Textboxservice = New-Object System.Windows.Forms.TextBox
$Textboxservice.Location = New-Object System.Drawing.Size(200,110)
$Textboxservice.Size = New-Object System.Drawing.Size(200,20)
$addVa = $Textboxservice.Text
$Form.Controls.Add($Textboxservice)

#Textfield Mot de passe
$TextboxBa= New-Object System.Windows.Forms.TextBox
$TextboxBa.Location = New-Object System.Drawing.Size(200,140)
$TextboxBa.Size = New-Object System.Drawing.Size(200,20)
$addBa = $TextboxBa.Text
$Form.Controls.Add($TextboxBa)



#
Fonctions
#creation des variables

$DisplayName = \"$addv\" + \" \" + \"$addn\"
$GivenName = $addv
$SamAccountName = \"$addv\" + \".\" + \"$addn\"
$Surname = $addn
$Name = \"$addv\" + \".\" + \"$addn\"
$UserPrincipalName = \"$addv\" + \".\" + \"$addn\" + \"domaine\"
$Department = $addVa
$Description = $addVa
$EmailAddress = \"$addv\" + \".\" + \"$addn\" + \"domaine\"
$Path = \"Chemin de l'ou\"
$Password = $addBa
$Company = $addVa
$Office = $addVa

#Add User

$BTcreer.Add_Click({

#Verfie si le compte existe deja dans l'AD
if (Get-ADUser -F {SamAccountName -eq $SamAccountName})
{
#Si l'utilisateur existe, afficehr le message
Write-Warning \"Ce compte utilisateur $SamAccountName existe déjà dans l'active directory.\"
}
else
{
#Si l'utilisateur n'existe pas, le créer

New-ADUser -DisplayName $DisplayName -GivenName $GivenName -SamAccountName $SamAccountName -Surname $Surname -Name $Name -UserPrincipalName $UserPrincipalName -Department $Department -Description $Description -EmailAddress $EmailAddress -Path $Path -AccountPassword (ConvertTo-SecureString $password -AsPlainText -Force) -Company $Company -Office $Office -CannotChangePassword $false -Enabled $true
# Affiche le résultat pour chaque utilisateur
echo \"Compte cree pour $DisplayName dans $Path\"

}

$path = \"\\srv-data\users$\$SamAccountName\"
If(!(test-path $path))
{
New-Item -ItemType Directory -Force -Path $path

Import-Module NTFSSecurity

Add-NTFSAccess –Path \"\\srv-data\users$\$SamAccountName\" –Account \"$UserPrincipalName\" –AccessRights Modify
}
})


[void] $Form.ShowDialog()
[/code:1]

Il y a certainement des erreurs de syntaxe ou de comprehension.
Merci pour votre aide<br><br>Message édité par: como10, à: 26/11/18 15:57

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

Plus d'informations
il y a 7 ans 5 mois #27834 par Philippe
salut como10

ton script est bon mais
pour que tu comprenne, au début ton script est exécuté mais une seule fois
et après plus rien même quand tu fais les saisies
la seule partie du script qui n'est pas exécuté au début et qui s'exécute après c'est les évènements, dans ton cas les scripts des boutons (les add_click)

donc pour que la création fonctions il faut au début de ton $BTcreer.Add_Click({ mettre récupération de valeurs des testbox, les $xxx = $Textboxxxxxxx.Text
puis à la suite, la création des variables $DisplayName = \&quot;$addv\&quot; + \&quot; \&quot; + \&quot;$addn\&quot; ...
et après normalement ça fonctionne ! :)

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

Plus d'informations
il y a 7 ans 5 mois #27835 par gaudefroy
Merci 6 ratgus

donc si je comprends bien il faut que je fasse quelque chose comme cela ?

[code:1]
[void] [System.Reflection.Assembly]::LoadWithPartialName(\&quot;System.Drawing\&quot;«»)

[void] [System.Reflection.Assembly]::LoadWithPartialName(\&quot;System.Windows.Forms\&quot;«»)



Import-Module ActiveDirectory



#GUI Oberfläche

$Form = New-Object System.Windows.Forms.Form

$Form.Size = New-Object System.Drawing.Size(500,500)

$Form.Text = \&quot;Ajout d'utilisateurs\&quot;



#
Labels

#Label Titre

$labeladduser = New-Object System.Windows.Forms.Label

$labeladduser.Location = New-Object System.Drawing.Size(200,10)

$labeladduser.Size = New-Object System.Drawing.Size(200,30)

$labeladduser.Text = \&quot;Ajout d'utilisateurs\&quot;

$labeladduser.Name = \&quot;Ajout d'utilisateurs\&quot;

$Form.Controls.Add($labeladduser)



#Label Prenom

$Labelprenom = New-Object System.Windows.Forms.Label

$Labelprenom.Location = New-Object System.Drawing.Size(10,50)

$Labelprenom.Size = New-Object System.Drawing.Size(100,20)

$Labelprenom.Text = \&quot;Prenom\&quot;

$Labelprenom.Name = \&quot;Prenom\&quot;

$Form.Controls.Add($Labelprenom)



#Label Nom

$Labelnom = New-Object System.Windows.Forms.Label

$Labelnom.Location = New-Object System.Drawing.Size(10,80)

$Labelnom.Size = New-Object System.Drawing.Size(100,20)

$Labelnom.Text = \&quot;Nom\&quot;

$Labelnom.Name = \&quot;Nom\&quot;

$Form.Controls.Add($Labelnom)



#Label Service

$Labelservice = New-Object System.Windows.Forms.Label

$Labelservice.Location = New-Object System.Drawing.Size(10,110)

$Labelservice.Size = New-Object System.Drawing.Size(100,20)

$Labelservice.Text = \&quot;Service\&quot;

$Labelservice.Name = \&quot;Service\&quot;

$Form.Controls.Add($Labelservice)



#Label mot de passe

$LabelPass = New-Object System.Windows.Forms.Label

$Labelpass.Location = New-Object System.Drawing.Size(10,140)

$Labelpass.Size = New-Object System.Drawing.Size(100,20)

$Labelpass.Text = \&quot;Mot de Passe\&quot;

$Labelpass.Name = \&quot;Mot de Passe\&quot;

$Form.Controls.Add($Labelpass)



#
Buttons

#Close GUI Button

$BTcancel = New-Object System.Windows.Forms.Button

$BTcancel.Location = New-Object System.Drawing.Size(400,180)

$BTcancel.Size = New-Object System.Drawing.Size(75,23)

$BTcancel.Text = \&quot;Cancel\&quot;

$BTcancel.Name = \&quot;Cancel\&quot;

$BTcancel.Add_Click({$Form.Close()})

$Form.Controls.Add($BTcancel)



#Speichern Button

$BTcreer = New-Object System.Windows.Forms.Button

$BTcreer.Location = New-Object System.Drawing.Size(320,180)

$BTcreer.Size = New-Object System.Drawing.Size(75,23)

$BTcreer.Text = \&quot;Creer\&quot;

$BTcreer.Name = \&quot;Creer\&quot;

$Form.Controls.Add($BTcreer)



#
Textfields



#Textfield prenom

$Textboxprenom = New-Object System.Windows.Forms.TextBox

$Textboxprenom.Location = New-Object System.Drawing.Size(200,50)

$Textboxprenom.Size = New-Object System.Drawing.Size(200,20)

$Form.Controls.Add($Textboxprenom)



#Textfield nom

$Textboxnom = New-Object System.Windows.Forms.TextBox

$Textboxnom.Location = New-Object System.Drawing.Size(200,80)

$Textboxnom.Size = New-Object System.Drawing.Size(200,20)

$Form.Controls.Add($Textboxnom)



#Textfield service

$Textboxservice = New-Object System.Windows.Forms.TextBox

$Textboxservice.Location = New-Object System.Drawing.Size(200,110)

$Textboxservice.Size = New-Object System.Drawing.Size(200,20)

$Form.Controls.Add($Textboxservice)



#Textfield Mot de passe

$TextboxBa= New-Object System.Windows.Forms.TextBox

$TextboxBa.Location = New-Object System.Drawing.Size(200,140)

$TextboxBa.Size = New-Object System.Drawing.Size(200,20)

$Form.Controls.Add($TextboxBa)







#
Fonctions

$BTcreer.Add_Click({
# recupération des valeurs

$addv = $Textboxprenom.Text
$addn = $Textboxnom.Text
$addVa = $Textboxservice.Text
$addBa = $TextboxBa.Text

#creation des variables

$DisplayName = \&quot;$addv\&quot; + \&quot; \&quot; + \&quot;$addn\&quot;

$GivenName = $addv

$SamAccountName = \&quot;$addv\&quot; + \&quot;.\&quot; + \&quot;$addn\&quot;

$Surname = $addn

$Name = \&quot;$addv\&quot; + \&quot;.\&quot; + \&quot;$addn\&quot;

$UserPrincipalName = \&quot;$addv\&quot; + \&quot;.\&quot; + \&quot;$addn\&quot; + \&quot;domaine\&quot;

$Department = $addVa

$Description = $addVa

$EmailAddress = \&quot;$addv\&quot; + \&quot;.\&quot; + \&quot;$addn\&quot; + \&quot;domaine\&quot;

$Path = \&quot;Chemin de l'ou\&quot;

$Password = $addBa

$Company = $addVa

$Office = $addVa

#Add User

#Verfie si le compte existe deja dans l'AD

if (Get-ADUser -F {SamAccountName -eq $SamAccountName})

{

#Si l'utilisateur existe, afficehr le message

Write-Warning \&quot;Ce compte utilisateur $SamAccountName existe déjà dans l'active directory.\&quot;

}

else

{

#Si l'utilisateur n'existe pas, le créer



New-ADUser -DisplayName $DisplayName -GivenName $GivenName -SamAccountName $SamAccountName -Surname $Surname -Name $Name -UserPrincipalName $UserPrincipalName -Department $Department -Description $Description -EmailAddress $EmailAddress -Path $Path -AccountPassword (ConvertTo-SecureString $password -AsPlainText -Force) -Company $Company -Office $Office -CannotChangePassword $false -Enabled $true

# Affiche le résultat pour chaque utilisateur

echo \&quot;Compte cree pour $DisplayName dans $Path\&quot;



}



$path = \&quot;\\srv-data\users$\$SamAccountName\&quot;

If(!(test-path $path))

{

New-Item -ItemType Directory -Force -Path $path



Import-Module NTFSSecurity



Add-NTFSAccess –Path \&quot;\\srv-data\users$\$SamAccountName\&quot; –Account \&quot;$UserPrincipalName\&quot; –AccessRights Modify

}

})





[void] $Form.ShowDialog()
[/code:1]

Ai je bien compris les corrections que tu m'as indiqué ? ou pas du tout ?
Au niveau syntaxe y a t'il d'autre moyens de faire quelque chose de plus \&quot;propre\&quot; ?

Petite question au passage, j'aimerai faire une liste deroulante avec des choix multiples pour le service. La personne aurait juste a sectionner le service ou affecter l'utilisateur et suivant le service selectionné certaines variables comme path, service, description et autre serait différentes. J'imaginie qu'il faut créer une fonction pour cela en indiquant avec avec des if ou autre chose. Peux tu m'indiquer la meilleure maniere pour réaliser cela. En sachant qu'il y a une quarantaine de services en tout.
Merci d'avance<br><br>Message édité par: como10, à: 26/11/18 17:16

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

Plus d'informations
il y a 7 ans 5 mois #27843 par Philippe

Ai je bien compris les corrections que tu m'as indiqué ? ou pas du tout ?

exactement

Au niveau syntaxe y a t'il d'autre moyens de faire quelque chose de plus \&quot;propre\&quot; ?

malheureusement non

Petite question au passage, j'aimerai faire une liste deroulante avec des choix multiples pour le service. Peux tu m'indiquer la meilleure maniere pour réaliser cela. En sachant qu'il y a une quarantaine de services en tout.

ce blog contient unbon exemple simple le premier exemple
le exemple c'est pour des colonnes caché pour retourner une valeur différente de la valeur affichée

pour la saisie des quarante service :
[code:1]$liste1.Items.AddRange((\&quot;1\&quot;,\&quot;2\&quot;,\&quot;3\&quot;,\&quot;4\&quot;,\&quot;5\&quot;,\&quot;6\&quot;,\&quot;7\&quot;,\&quot;8\&quot;,\&quot;9\&quot;«»))
[/code:1]
tu peut aussi utilisé un tableau importer d'un fichier
[code:1]
$tableauservice = get-content \&quot;fichier\&quot;
$liste1.Items.AddRange($tableauservice)[/code:1]

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

Plus d'informations
il y a 7 ans 5 mois #27846 par gaudefroy
Merci pour ton aide 6ratgus, j'ai bien avancé sur le script et ça fonctionne parfaitement avec tes modifications. Maintenant au fur et à mesure je me dit que ce serait bien d'améliorer la chose. L'appétit vient en mangeant.:P

En effet, pour indique les services j'ai ajouté une combobox comme ci dessous:

[code:1]
$combobox.items.addrange(\&quot;choix1\&quot;,\&quot;choix2\&quot;,etc...)
[/code:1]

Maintenant ce que je voudrais c'est que suivant que je choisisse le choix 1 ou 2 cela change certaines de mes variables. Notamment $path, ,$department, etc...

En fait ma question porte plus sur la méthode à employer pour réaliser cela et la syntaxe.

J'imagine qu'il doit falloir indiquer que si la combobox.text -eq choix 1 alors les variables auuront telle valeur.

Mais je ne sais pas ou et comment l'intégrer à mon script

Merci d'avance pour tes sugggestions

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

Plus d'informations
il y a 7 ans 5 mois #27847 par Philippe

. Maintenant au fur et à mesure je me dit que ce serait bien d'améliorer la chose. L'appétit vient en mangeant.

c'est comme ça qu'il faut faire !! ;)

Maintenant ce que je voudrais c'est que suivant que je choisisse le choix 1 ou 2 cela change certaines de mes variables. Notamment $path, ,$department, etc...

Mais je ne sais pas ou et comment l'intégrer à mon script

pour ou, de ce que je connais de ton script, c'est évidemment dans add_click dans initialisation des variables,

le comment comme tu dis un if :
[code:1]if (combobox.text -eq \&quot;valeur\&quot;«») {
# action
$path = ......
$department = ......
}[/code:1]

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

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