Question
Refresh powershell running process
- twenty94470
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 1
- Remerciements reçus 0
il y a 9 ans 10 mois #21830
par twenty94470
Refresh powershell running process a été créé par twenty94470
Bonjour à tous,
Mon code permet d'afficher une fenêtre qui liste les applications qui tournent pouvant bloquer l'installation d'une autre application. On demande a nos utilisateurs de fermer eux même leurs applications pour ne pas qu'ils perdent leur travail en cours : Ils ont alors une fenêtre leur indiquant quel application fermer.
La détection des applications fonctionne bien mais je me heurte au problème de rafraîchissement de mon label qui contient les applications.
J'utilise une boucle while qui affiche ma fenêtre form tant qu'il y a un processus qui me bloque une installation. Mais lorsque j'affiche cette fenêtre via \"$Form.ShowDialog() | out-null\" plus aucun code ne s’exécute par la suite. La boucle est comme en pause attendant une action depuis la fenêtre form.
J'ai rajouté un bouton \" Ressayer\" qui fonctionne également, celui ci essaie de quitter le form mais il réapparaît si un processus est toujours en train de tourner.
Mon but est soit de supprimer ce bouton \" réessayer\" et que le form se rafraîchisse toutes les 5 secondes par exemple ou bien s'il est possible de simuler l'appuie sur mon bouton ressayer toutes les 5 secondes.
Merci pour votre aide.
[code:1]Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing
$timer1 = New-Object System.Windows.Forms.Timer
$form = New-Object System.Windows.Forms.Form
$form.Text = \"Process running\"
$form.Size = New-Object System.Drawing.Size(350,225)
$form.StartPosition = \"CenterScreen\"
$Form.AutoSize = $True
$Form.AutoSizeMode = \"GrowAndShrink\"
$Form.MinimizeBox = $False
$Form.MaximizeBox = $False
$Form.WindowState = \"Normal\"
$Form.ShowInTaskbar = $False
#$Icon = New-Object system.drawing.icon (\"C:\Users\XXXX\Desktop\Nouveau dossier (2)\USB.ICO\"«»)
$Form.Icon = $Icon
$form.ControlBox = $False
$form.Topmost = $True
$CancelButton = New-Object System.Windows.Forms.Button
$CancelButton.Location = New-Object System.Drawing.Point(245,165)
$CancelButton.Size = New-Object System.Drawing.Size(75,23)
$CancelButton.Text = \"Reessayer\"
$CancelButton.DialogResult = [System.Windows.Forms.DialogResult]::Cancel
$form.CancelButton = $CancelButton
$form.Controls.Add($CancelButton)
$label = New-Object System.Windows.Forms.Label
$label.Location = New-Object System.Drawing.Point(10,10)
$label.Size = New-Object System.Drawing.Size(350,15)
$label.Text = \"Installation de SalfesForces\"
$form.Controls.Add($label)
$label = New-Object System.Windows.Forms.Label
$label.Location = New-Object System.Drawing.Point(10,30)
$label.Size = New-Object System.Drawing.Size(350,25)
$label.Text = \"Enregistrez votre travail et fermez les programmes suivants pour continuer l'installation :\"
$form.Controls.Add($label)
$label = New-Object System.Windows.Forms.Label
$label.Location = New-Object System.Drawing.Point(10,60)
$label.Size = New-Object System.Drawing.Size(350,150)
$label.Text = \"\"
$form.Controls.Add($label)
Function Stop-RunningApplications {
Param(
[parameter(Mandatory = $true)]
[string]$ProcessName
)
$processName = $processName -split(\",\"«») -join (\"|\"«»)
While (Get-Process | Where { $_.ProcessName -match $processName } -ErrorAction SilentlyContinue | Select Description -ExpandProperty Description | Select -Unique -OutVariable runningProcess) {
$Label.text = \"`n`n - \" + ($runningProcess -join \"`n - \"«»)
[array]$matchedProcess = (([array]$matchedProcess + [array]$runningProcess) | Select -Unique)
$Form.ShowDialog() | out-null
If ($matchedProcess -ne $null) {
Set-Variable -Name matchedProcess -Value $MatchedProcess -Scope Script
}
}
}
Stop-RunningApplications -ProcessName \"iexplore,word,excel,powerpnt,outlook,calc,chrome\"
[/code:1]
Mon code permet d'afficher une fenêtre qui liste les applications qui tournent pouvant bloquer l'installation d'une autre application. On demande a nos utilisateurs de fermer eux même leurs applications pour ne pas qu'ils perdent leur travail en cours : Ils ont alors une fenêtre leur indiquant quel application fermer.
La détection des applications fonctionne bien mais je me heurte au problème de rafraîchissement de mon label qui contient les applications.
J'utilise une boucle while qui affiche ma fenêtre form tant qu'il y a un processus qui me bloque une installation. Mais lorsque j'affiche cette fenêtre via \"$Form.ShowDialog() | out-null\" plus aucun code ne s’exécute par la suite. La boucle est comme en pause attendant une action depuis la fenêtre form.
J'ai rajouté un bouton \" Ressayer\" qui fonctionne également, celui ci essaie de quitter le form mais il réapparaît si un processus est toujours en train de tourner.
Mon but est soit de supprimer ce bouton \" réessayer\" et que le form se rafraîchisse toutes les 5 secondes par exemple ou bien s'il est possible de simuler l'appuie sur mon bouton ressayer toutes les 5 secondes.
Merci pour votre aide.
[code:1]Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing
$timer1 = New-Object System.Windows.Forms.Timer
$form = New-Object System.Windows.Forms.Form
$form.Text = \"Process running\"
$form.Size = New-Object System.Drawing.Size(350,225)
$form.StartPosition = \"CenterScreen\"
$Form.AutoSize = $True
$Form.AutoSizeMode = \"GrowAndShrink\"
$Form.MinimizeBox = $False
$Form.MaximizeBox = $False
$Form.WindowState = \"Normal\"
$Form.ShowInTaskbar = $False
#$Icon = New-Object system.drawing.icon (\"C:\Users\XXXX\Desktop\Nouveau dossier (2)\USB.ICO\"«»)
$Form.Icon = $Icon
$form.ControlBox = $False
$form.Topmost = $True
$CancelButton = New-Object System.Windows.Forms.Button
$CancelButton.Location = New-Object System.Drawing.Point(245,165)
$CancelButton.Size = New-Object System.Drawing.Size(75,23)
$CancelButton.Text = \"Reessayer\"
$CancelButton.DialogResult = [System.Windows.Forms.DialogResult]::Cancel
$form.CancelButton = $CancelButton
$form.Controls.Add($CancelButton)
$label = New-Object System.Windows.Forms.Label
$label.Location = New-Object System.Drawing.Point(10,10)
$label.Size = New-Object System.Drawing.Size(350,15)
$label.Text = \"Installation de SalfesForces\"
$form.Controls.Add($label)
$label = New-Object System.Windows.Forms.Label
$label.Location = New-Object System.Drawing.Point(10,30)
$label.Size = New-Object System.Drawing.Size(350,25)
$label.Text = \"Enregistrez votre travail et fermez les programmes suivants pour continuer l'installation :\"
$form.Controls.Add($label)
$label = New-Object System.Windows.Forms.Label
$label.Location = New-Object System.Drawing.Point(10,60)
$label.Size = New-Object System.Drawing.Size(350,150)
$label.Text = \"\"
$form.Controls.Add($label)
Function Stop-RunningApplications {
Param(
[parameter(Mandatory = $true)]
[string]$ProcessName
)
$processName = $processName -split(\",\"«») -join (\"|\"«»)
While (Get-Process | Where { $_.ProcessName -match $processName } -ErrorAction SilentlyContinue | Select Description -ExpandProperty Description | Select -Unique -OutVariable runningProcess) {
$Label.text = \"`n`n - \" + ($runningProcess -join \"`n - \"«»)
[array]$matchedProcess = (([array]$matchedProcess + [array]$runningProcess) | Select -Unique)
$Form.ShowDialog() | out-null
If ($matchedProcess -ne $null) {
Set-Variable -Name matchedProcess -Value $MatchedProcess -Scope Script
}
}
}
Stop-RunningApplications -ProcessName \"iexplore,word,excel,powerpnt,outlook,calc,chrome\"
[/code:1]
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.038 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Refresh powershell running process