PowerShell: индикатор выполнения записи просто исчезает

#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 , если у него есть правильные данные, он будет отображаться до тех пор, пока цикл не закончится. То, с чем вы столкнулись, — это ошибка в вашем коде, которую вам нужно будет отладить, если только кто-то другой не будет достаточно любезен, чтобы отладить ее за вас. Добавление прогресса в качестве участника к объектам не только неортодоксально и довольно запутанно, но и довольно неэффективно.