Это относительно просто сделать с источниками данных PowerShell в WPK.
Вы можете получить WPK как часть PowerShellPack .
Вот довольно приличный зритель прогресса, написанный на WPK:
New-Grid -Columns 2 {
New-TextBlock -Margin 10 -TextWrapping Wrap -ZIndex 1 -HorizontalAlignment Left -FontWeight Bold -FontSize 12 -DataBinding @{
"Text" = "LastProgress.Activity"
}
New-TextBlock -Margin 10 -ZIndex 1 -TextWrapping Wrap -Column 1 -VerticalAlignment Bottom -HorizontalAlignment Right -FontStyle Italic -FontSize 12 -DataBinding @{
"Text" = "LastProgress.StatusDescription"
}
New-ProgressBar -ColumnSpan 2 -MinHeight 250 -Name ProgressPercent -DataBinding @{
"Value" = "LastProgress.PercentComplete"
}
} -DataContext {
Get-PowerShellDataSource -Script {
foreach ($n in 1..100) {
Write-Progress "MajorProgress" "MinorProgress" -PercentComplete $n
Start-Sleep -Milliseconds 250
}
}
} -AsJob
PowerShellDataSource возвращает объект со списком всех выходных данных для данного потока и последнего элемента, выведенного в данном потоке (т.е. Progress и LastProgress). Чтобы отобразить индикатор выполнения, нам нужно привязать свойство LastProgress.
Первая половина кода объявляет индикатор выполнения. При использовании параметра -DataBinding панели TextBlocks и Progress автоматически синхронизируются с контекстом данных. Контекст данных может быть объявлен на этом уровне (как показано в примере) или может находиться в родительском элементе управления.
DataContext в этом примере представляет собой простой сценарий PowerShell, который использует Write-Progress для вывода тестового сообщения каждую четверть секунды, но вы можете использовать любой сценарий, который вам нравится.
Надеюсь, это поможет.