У меня есть функция PowerShell, которая вызывает Write-Progress
. В другой функции я хотел бы получить состояние отображаемого прогресса. Можно ли запросить состояние отображаемого прогресса?Как получить информацию о ходе работы от Write-Progress?
Прецедент это:
- У меня есть функция А, который вызывает функцию B 10 раз.
- Каждый раз, когда функция A вызывает функцию B, вызывается для вызова
-PercentComplete
. - Внутри функции B, я хотел бы обновить
-PercentComplete
прогресса, но я не знаю, что представляет собой текущий процент. Я также не хочу передавать объект «Прогресс» в B, если я могу запросить отображаемый объект прогресса.
Я отметил это как powershell-v2.0, потому что это то, что моя среда.
Я пробовал посмотреть в переменной $host
, а также $host.UI
и $host.UI.RawUI
и не смог найти то, что я хочу.
Так что для кого-либо еще, что это интересно, я в конечном итоге определить эти две функции в модуле (престижность для HAL9256 для вдохновения):
function Get-Progress {
[cmdletbinding()]
param()
if (-not $global:Progress) {
$global:Progress = New-Object PSObject -Property @{
'Activity' = $null
'Status' = $null
'Id' = $null
'Completed' = $null
'CurrentOperation' = $null
'ParentID' = $null
'PercentComplete' = $null
'SecondsRemaining' = $null
'SourceId' = $null
}
}
$global:Progress
}
function Show-Progress {
[cmdletbinding()]
param()
$progress = $global:Progress
$properties = $progress.PSObject.Properties | Where {$_.MemberType -eq 'NoteProperty'}
$parameters = @{}
foreach ($property in $properties) {
if ($property.Value) {
$parameters[$property.Name] = $property.Value
}
}
if ($parameters.Count) {
Write-Progress @parameters
}
}
ooooohhhh cool. Создание нового пользовательского 'PSObject' для сохранения прогресса ... приятно! – HAL9256