Создание полос загрузки в PowerShell: символы ASCII, Windows Forms и Write-Host

Вот несколько способов создания панели загрузки в PowerShell:

Метод 1: использование символов ASCII
Вы можете создать полосу загрузки, используя символы ASCII, отображая серию символов, которые постепенно заполняют полосу по мере завершения процесса. Вот пример фрагмента кода:

$progressBarWidth = 20
$progress = 0
while ($progress -lt 100) {
    $completed = [math]::Floor(($progress / 100) * $progressBarWidth)
    $remaining = $progressBarWidth - $completed
    Write-Progress -Activity 'Loading' -Status "[$('-' * $completed)]$('-' * $remaining)" -PercentComplete $progress
    # Simulate progress by incrementing $progress
    $progress += 10
    Start-Sleep -Milliseconds 500
}

Метод 2: использование Windows Forms
Другой подход — использовать Windows Forms для создания графической панели загрузки. Этот метод обеспечивает большую гибкость с точки зрения настройки. Вот пример фрагмента кода:

Add-Type -AssemblyName System.Windows.Forms
$progressBar = New-Object System.Windows.Forms.ProgressBar
$progressBar.Minimum = 0
$progressBar.Maximum = 100
$progressBar.Step = 10
$form = New-Object System.Windows.Forms.Form
$form.Controls.Add($progressBar)
$timer = New-Object System.Windows.Forms.Timer
$timer.Interval = 500
$timer.Add_Tick({
    if ($progressBar.Value -lt $progressBar.Maximum) {
        $progressBar.PerformStep()
    }
    else {
        $timer.Stop()
        $form.Close()
    }
})
$timer.Start()
$form.ShowDialog()

Метод 3: использование Write-Host
Если вы предпочитаете простую текстовую панель загрузки, вы можете использовать Write-Host для обновления прогресса в консоли. Вот пример фрагмента кода:

$progressBarWidth = 20
$progress = 0
while ($progress -lt 100) {
    $completed = [math]::Floor(($progress / 100) * $progressBarWidth)
    $remaining = $progressBarWidth - $completed
    Write-Host "`r[$('-' * $completed)]$('-' * $remaining) $progress%"
    # Simulate progress by incrementing $progress
    $progress += 10
    Start-Sleep -Milliseconds 500
}
Write-Host "`r[Complete] 100%"