Na školení PowerShellu se jeden z kolegů ptal, jak udělal /\/\o\/\/ progress bar při instalaci PowerTab. Pro ty z vás, co jej neznají (myslím progress bar :) - jedná se o tento pruh
který je umístěn v horní části okna PowerShellu. Při delším načítání (zapisování, kopírování, ...) dat je to vhodná pomůcka pro uživatele. V každém okamžiku ví, kde přesně se v čase nachází. Abyste nemuseli něco takového sami vymýšlet, je přímo v PowerShellu cmdlet Write-Progress. Pojďme se podívat, jak funguje.
Write-Progress má dva povinné parametry:
- activity - řetězec, který říká, jaká aktivita probíhá (na obrázku výše je to Loading records ...)
- status - popisuje konkrétní (aktuální) stav aktivity; v našem případě 136 of 633.
for($i=0; $i -le 50; $i++) {
Start-Sleep -m 100
Write-Progress "Ukazuji promennou..." $i }
Start-Sleep -m 100
Write-Progress "Ukazuji promennou..." $i }
Výsledkem je následují výstup
Takovýto základní ukazatel nám asi ve většině případů nebude stačit. Je dobré dát uživateli vědět, jak dlouho bude ještě čekat na dokončení operace. K tomu slouží další dva parametry (musí se uvádět jejich jméno)
- percentComplete - ukazuje formou "teploměru", kolik procent je již hotovo (viz úplně první obrázek)
- secondsRemaining - počet vteřin do skončení operace
for($i=0; $i -le 10; $i++) {
Start-Sleep 1
$sec = 10-$i
Write-Progress "Ukazuji promennou..." $i -secondsRemaining $sec }
Start-Sleep 1
$sec = 10-$i
Write-Progress "Ukazuji promennou..." $i -secondsRemaining $sec }
Ve smyčce for zvyšujeme hodnotu proměnné i do deseti a zároveň zobrazujeme počet vteřin zbývajících do konce operace.
Pro úplné popsání Write-Progress nám ještě chybí následující parametry
- id - specifikuje jedinečné ID progress baru. Lze použít pro zpětné volání.
- currentOperation - popisuje aktuální operaci. Je více specifický než status.
- parentId - aktivita nadřazená té aktuální
- completed - standardně false, pokud je true nezobrazuje se progress bar
- sourceId - zdroj záznamu
Write-Progress můžete ovládat několika následujícími parametry:
- $ProgressPreference - může nabývat hodnot SilentlyContinue, Continue, Stop, Inquire. Pokud nastavíte SilentlyContinue, progress bar nebude vidět (stejné jako kdybyste pro každý nastavili -completed = $true).
- $host.PrivateData.get_Progress*, $host.PrivateData.Progress* - nastavují/zobrazují barvu progress baru.
První obrázek v tomto článku vznikl, při načítání dat z databáze Lotus Notes. V současné době používám novější verzi, která navíc zobrazuje data načítaného záznamu
Write-Progress -Activity "Loading records..." -Status "$i of $DomNumOfDocs" -id 1 -CurrentOperation "$LNlastname" -PercentComplete ($i/$DomNumOfDocs*100)
Žádné komentáře:
Okomentovat