#powershell
Вопрос:
Поэтому у меня есть это для каждого цикла . Первое, что я делаю в этом цикле, — это вызываю один из своих командлетов, которые, среди прочего, называет witch
Write-Progress -Activity "Testing Progress" -Status "$($progressDisplay)% Complete." -PercentComplete $progress -CurrentOperation "$($op)"
Каждая итерация цикла занимает от 30 минут до 1 часа, но до завершения итерации индикатор выполнения исчезнет.
Я ничего не нашел о том , что их это ограничение по времени, как продлить срок.
Прогресс достигается путем добавления данных к каждому элементу в списке, который я перечитываю.
Function Add-ProgressData{
[CmdletBinding()]
Param(
[Parameter(Mandatory)]
[System.Object]$list,
[Switch]$NoCmdletEntryOutput)
Begin{}
Process{
# calcuatle what 1% progress would be for
# the given list
$OnePercent = [math]::Round(100/([double]$list.Count),2)
# calculate start value for progress
$Currentpercent = $OnePercent
# enumerate the list of add progress data for each item
foreach($i in $list) {
# add ProgressData properties to node
# and set it to the current progress data
$CurrentProgressDsiplay = [math]::Round(($Currentpercent),0)
$po = [PSCustomObject]@{
Type = "Percent"
CurrentProgress = $Currentpercent
CurrentProgressDsiplay = $CurrentProgressDsiplay
CurrentOperation = "Testing $($i.Type) $($i.string)"
}
Add-Member -InputObject $i -NotePropertyName ProgressData -NotePropertyValue $po
# Calcualte the next progress percent
$Currentpercent = $Currentpercent $OnePercent
}
}
End{}
}
Вот как эти данные выглядят для этого конкретного списка
@{Type=Percent; CurrentProgress=2.78; CurrentProgressDsiplay=3; CurrentOperation=Testing …
@{Type=Percent; CurrentProgress=5.56; CurrentProgressDsiplay=6; CurrentOperation=Testing …
@{Type=Percent; CurrentProgress=8.34; CurrentProgressDsiplay=8; CurrentOperation=Testing …
@{Type=Percent; CurrentProgress=11.12; CurrentProgressDsiplay=11; CurrentOperation=Testing …
@{Type=Percent; CurrentProgress=13.9; CurrentProgressDsiplay=14; CurrentOperation=Testing …
@{Type=Percent; CurrentProgress=16.68; CurrentProgressDsiplay=17; CurrentOperation=Testing …
@{Type=Percent; CurrentProgress=19.46; CurrentProgressDsiplay=19; CurrentOperation=Testing …
@{Type=Percent; CurrentProgress=22.24; CurrentProgressDsiplay=22; CurrentOperation=Testing …
@{Type=Percent; CurrentProgress=25.02; CurrentProgressDsiplay=25; CurrentOperation=Testing …
@{Type=Percent; CurrentProgress=27.8; CurrentProgressDsiplay=28; CurrentOperation=Testing …
@{Type=Percent; CurrentProgress=30.58; CurrentProgressDsiplay=31; CurrentOperation=Testing …
@{Type=Percent; CurrentProgress=33.36; CurrentProgressDsiplay=33; CurrentOperation=Testing …
@{Type=Percent; CurrentProgress=36.14; CurrentProgressDsiplay=36; CurrentOperation=Testing …
@{Type=Percent; CurrentProgress=38.92; CurrentProgressDsiplay=39; CurrentOperation=Testing …
@{Type=Percent; CurrentProgress=41.7; CurrentProgressDsiplay=42; CurrentOperation=Testing …
@{Type=Percent; CurrentProgress=44.48; CurrentProgressDsiplay=44; CurrentOperation=Testing …
@{Type=Percent; CurrentProgress=47.26; CurrentProgressDsiplay=47; CurrentOperation=Testing …
@{Type=Percent; CurrentProgress=50.04; CurrentProgressDsiplay=50; CurrentOperation=Testing …
@{Type=Percent; CurrentProgress=52.82; CurrentProgressDsiplay=53; CurrentOperation=Testing …
@{Type=Percent; CurrentProgress=55.6; CurrentProgressDsiplay=56; CurrentOperation=Testing …
@{Type=Percent; CurrentProgress=58.38; CurrentProgressDsiplay=58; CurrentOperation=Testing …
@{Type=Percent; CurrentProgress=61.16; CurrentProgressDsiplay=61; CurrentOperation=Testing …
@{Type=Percent; CurrentProgress=63.94; CurrentProgressDsiplay=64; CurrentOperation=Testing …
@{Type=Percent; CurrentProgress=66.72; CurrentProgressDsiplay=67; CurrentOperation=Testing …
@{Type=Percent; CurrentProgress=69.5; CurrentProgressDsiplay=70; CurrentOperation=Testing …
@{Type=Percent; CurrentProgress=72.28; CurrentProgressDsiplay=72; CurrentOperation=Testing …
@{Type=Percent; CurrentProgress=75.06; CurrentProgressDsiplay=75; CurrentOperation=Testing …
@{Type=Percent; CurrentProgress=77.84; CurrentProgressDsiplay=78; CurrentOperation=Testing …
@{Type=Percent; CurrentProgress=80.62; CurrentProgressDsiplay=81; CurrentOperation=Testing …
@{Type=Percent; CurrentProgress=83.4; CurrentProgressDsiplay=83; CurrentOperation=Testing …
@{Type=Percent; CurrentProgress=86.18; CurrentProgressDsiplay=86; CurrentOperation=Testing …
@{Type=Percent; CurrentProgress=88.96; CurrentProgressDsiplay=89; CurrentOperation=Testing …
@{Type=Percent; CurrentProgress=91.74; CurrentProgressDsiplay=92; CurrentOperation=Testing …
@{Type=Percent; CurrentProgress=94.52; CurrentProgressDsiplay=95; CurrentOperation=Testing …
@{Type=Percent; CurrentProgress=97.3; CurrentProgressDsiplay=97; CurrentOperation=Testing …
@{Type=Percent; CurrentProgress=100.08; CurrentProgressDsiplay=100; CurrentOperation=Testing …
Другие части
foreach( $g in $list) {
try {
#
# Start test case
#
$tc = Start-TestCase -name "Test" -Progress $g
….
В случае запуска теста вызывается-ProgressData -Объект $Прогресс
Function Out-ProgressData{
[CmdletBinding()]
Param(
[Parameter(Mandatory)]
[System.Object]$Object,
[Switch]$NoCmdletEntryOutput)
Begin{}
Process{
# prep variables
$progressData = $Object.ProgressData
$progress = $progressData.CurrentProgress
$progressDisplay = $progressData.CurrentProgressDsiplay
$op = $ProgressData.CurrentOperation
# Disaplyes progress
Write-Progress -Activity "Testing Progress" -Status "$($progressDisplay)% Complete." -PercentComplete $progress -CurrentOperation "$($op)"
}
End{}
}
Комментарии:
1. Как
$progress
это рассчитывается? Нам нужно больше деталей, чтобы понять, в чем может быть проблема.2. Пожалуйста, поделитесь, как
$Progress
это рассчитывается. Это может быть виновником в данном случае, как и указывает Санти.3.
Add-ProgressData
никогда не звонитWrite-Progress
? Как связаны эти две части кода?4. @deetle Так ты считаешь
Add-ProgressData | Write-Progress ...
? Это не имеет особого смысла, похоже,Add-ProgressData
ничего не выводит.5. Короче говоря, в этом нет никакой ошибки
Write-Progress
, цикл может выполняться в течение нескольких дней иPercentComplete
, если у него есть правильные данные, он будет отображаться до тех пор, пока цикл не закончится. То, с чем вы столкнулись, — это ошибка в вашем коде, которую вам нужно будет отладить, если только кто-то другой не будет достаточно любезен, чтобы отладить ее за вас. Добавление прогресса в качестве участника к объектам не только неортодоксально и довольно запутанно, но и довольно неэффективно.