Powershell Kopiervorgang und StatusBar mit hochlaufender Prozentzahl
Hallo zusammen.
Ich will ein Programm schreiben das Dateien kopiert. In der Statusbar soll die Anzahl der bereits kopierten Dateien angezeigt werden. An welcher Stelle muss ich den Kopiervorgang einbauen damit er abgearbeitet wird?
Kann mir hier jemand helfen.
Danke.
HighSpeed1
Ich will ein Programm schreiben das Dateien kopiert. In der Statusbar soll die Anzahl der bereits kopierten Dateien angezeigt werden. An welcher Stelle muss ich den Kopiervorgang einbauen damit er abgearbeitet wird?
function Get-InstallPrg
{
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing
$DialogBoxSizeX = 500
$DialogBoxSizeY = 300
$form = New-Object System.Windows.Forms.Form
$form.Text = "Text"
$form.Size = New-Object System.Drawing.Size($DialogBoxSizeX,$DialogBoxSizeY)
$form.MinimumSize = New-Object System.Drawing.Size($DialogBoxSizeX,$DialogBoxSizeY)
$form.MaximumSize = New-Object System.Drawing.Size($DialogBoxSizeX,$DialogBoxSizeY)
$form.Icon = $Icon
$form.StartPosition = 'CenterScreen'
# --- Statusbar ---
$StatusBarText = "Anzahl kopierte Dateien:"
$StatusBar = New-Object System.Windows.Forms.StatusBar
$StatusBar.Dock = "bottom"
$Form.Controls.Add($StatusBar)
# Code ab hier
$Counter = 0
0..10 | foreach {
#Hier soll kopiert werden und Status verändert werden
$StatusBar.Text = $StatusBarText + $_
$Form.Controls.Add($StatusBar)
sleep -Milliseconds 100
}
# Bis hier
$form.Topmost = $true
$form.ShowDialog()
}
Get-InstallPrg
Kann mir hier jemand helfen.
Danke.
HighSpeed1
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 52975218870
Url: https://administrator.de/contentid/52975218870
Ausgedruckt am: 21.11.2024 um 21:11 Uhr
8 Kommentare
Neuester Kommentar
Here you go:
Powershell GUI bleibt während einer While schleife hängen...
Powershell progressbar AND multitask
Gruß sid.
Powershell GUI bleibt während einer While schleife hängen...
Powershell progressbar AND multitask
Add-Type -A System.Windows.Forms
# synchronized Hashtable für den Austausch von Daten zwischen den Threads erstellen
$ht = [hashtable]::Synchronized(@{})
# Powershell thread erstellen
$ps = [powershell]::Create()
# die Hashtable als Variable "ht" dem Powershell-Runspace hinzufügen
$ps.Runspace.SessionStateProxy.SetVariable("ht",$ht)
#form erzeugen
$form = New-Object System.Windows.Forms.Form -P @{
ClientSize = '200,80'
Text = "Copystatus"
}
# button erzeugen
$btn = New-Object System.Windows.Forms.Button -P @{
Text = "Start copy"
Location = '10,20'
Size = '180,30'
Anchor = 'Bottom,Left,Right'
# aktion wenn auf den Button geklickt wird
add_Click = {
# dem separaten Powershell Thread ein Skript hinzufügen
$ps.AddScript({
# hier statt der Schleife die Aktionen einfügen und Updates an die Statusbar schicken:
1..10 | %{
$ht.statusbar.Text = "Datei $_"
sleep -Milliseconds 500
}
$ht.statusbar.Text = "Fertig"
})
$ps.BeginInvoke()
}
}
$statusbar = [System.Windows.Forms.StatusBar]@{
Dock = "Bottom"
}
$ht.statusbar = $statusbar
$form.Controls.AddRange(@($statusbar,$btn))
[void]$form.ShowDialog()
$ps.Dispose()
Gruß sid.
Siehe ergänztes ganz einfaches Bsp oben.
Zitat von @HighSpeed1:
Mein Problem ist das ich kein Startereignis habe. Sobald das Fenster aufgeht soll es losgehen.
Nimmst du halt einfach das Load- oder Shown-Event der Form das startet sobald die Form offen ist.Mein Problem ist das ich kein Startereignis habe. Sobald das Fenster aufgeht soll es losgehen.
Add-Type -A System.Windows.Forms
$ht = [hashtable]::Synchronized(@{})
$ps = [powershell]::Create()
$ps.Runspace.SessionStateProxy.SetVariable("ht",$ht)
$form = New-Object System.Windows.Forms.Form -P @{
ClientSize = '200,80'
Text = "Copystatus"
add_Shown = {
$ps.AddScript({
1..10 | %{
$ht.statusbar.Text = "Datei $_ von 10 wird kopiert."
sleep -Milliseconds 500
}
$ht.statusbar.Text = "Fertig"
})
$ps.BeginInvoke()
}
}
$statusbar = [System.Windows.Forms.StatusBar]@{
Dock = "Bottom"
}
$ht.statusbar = $statusbar
$form.Controls.Add($statusbar)
[void]$form.ShowDialog()
$ps.Dispose()
RTFM => Form.Load Ereignis
Zitat von @HighSpeed1:
Wo kann man eigentlich eine vollständige Liste der Befehle .add_xxx finden?
Danke für deine Hilfe.
In der .NET System.Windows.Forms Doku die "Ereignisse" für jedes Control (Links "Ereignisse" auswählen)Wo kann man eigentlich eine vollständige Liste der Befehle .add_xxx finden?
Danke für deine Hilfe.
Aber Achtung der MS Übersetzer übersetzt die Ereignisse teilweise ins Deutsche du musst aber die englischen Bezeichnungen nehmen, also die Seite besser auf Englisch umstellen.
Das "add_" ist nur ein Prefix von Powershell das man für das Ansprechen der Events benutzen muss, die Doku ist aber trotzdem die gleiche weil dies die selben Objekte sind.