2

奇妙なバグに遭遇したか、スクリプトで何かを見逃したようです。

私のスクリプトでは、偽の進行状況バー機能で進行状況を示しています。プログレスバーを模倣して、コンソールの同じ行を繰り返し更新することで機能します。以下の関数を参照してください。

# Update-Progress-Bar : v1.0 : 2013-07-29
# Displays a percentage bar. Meant to be used repeatedly to update the same console line (giving the appearance of incrementing progress).
# - $Percentage : Determines how much progress is shown on the bar.
# - $Message : The message that accompanies the progress bar.
function Update-Progress-Bar ($Percentage, $Message){
    # Save the current cursor position so we can come back later.
    $CursorPosition = $Host.UI.RawUI.CursorPosition

    # Convert the percentage into a proper progress bar.
    $ProgressBarMax = "20"
    $ProgressBarCount = [Math]::Floor([Decimal]($Percentage / 5))
    $ProgressBar = ("#" * $ProgressBarCount) + (" " * ($ProgressBarMax - $ProgressBarCount))

    # Change the format of the percentage depending on length.
    switch ($Percentage.Length){
        1 {$Percentage = "  " + $Percentage + "%"}
        2 {$Percentage = " " + $Percentage + "%"}
        default {$Percentage = $Percentage + "%"}
    }

    # Trim or pad the message as necessary.
    $MessageMaxLength = "50"
    if ($Message.Length -gt $MessageMaxLength){ $Message = $Message.Remove($MessageMaxLength) }
    else { $Message = $Message + (" " * ($MessageMaxLength - $Message.Length)) }    

    # Display our progress bar, percentage, and message.
    Write-Host -nonewline -ForeGroundColor Blue "[$ProgressBar] $Percentage"
    Write-Host " | $Message"

    # Revert back to the original cursor position.
    $Host.UI.RawUI.CursorPosition = $CursorPosition
}

なんらかの理由で、約 100 件以上のレコードを処理した後 (数千台のマシンに対して定期的にアクションを実行しているスクリプトの一部としてこれを使用しています)、進行状況バーの機能を台無しにする二重改行の実行を開始します。 . だから私はこれで終わります...

[ 126 / 2275 ] ComputerName1
[                    ]   0% | Verifying network connectivity...

[##                  ]  10% | Verifying file system access...

[####                ]  20% | Determining installed operating system...

[######              ]  30% | Executing action...

[####################] 100% | Action Completed



[ 127 / 2275 ] ComputerName2
[                    ]   0% | Verifying network connectivity...

[##                  ]  10% | Verifying file system access...

[####                ]  20% | Determining installed operating system...

[######              ]  30% | Executing action...

[####################] 100% | Action Completed

私が持っているべきとき....

[ 126 / 2275 ] ComputerName1
[####################] 100% | Action Completed

[ 127 / 2275 ] ComputerName2
[####################] 100% | Action Completed

この問題と考えられる回避策について何か考えはありますか?

編集 #1:コンソールのバッファーの高さ制限に達したときにこれが発生している可能性はありますか (出力の古い行を破棄し始めます)?

編集 #2:コンソール ウィンドウのバッファーの幅と高さを大きくすると、この問題が解消されることを確認しました。ただし、このバグを回避する方法はまだわかりません。考え?

4

1 に答える 1