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 :

Message box sur tous les PC d'un domaine


Sujet :

Scripts/Batch

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Technicien de proximité
    Inscrit en
    Décembre 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien de proximité
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2014
    Messages : 7
    Points : 5
    Points
    5
    Par défaut Message box sur tous les PC d'un domaine
    Bonjour à tous,

    Je souhaite créer un script PS afin d'envoyer un MessageBox sur toutes les machines de mon réseau, voici mon code :

    Code powershell : 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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
     
     
    [void] [reflection.assembly]::LoadWithPartialName("System.Windows.Forms")
    [void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
     
    $FormMsg = New-Object System.Windows.Forms.Form 
    $FormMsg.Text = "Outil d'envoi de messages"
    $FormMsg.Size = New-Object System.Drawing.Size(300,200) 
    $FormMsg.StartPosition = "CenterScreen"
     
    $FormMsg.KeyPreview = $True
    $FormMsg.Add_KeyDown({if ($_.KeyCode -eq "Enter") 
        {$x=$objTextBox.Text;$FormMsg.Close()}})
    $FormMsg.Add_KeyDown({if ($_.KeyCode -eq "Escape") 
        {$FormMsg.Close()}})
     
    $OKButton = New-Object System.Windows.Forms.Button
    $OKButton.Location = New-Object System.Drawing.Size(75,120)
    $OKButton.Size = New-Object System.Drawing.Size(75,23)
    $OKButton.Text = "OK"
    $OKButton.Add_Click({$x=$objTextBox.Text;$FormMsg.Close()})
    $FormMsg.Controls.Add($OKButton)
     
    $CancelButton = New-Object System.Windows.Forms.Button
    $CancelButton.Location = New-Object System.Drawing.Size(150,120)
    $CancelButton.Size = New-Object System.Drawing.Size(75,23)
    $CancelButton.Text = "Annuler"
    $CancelButton.Add_Click({$FormMsg.Close()})
    $FormMsg.Controls.Add($CancelButton)
     
    $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 = "Message :"
    $FormMsg.Controls.Add($objLabel) 
     
    $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) 
    $FormMsg.Controls.Add($objTextBox)
     
    $FormMsg.Topmost = $True
     
    $FormMsg.Add_Shown({$FormMsg.Activate()})
    [void] $FormMsg.ShowDialog()
     
    $msg = $objTextBox.Text
     
    $computer = Get-ADComputer -Filter * | select Name | where Name -Like "machine*"
     
    $computersession = New-PSSession -ComputerName $computer.Name
     
    Invoke-Command -Session $computersession -ScriptBlock { [void][reflection.assembly]::LoadWithPartialName("System.Windows.Forms") }
    Invoke-Command -Session $computersession -ScriptBlock { [System.Windows.Forms.MessageBox]::Show($msg,"Information",[System.Windows.Forms.MessageBoxButtons]::OK,[System.Windows.Forms.MessageBoxIcon]::Asterisk)}
     
    Remove-PSSession -ComputerName $computer.Name




    Mais mon script tombe en erreur sur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Impossible de convertir l'argument «buttons» (valeur «Asterisk») de «Show» en type «System.Windows.Forms.MessageBoxButtons»: «Impossible de convertir la valeur «Asterisk» en type «
    System.Windows.Forms.MessageBoxButtons». Erreur: «Invalid cast from 'System.Windows.Forms.MessageBoxIcon' to 'System.Windows.Forms.MessageBoxButtons'.»»
        + CategoryInfo          : NotSpecified: (:) [], MethodException
        + FullyQualifiedErrorId : MethodArgumentConversionInvalidCastArgument
        + PSComputerName        : machine1

    Je n'arrive pas à comprendre pourquoi, pourriez vous m'aider svp ?

  2. #2
    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,
    je suppose que le parseur ne tient pas compte de la variable $msg qui n'existe pas dans la session distante, et du coup décale la valeur des paramètres. Mais je ne suis pas certains que ce soit tout à fait ça.
    En utilisant la portée Using: le code progresse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Invoke-Command -computer localhost -ScriptBlock {
     [void][reflection.assembly]::LoadWithPartialName("System.Windows.Forms")
     [System.Windows.Forms.MessageBox]::Show($using:msg,"Information","OK","Asterisk")
    }
    Mais rencontre la limite d'une session distante qui ne dispose pas de handle à fournir à l'API graphique :
    Exception lors de l'appel de «Show» avec «4» argument(s): «
    L'affichage d'une boîte de dialogue modale ou d'un formulaire lorsque l'application ne s'exécute pas en mode UserInteractive n'est pas une opération valide.
    Spécifiez le style ServiceNotification ou DefaultDesktopOnly pour afficher une notification à partir d'une application de service.»
    + CategoryInfo : NotSpecified: (: ) [], MethodInvocationException
    + FullyQualifiedErrorId : InvalidOperationException
    + PSComputerName : localhost
    Par exemple on peut y exécuter notepad.exe, mais aucune fenêtre ne s'affichera.

    Enfin et surtout, comme le dit le message d'erreur, le contexte d'exécution du code PS distant ne peut communiquer avec la session de l'utilisateur.
    Donc la direction que tu prends aboutie à un cul de sac.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Technicien de proximité
    Inscrit en
    Décembre 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien de proximité
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2014
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Merci pour ta réponse !!!

    Dans ce cas là, qu'elle serait l'alternative pour envoyer un message sur tous les pc d'un domaine ?

  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
    Recherche avec notre faux ami "windows seven net send", car cela va dépendre de ton parc.

Discussions similaires

  1. TXMLDocument, ne fonctionne pas sur tous les PC
    Par Neilos dans le forum C++Builder
    Réponses: 4
    Dernier message: 05/10/2005, 22h33
  2. [JDBC]Boucle sur tous les éléments du ResultSet
    Par Terminator dans le forum JDBC
    Réponses: 1
    Dernier message: 22/09/2005, 19h30
  3. Recherche sur tous les fichiers d'un projet
    Par Kaorichan dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 28/04/2005, 11h28

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