IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Scripts/Batch Discussion :

Projet d'utilitaire de gestion de paramètres d'utilisateur local sous windows 7


Sujet :

Scripts/Batch

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2010
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2010
    Messages : 15
    Points : 14
    Points
    14
    Par défaut Projet d'utilitaire de gestion de paramètres d'utilisateur local sous windows 7
    Bonjour,

    Je vais vous présenter mon projet de stage pour ma 1ère année de BTS IRIS.
    Je vous explique tout d’abord la problématique.

    Dans la société, chaque jours plusieurs machines neuves sont déballées afin de les paramétrées avant livraison au client final. Les premières actions effectuées sont très basiques : changer le nom d'utilisateur, créer un nouveau compte, inscrire le poste dans un groupe de travail, paramètres IP...

    Ce qu'il m'est demandé : " nous voulons gagner du temps sur ces paramétrages redondant. Bien que habituels, il arrive d'oublier de faire certaines actions et donc une perte de temps que de ré-ouvrir toutes les fenêtres pour voir où l'on à raté quelque chose"

    Pour cela, on a établi une charte graphique afin de bien ce représenter les fonctionnalités attendu.

    Voici un screenshot :



    A mon arrivé, mon maître de stage m'a directement orienté vers le POWERSHELL.

    Aujourd'hui je fait appel à vous pour m'aider à la réalisation de mon projet. Et plus particulièrement sur les spécificités du langage POWERSHELL.


    Dans un premier temps je vais me concentrer principalement sur le développement de l'onglet Comptes.

    ETAPES :
    1/ Lister les comptes utilisateurs créés
    2/ Ajouter un nouveau compte

    J'ai parcouru un grand nombre de post et de forum à la recherche d'un script existant pour l'ajout d'un nouveau compte:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function create-account ([string]$accountName = "testuser") {    
       $hostname = hostname    
       $comp = [adsi] "WinNT://$hostname"   
       $user = $comp.Create("User", $accountName)    
       $user.SetPassword("Password1")    
       $user.SetInfo()    
    }
    Mais malheureusement cette fonction n'a pas fonctionné, et je ne sais pas pourquoi.

    En espérant que mon post vous inspirera!
    Merci d'avance à tous ceux qui voudrons bien me donner un coup de main ou simplement des explications sur la marche à suivre pour l'élaboration d'une tel projet

  2. #2
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2010
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2010
    Messages : 15
    Points : 14
    Points
    14
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function create-account ([string]$accountName = "testuser") {    
       $hostname = hostname    
       $comp = [adsi] "WinNT://$hostname"   
       $user = $comp.Create("User", $accountName)    
       $user.SetPassword("Password1")    
       $user.SetInfo()    
    }
    sa marche !!! en fait tout bêtement j'avais changé $hostname = hostname par $hostname = nouveau_nom

    bon puisque j'ai galéré pendant 3 jours rien que pour sa, je crois que je mérite des coups de livre powershell sur la tête.

    seul hic c'est que j'ai toujours pas trouver comment inscrit le nouvel utilisateur dans un groupe autre que manuellement sinon quand on change se session ça n'affiche rien comme autre choix



    Bon je passe à la suite, c'est à dire lister mes comptes existant sur la machine

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2010
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2010
    Messages : 15
    Points : 14
    Points
    14
    Par défaut
    Bon finalement je m'en suis sorti grâce au super bouquin et au chapître 10 sur l'ADSI que j'avais pas encore lu.

    Donc au final voila ce que j'obtient :

    Et le tout fonctionne, je créé mes comptes je les ajoutes aux groupes locaux que je veux à la création. Bon je vais pas très vite mais au moins je suis content de moi car c'est quand même mes débuts en powershell

  4. #4
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Salut,
    Citation Envoyé par maxime1452
    Bon je vais pas très vite
    T'inquiètes, une fois en poste, la vitesse tu vas y goûter
    Citation Envoyé par maxime1452
    mais au moins je suis content de moi car c'est quand même mes débuts en powershell


    Comme quoi, de poster dés qu'on a le moindre pb, n'est peut être pas une bonne pratique d'apprentissage...

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2010
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2010
    Messages : 15
    Points : 14
    Points
    14
    Par défaut
    Bonjour,

    Je m'en suis pas trop mal sorti pour la gestion des paramètres IP, j'arrive à faire vraiment ce qui est présenté sur le screenshot plus haut (partie de droite) je vous mettrai le code en ligne une fois que j'aurai tout clean en graphique car ça reste pour l'instant que du script (et j'aime bien les interfaces graphiques).

    Sinon, je cherche toujours à faire la liste des comptes utilisateurs créer sur la machine. Pour cela j'ai trouver le code dans le Livre page 532-533 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    # Get-LocalUsers.ps1
    
    param([string]$machine = '.')
    
    $connexion = [ADSI]"WinNT://$machine"
    $connexion.PSBase.Children | Where  {$_.PSBase.SchemaClassName -eq 'user'} | Foreach{$_.Name}
    J'obtient bien la liste dans le prompt mais je n'arrive pas à la garder dans un tableau ou quoi que ce soit. En fait je ne sais pas ce quel type d'info me renvoie le script pour m'afficher les users. Mon but étant de les mettres ensuite dans une grid.

    Pouvez vous m'aider svp?

  6. #6
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    As-tu essayé ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function Get-LocalUser {
     param(
      [string]$machine = '.'
     )
     $connexion = [ADSI]"WinNT://$machine"
     $connexion.PSBase.Children|
       Where  {$_.PSBase.SchemaClassName -eq 'user'}
    }
    $Users=Get-LocalUser
    $Users|% {$_.Name}

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2010
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2010
    Messages : 15
    Points : 14
    Points
    14
    Par défaut
    Je viens d'essayer, c'est génial ! Je ne savais pas du tout que l'on pouvais renvoyer une function dans une variable. Comment s'appelle cette méthode (que je comprenne sont fonctionnement )?
    Donc au final ma variable (c'est un objet?) $users reçoit Get-LocalUsers sous la forme d'un tableau d'objet si je comprend bien.

    Donc je viens d'essayer : $MaDataGridView.DataSource = $Users , mais rien ne s'affiche dans la grid (j'ai pas oublier de refresh le form après l’exécution du code de la function).

    Comment fonctionne l'envoie de donnée dans une grid?
    Pourquoi j'ai des barres de séparation de cellules et de colonne invisible mais déplaçable avec le curseur qui se rajoute dans ma grid après l'exécution du code?

  8. #8
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par maxime1452 Voir le message
    Comment s'appelle cette méthode (que je comprenne sont fonctionnement )?
    Consulte ce tuto sur le pipeline sous PS.
    Citation Envoyé par maxime1452 Voir le message
    Donc au final ma variable (c'est un objet?)
    Sous dotnet tout est objet
    Citation Envoyé par maxime1452 Voir le message
    $users reçoit Get-LocalUsers sous la forme d'un tableau d'objet si je comprend bien.
    $Users reçoit le résulat de la fonction.Ta formulation n'est pas tout à fait exact, car ceci 'reçoit' Get-LocalUsers :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $u=${function:Get-LocalUser}
    $u
    &$u
    Citation Envoyé par maxime1452 Voir le message
    Comment fonctionne l'envoie de donnée dans une grid?
    Uutilise le databinding, c'est pour ça qu'il vaut mieux, à mon avis, récupèrer une liste d'objet au lieu d'une liste de chaîne. Ainsi tu pourras afficher + propriétés d'un objet user.
    Un exemple en PS, mais avec une listbox si je me souviens bien.
    Citation Envoyé par maxime1452 Voir le message
    Pourquoi j'ai des barres de séparation de cellules et de colonne invisible mais déplaçable avec le curseur qui se rajoute dans ma grid après l'exécution du code?
    Sans le code sous les yeux, pas facile à dire, je te conseille de consulter sur MSDN la doc de ce composant, ce doit être le comportement par défaut.

  9. #9
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2010
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2010
    Messages : 15
    Points : 14
    Points
    14
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function Get-LocalUser {
     param(
      [string]$machine = '.'
     )
     $connexion = [ADSI]"WinNT://$machine"
     $connexion.PSBase.Children|
       Where  {$_.PSBase.SchemaClassName -eq 'user'}
    }
    $Users=Get-LocalUser
    Ce code fonctionne, mais je n'arrive pas à créer une fenêtre pouvant m'afficher les différents paramètres que contient ma variable $Users (sous la forme d'une DataGridView peut être ?)
    Je n'arrive pas à comprendre le phénomène de databinding. Quoique je fasse avec mes winforms je n'arrive jamais à mettre quelque chose dans un datagridview. Avez vous des exemples d'utilisation à me fournir pour que je puisse avancer?

    Merci d'avance

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Février 2008
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2008
    Messages : 252
    Points : 124
    Points
    124
    Par défaut
    Salut,

    Pour afficher le résultat de ta fonction essayes de procéder ainsi :

    [reflection.assembly]::LoadWithPartialName("System.Windows.Forms")
    $MaForm=New-Object System.Windows.Forms.Form
    $MaForm.Text="Liste des utilisateurs"
    $MaGrid=New-Object System.Windows.Forms.DataGrid
    $MaGrid.Dock=[System.Windows.Forms.DockStyle]::Fill
    $MaForm.Controls.Add($MaGrid)

    $ArrayUsers=New-object System.Collections.ArrayList
    $ArrayUsers.AddRange($(Get-LocalUser))
    $MaGrid.DataSource=$ArrayUsers
    $MaForm.ShowDialog()

    Si tu as déjà ta Form comme je peux le voir il ne te reste plus qu'a adapter .

  11. #11
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2010
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2010
    Messages : 15
    Points : 14
    Points
    14
    Par défaut
    Bonjour, j'ai testé ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    function Get-LocalUser {
     param(	[string]$machine = '.'
     		)
     $connexion = [ADSI]"WinNT://$machine"
     $connexion.PSBase.Children|
       Where  {$_.PSBase.SchemaClassName -eq 'user'}
    }
    
    
    [reflection.assembly]::LoadWithPartialName("System.Windows.Forms")
    $MaForm=New-Object System.Windows.Forms.Form
    $MaForm.Text="Liste des utilisateurs"
    $MaGrid=New-Object System.Windows.Forms.DataGrid
    $MaGrid.Dock=[System.Windows.Forms.DockStyle]::Fill
    $MaForm.Controls.Add($MaGrid)
    
    $ArrayUsers=New-object System.Collections.ArrayList
    $ArrayUsers.AddRange($(Get-LocalUser))
    $MaGrid.DataSource = $ArrayUsers
    $MaForm.ShowDialog()
    Et voici ce qu'il me donne :


    donc je comprend vraiment pas comment ce foutu truc fonctionne. Bon l'essentiel c'est qu'il affiche quelque chose dedans maintenant !!!

    Merci Sokai

Discussions similaires

  1. [AC-2013] Gestion de FTP avec wininet.dll sous windows 8
    Par Décibel dans le forum Access
    Réponses: 0
    Dernier message: 28/01/2015, 13h51
  2. Réponses: 4
    Dernier message: 21/02/2009, 17h37
  3. Réponses: 0
    Dernier message: 22/11/2007, 12h42
  4. [SGBD Libres] Conseils pour un projet de logiciel de gestion
    Par nh2 dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 30/01/2006, 08h24
  5. [Struts] Gestion de paramètres
    Par PeteMitchell dans le forum Struts 1
    Réponses: 12
    Dernier message: 28/06/2004, 09h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo