Question Problème Powershell windows.form

Plus d'informations
il y a 1 an 1 mois - il y a 1 an 1 mois #33215 par reise62
Salut à tous.
J'ai un script powershell qui s'exécutait correctement (interface graphique, barre de progression, création des dossiers, etc...) quand je cliquais sur le bouton.
Suite à un besoin, je souhaite que le script s'éxécute automatiquement dès qu'il est appelé par le script précédent.
Je vois bien sur les actions sont bien réalisées mais rien ne s'affiche.
Je ne vois vraiment pas d'où peut venir le problème.
Merci pour l'aide ;)
# Charger le module Windows Forms
    Add-Type -AssemblyName System.Windows.Forms
    Add-Type -AssemblyName System.Drawing

# Définir les variables
    $Dir00 = "C:\IT-TOOLS\Start\Common"
    $Dir05 = "C:\IT-TOOLS\Start\Sources"
    $Dir06 = "C:\TempIT"
    $Version = "v2.0.0"

# Créer une nouvelle fenêtre
    $Form = New-Object System.Windows.Forms.Form
    $Form.Text = "IT-Tools© - $Version"
    $Form.Size = New-Object System.Drawing.Size(517, 130)
    $Form.FormBorderStyle = [System.Windows.Forms.FormBorderStyle]::FixedSingle
    $Form.StartPosition = "CenterScreen"
    $Form.MaximizeBox = $false
    $Form.MinimizeBox = $false

# Créer un groupe de boutons pour Folder
    $PreconfigGroupBox = New-Object System.Windows.Forms.GroupBox
    $PreconfigGroupBox.Location = New-Object System.Drawing.Point(6, 5)
    $PreconfigGroupBox.Size = New-Object System.Drawing.Size(490, 50)
    $PreconfigGroupBox.Text = "Préconfiguration"
    $Form.Controls.Add($PreconfigGroupBox)

# Création d'une barre de progression
    $progressBar = New-Object System.Windows.Forms.ProgressBar
    $progressBar.Location = New-Object System.Drawing.Point(6, 17)
    $progressBar.Size = New-Object System.Drawing.Size(480, 25)
    $progressBar.Style = [System.Windows.Forms.ProgressBarStyle]::Continuous
    $PreconfigGroupBox.Controls.Add($ProgressBar)

# Définition de la fonction Create-Folder
function Create-Folder {
# Mettre à jour le texte de l'étiquette C:\TempIT
    $PreconfigGroupBox.Text = "Création du dossier C:\TempIT en cours..."
    $progressBar.Value = 0
        New-Item -Path "C:\TempIT" -ItemType Directory | Out-Null
            Start-Sleep -Seconds 1        
# Mettre à jour le texte de l'étiquette C:\TempIT\BIN
    $PreconfigGroupBox.Text = "Création du dossier C:\TempIT\BIN en cours..."
    $progressBar.Value = 25
        New-Item -Path "C:\TempIT\BIN" -ItemType Directory | Out-Null
            Start-Sleep -Seconds 1        
# Mettre à jour le texte de l'étiquette StartLayout.xml            
    $PreconfigGroupBox.Text = "Copie du fichier StartLayout.xml en cours..."
    $progressBar.Value = 50
        Copy-Item -Path "$Dir05\StartLayout.xml" -Destination "C:\TempIT\BIN"
            Start-Sleep -Seconds 1            
# Mettre à jour le texte de l'étiquette syspin.exe                
    $PreconfigGroupBox.Text = "Copie du fichier syspin.exe en cours..."
    $progressBar.Value = 65
        Copy-Item -Path "$Dir05\syspin.exe" -Destination "C:\TempIT\BIN"
            Start-Sleep -Seconds 1            
# Mettre à jour le texte de l'étiquette W11Dark.jpg            
    $PreconfigGroupBox.Text = "Copie du fichier W11Dark.jpg en cours..."
    $progressBar.Value = 85
        Copy-Item -Path "$Dir05\W11Dark.jpg" -Destination "C:\users\$env:username\Pictures"
            Start-Sleep -Seconds 1    
# Mettre à jour le texte de l'étiquette Ico    
    $PreconfigGroupBox.Text = "Copie du dossier Ico en cours..."
    $progressBar.Value = 100
        Copy-Item -Path "$Dir05\Ico" -Destination "$Dir06" -Recurse
            Start-Sleep -Seconds 1

# Fermer la fenêtre
    $Form.Close()

# Libérer les ressources de la fenêtre
    $Form.Dispose()

# Appel script suivant
    powershell -WindowStyle Hidden -file "$Dir00\02_Winget.ps1"
}

# Appel de la fonction
    Create-Folder

# Affichage de la fenêtre
    $Form.ShowDialog()
Dernière édition: il y a 1 an 1 mois par Laurent Dardenne. Raison: Balise code

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

Plus d'informations
il y a 1 an 1 mois #33224 par Laurent Dardenne
Salut,
>>je souhaite que le script s'exécute automatiquement dès qu'il est appelé par le script précédent.
Quel est le code d'appel du script appelant ? comment s'exécute-t-il ?

Tutoriels PowerShell

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

Plus d'informations
il y a 1 an 1 mois #33225 par reise62
Réponse de reise62 sur le sujet Problème Powershell windows.form
Bonjour Laurent,
Voici le script appelant : 
[powershell]# Charger le module Windows Forms
    Add-Type -AssemblyName System.Windows.Forms
    Add-Type -AssemblyName System.Drawing

# Définir les variables
    $Dir00 = "C:\IT-TOOLS\Start\Common"
    $Version = "v2.0.0"

# Créer une nouvelle fenêtre
    $Form = New-Object System.Windows.Forms.Form
    $Form.Text = "IT-Tools© - $Version"
    $Form.Size = New-Object System.Drawing.Size(517, 195)
    $Form.FormBorderStyle = [System.Windows.Forms.FormBorderStyle]::FixedSingle
    $Form.StartPosition = "CenterScreen"
    $Form.MaximizeBox = $false
    $Form.MinimizeBox = $false

# Créer un groupe de boutons pour Disclaimer
    $DisclaimerGroupBox = New-Object System.Windows.Forms.GroupBox
    $DisclaimerGroupBox.Location = New-Object System.Drawing.Point(6, 3)
    $DisclaimerGroupBox.Size = New-Object System.Drawing.Size(490, 150)
    $DisclaimerGroupBox.Text = "IT-Tools / Disclaimer"
    $Form.Controls.Add($DisclaimerGroupBox)
    
# Ajouter une zone de texte fixe avec ascenseur
    $TextBox1 = New-Object System.Windows.Forms.TextBox
    $TextBox1.Location = New-Object System.Drawing.Point(6, 20)
    $TextBox1.Size = New-Object System.Drawing.Size(480, 90)
    $TextBox1.Multiline = $true
    $TextBox1.ScrollBars = "Vertical"
    $TextBox1.ReadOnly = $true
    $TextBox1.TextAlign = "Center"
    $TextBox1.Font = New-Object System.Drawing.Font("Calibri", 10, [System.Drawing.FontStyle]::Bold)
    $TextBox1.Text = "DISCLAIMER
TEXTE du Disclaimer"
    $DisclaimerGroupBox.Controls.Add($TextBox1)

# Ajouter un bouton pour accepter le disclaimer
    $AcceptButton = New-Object System.Windows.Forms.Button
    $AcceptButton.BackColor = [System.Drawing.Color]::FromArgb(64, 64, 64)
    $AcceptButton.ForeColor = [System.Drawing.Color]::FromArgb(240, 240, 240)
    $AcceptButton.Location = New-Object System.Drawing.Point(6, 120)
    $AcceptButton.Size = New-Object System.Drawing.Size(230, 25)
    $AcceptButton.Text = "Accepter le disclaimer"
    $AcceptButton.Font = New-Object System.Drawing.Font("Calibri",11,[System.Drawing.FontStyle]::Bold)
    $AcceptButton.FlatStyle = [System.Windows.Forms.FlatStyle]::Flat
# Définition de la couleur de fond d'origine du bouton
    $AcceptButton.Tag = $AcceptButton.BackColor
# Définition de l'événement MouseEnter (souris passe dessus)
$AcceptButton.Add_MouseEnter({
    $AcceptButton.BackColor = "Green" # Changer la couleur
})
# Définition de l'événement MouseLeave (souris quitte)
$AcceptButton.Add_MouseLeave({
    $AcceptButton.BackColor = $AcceptButton.Tag # Revenir à la couleur de fond d'origine
})
# Fonction du bouton
    $AcceptButton.Add_Click({
        $Form.Hide()
            powershell -file "$Dir00\01_Folder.ps1"
        $Form.Dispose()
})
    $DisclaimerGroupBox.Controls.Add($AcceptButton)

# Ajouter un bouton pour refuser le disclaimer
    $RefuseButton = New-Object System.Windows.Forms.Button
    $RefuseButton.BackColor = [System.Drawing.Color]::FromArgb(64, 64, 64)
    $RefuseButton.ForeColor = [System.Drawing.Color]::FromArgb(240, 240, 240)
    $RefuseButton.Location = New-Object System.Drawing.Point(250, 121)
    $RefuseButton.Size = New-Object System.Drawing.Size(230, 23)
    $RefuseButton.Text = "Refuser le disclaimer"
    $RefuseButton.Font = New-Object System.Drawing.Font("Calibri",11,[System.Drawing.FontStyle]::Bold)
    $RefuseButton.FlatStyle = [System.Windows.Forms.FlatStyle]::Flat
# Définition de la couleur de fond d'origine du bouton
    $RefuseButton.Tag = $RefuseButton.BackColor
# Définition de l'événement MouseEnter (souris passe dessus)
$RefuseButton.Add_MouseEnter({
    $RefuseButton.BackColor = "Brown" # Changer la couleur
})
# Définition de l'événement MouseLeave (souris quitte)
$RefuseButton.Add_MouseLeave({
    $RefuseButton.BackColor = $RefuseButton.Tag # Revenir à la couleur de fond d'origine
})
# Fonction du bouton
    $RefuseButton.Add_Click({
        $TextBox1.Text = "Vous avez refusé le disclaimer."
            Start-Sleep -Seconds 3
        $Form.Close()
})
# Ajout du bouton au groupe de contrôles
    $DisclaimerGroupBox.Controls.Add($RefuseButton)

# Afficher la fenêtre
    $Form.ShowDialog()
[/powershell]
Merci pour ton aide ;)

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

Plus d'informations
il y a 1 an 1 mois #33228 par Laurent Dardenne
Pour ceci :
   $Form.Hide()
          powershell -file "$Dir00\01_Folder.ps1"
   $Form.Dispose()
Quel est l'intérêt de créer un autre process ? pourquoi ne pas utiliser le source :
. "$Dir00\01_Folder.ps1"

As-tu vérifier si la fenêtre du second process n'est pas masquée ?
Je n'ai pas testé ton code, mais je ne suis pas certain que la libération d'une WinForm ( $Form.Dispose() ) au sein d'un de ses eventhandler soit correcte ...

Tutoriels PowerShell

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

Plus d'informations
il y a 1 an 1 mois #33229 par reise62
Réponse de reise62 sur le sujet Problème Powershell windows.form
Effectivement, je vais tester en incluant le code du script dans celui là.
Je reviendrai ici pour te tenir informé.
Merci pour la suggestion ;)

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

Plus d'informations
il y a 1 an 1 mois #33230 par Laurent Dardenne
>> je vais tester en incluant le code du script dans celui là
Si les deux scripts doivent rester autonome attention s'ils utilisent la même portée, car tu risques d'écraser des variables de même nom.

Il faut aussi savoir si le comportement global de ton traitement doit être synchrone ou pas. L'usage d'un second process est similaire à de l'asynchrone.

Tutoriels PowerShell

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

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