Je vais vous présenter ici un exemple de barre de progression basé sur l'objet "Forms.ProgressBar". La barre de progression prend une valeur allant de 0 (vide) à 100 (plein). Bien entendu, par défaut cette valeur est à 0. La barre de progression augmente d'une valeur définit dans la propriété ".Step" en appelant la méthode ".PerformStep()". Par exemple, si la propriété ".Step" est définit à 25, il faudra appeler 4 fois la méthode ".PerformStep()" pour remplir la barre de progression.
Exemple
#Assembly.
[Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
#Ouvre une nouvelle fenêtre.
$formA = New-Object Windows.Forms.Form
$formA.FormBorderStyle = "FixedDialog"
$formA.text = "ProgressBar"
$formA.Size = New-Object Drawing.Point 300,100
#Création d'un label (Label).
$labelA1 = New-Object Windows.Forms.Label
$labelA1.Location = New-Object Drawing.Point 20,12
$labelA1.Size = New-Object System.Drawing.Size(250,16)
$labelA1.text = "Traitement en cours ..."
#Barre de progression (Progress bar).
$progressA1 = new-object System.Windows.Forms.ProgressBar
$progressA1.Location = new-object System.Drawing.Point 20,32
$progressA1.Size = new-object System.Drawing.Size(250,23)
$progressA1.Step = 1
#Timer.
#Le timer va me permettre de lancer automatiquement le traitement
#1 seconde après l'ouverture de la fenêtre.
$timer1 = new-object System.Windows.forms.timer
$timer1.Interval = 1000 #Initialement je lance le timer au bout d'une seconde.
$timer1.Enabled = $true
$timer1.add_Tick({
#Initialisation.
#Pour éviter de lancer 2 fois le traitement je change
# l'intervalle d'exécution du timer.
$timer1.Interval = 999999
#Boucle de traitement.
for ($i=0;$i -le 100;$i++)
{
#Force l'exécution des events de la fenêtre.
[System.Windows.Forms.Application]::DoEvents()
#Mise à jour de la bar de progression.
$progressA1.PerformStep()
#Traitement de votre choix.
Sleep -Milliseconds 50
}
#Arrête le timer et ferme la fenêtre.
$timer1.Stop()
$formA.Close()
})
#Attache les contrôles à la fenêtre.
$formA.controls.add($labelA1)
$formA.controls.add($progressA1)
#Lance le timer.
$timer1.Start()
#Affiche fenêtre.
$formA.ShowDialog()
#Fin.
[Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
#Ouvre une nouvelle fenêtre.
$formA = New-Object Windows.Forms.Form
$formA.FormBorderStyle = "FixedDialog"
$formA.text = "ProgressBar"
$formA.Size = New-Object Drawing.Point 300,100
#Création d'un label (Label).
$labelA1 = New-Object Windows.Forms.Label
$labelA1.Location = New-Object Drawing.Point 20,12
$labelA1.Size = New-Object System.Drawing.Size(250,16)
$labelA1.text = "Traitement en cours ..."
#Barre de progression (Progress bar).
$progressA1 = new-object System.Windows.Forms.ProgressBar
$progressA1.Location = new-object System.Drawing.Point 20,32
$progressA1.Size = new-object System.Drawing.Size(250,23)
$progressA1.Step = 1
#Timer.
#Le timer va me permettre de lancer automatiquement le traitement
#1 seconde après l'ouverture de la fenêtre.
$timer1 = new-object System.Windows.forms.timer
$timer1.Interval = 1000 #Initialement je lance le timer au bout d'une seconde.
$timer1.Enabled = $true
$timer1.add_Tick({
#Initialisation.
#Pour éviter de lancer 2 fois le traitement je change
# l'intervalle d'exécution du timer.
$timer1.Interval = 999999
#Boucle de traitement.
for ($i=0;$i -le 100;$i++)
{
#Force l'exécution des events de la fenêtre.
[System.Windows.Forms.Application]::DoEvents()
#Mise à jour de la bar de progression.
$progressA1.PerformStep()
#Traitement de votre choix.
Sleep -Milliseconds 50
}
#Arrête le timer et ferme la fenêtre.
$timer1.Stop()
$formA.Close()
})
#Attache les contrôles à la fenêtre.
$formA.controls.add($labelA1)
$formA.controls.add($progressA1)
#Lance le timer.
$timer1.Start()
#Affiche fenêtre.
$formA.ShowDialog()
#Fin.