Write-Progress

Menampilkan bilah kemajuan dalam jendela perintah PowerShell.

Sintaks

Write-Progress
     [-Activity] <String>
     [[-Status] <String>]
     [[-Id] <Int32>]
     [-PercentComplete <Int32>]
     [-SecondsRemaining <Int32>]
     [-CurrentOperation <String>]
     [-ParentId <Int32>]
     [-Completed]
     [-SourceId <Int32>]
     [<CommonParameters>]

Deskripsi

Write-Progress Cmdlet menampilkan bilah kemajuan di jendela perintah PowerShell yang menggambarkan status perintah atau skrip yang sedang berjalan. Anda dapat memilih indikator yang direfleksikan bilah dan teks yang muncul di atas dan di bawah bilah kemajuan.

PowerShell 7.2 menambahkan $PSStyle variabel otomatis yang digunakan untuk mengontrol bagaimana PowerShell menampilkan informasi tertentu menggunakan urutan escape ANSI. Anggota $PSStyle.Progress memungkinkan Anda mengontrol penyajian bilah tampilan kemajuan.

  • $PSStyle.Progress.Style - String ANSI mengatur gaya penyajian.
  • $PSStyle.Progress.MaxWidth - Mengatur lebar maksimum tampilan. Default ke 120. Nilai minimum adalah 18.
  • $PSStyle.Progress.View - Enum dengan nilai, Minimal dan Classic. Classic adalah penyajian yang ada tanpa perubahan. Minimal adalah penyajian minimal satu baris. Minimal adalah defaultnya.

Untuk informasi selengkapnya tentang $PSStyle, lihat about_ANSI_Terminals.md.

Catatan

Jika host tidak mendukung Terminal Virtual, $PSStyle.Progress.View secara otomatis diatur ke Classic.

Contoh

Contoh 1: Menampilkan kemajuan perulangan For

for ($i = 1; $i -le 100; $i++ ) {
    Write-Progress -Activity "Search in Progress" -Status "$i% Complete:" -PercentComplete $i
    Start-Sleep -Milliseconds 250
}

Perintah ini menampilkan kemajuan perulangan for yang dihitung dari 1 hingga 100.

Write-Progress Cmdlet mencakup judul Activitybilah status, baris status, dan variabel $i (penghitung dalam for perulangan), yang menunjukkan kelengkapan relatif tugas.

Contoh 2: Menampilkan kemajuan perulangan Berlapis Untuk

$PSStyle.Progress.View = 'Classic'

for($I = 0; $I -lt 10; $I++ ) {
    $OuterLoopProgressParameters = @{
        Activity         = 'Updating'
        Status           = 'Progress->'
        PercentComplete  = $I * 10
        CurrentOperation = 'OuterLoop'
    }
    Write-Progress @OuterLoopProgressParameters
    for($j = 1; $j -lt 101; $j++ ) {
        $InnerLoopProgressParameters = @{
            ID               = 1
            Activity         = 'Updating'
            Status           = 'Progress'
            PercentComplete  = $j
            CurrentOperation = 'InnerLoop'
        }
        Write-Progress @InnerLoopProgressParameters
        Start-Sleep -Milliseconds 25
    }
}

Updating
Progress ->
 [ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo]
OuterLoop
Updating
Progress
 [oooooooooooooooooo                                                   ]
InnerLoop

Contoh ini mengatur tampilan kemajuan ke Classic lalu menampilkan kemajuan dua perulangan berlapis for , masing-masing diwakili oleh bilah kemajuan.

Write-Progress Perintah untuk bilah kemajuan kedua mencakup parameter Id yang membedakannya dari bilah kemajuan pertama.

Tanpa parameter Id, bilah kemajuan akan ditumpangkan satu sama lain alih-alih ditampilkan satu di bawah yang lain.

Contoh 3: Menampilkan kemajuan saat mencari string

# Use Get-WinEvent to get the events in the System log and store them in the $Events variable.
$Events = Get-WinEvent -LogName system
# Pipe the events to the ForEach-Object cmdlet.
$Events | ForEach-Object -Begin {
    # In the Begin block, use Clear-Host to clear the screen.
    Clear-Host
    # Set the $i counter variable to zero.
    $i = 0
    # Set the $out variable to an empty string.
    $out = ""
} -Process {
    # In the Process script block search the message property of each incoming object for "bios".
    if($_.message -like "*bios*")
    {
        # Append the matching message to the out variable.
        $out=$out + $_.Message
    }
    # Increment the $i counter variable which is used to create the progress bar.
    $i = $i+1
    # Determine the completion percentage
    $Completed = ($i/$Events.count) * 100
    # Use Write-Progress to output a progress bar.
    # The Activity and Status parameters create the first and second lines of the progress bar
    # heading, respectively.
    Write-Progress -Activity "Searching Events" -Status "Progress:" -PercentComplete $Completed
} -End {
    # Display the matching messages using the out variable.
    $out
}

Perintah ini menampilkan kemajuan perintah untuk menemukan string "bios" di log peristiwa Sistem.

Nilai parameter PercentComplete dihitung dengan membalik jumlah peristiwa yang telah diproses $i dengan jumlah total peristiwa yang diambil $Events.count lalu mengalikan hasil tersebut dengan 100.

Contoh 4: Menampilkan kemajuan untuk setiap tingkat proses berlapis

$PSStyle.Progress.View = 'Classic'

foreach ( $i in 1..10 ) {
  Write-Progress -Id 0 "Step $i"
  foreach ( $j in 1..10 ) {
    Write-Progress -Id 1 -ParentId 0 "Step $i - Substep $j"
    foreach ( $k in 1..10 ) {
      Write-Progress -Id 2  -ParentId 1 "Step $i - Substep $j - iteration $k"
      Start-Sleep -Milliseconds 150
    }
  }
}

Step 1
     Processing
    Step 1 - Substep 2
         Processing
        Step 1 - Substep 2 - Iteration 3
             Processing

Dalam contoh ini Anda dapat menggunakan parameter ParentId untuk memiliki output inden untuk menampilkan hubungan induk-turunan dalam kemajuan setiap langkah.

Parameter

-Activity

Menentukan baris pertama teks dalam judul di atas bilah status. Teks ini menjelaskan aktivitas yang kemajuannya sedang dilaporkan.

Type:String
Position:0
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-Completed

Menunjukkan apakah bilah kemajuan terlihat. Jika parameter ini dihilangkan, Write-Progress menampilkan informasi kemajuan.

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-CurrentOperation

Menentukan baris teks di bawah bilah kemajuan. Teks ini menjelaskan operasi yang sedang berlangsung.

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Id

Menentukan ID yang membedakan setiap bilah kemajuan dari yang lain. Gunakan parameter ini saat Anda membuat lebih dari satu bilah kemajuan dalam satu perintah. Jika bilah kemajuan tidak memiliki ID yang berbeda, id tersebut ditumpangkan alih-alih ditampilkan dalam rangkaian. Nilai negatif tidak diperbolehkan.

Type:Int32
Position:2
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ParentId

Menentukan aktivitas induk aktivitas saat ini. Gunakan nilai -1 jika aktivitas saat ini tidak memiliki aktivitas induk.

Type:Int32
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-PercentComplete

Menentukan persentase aktivitas yang selesai. Gunakan nilai -1 jika persentase selesai tidak diketahui atau tidak berlaku.

Type:Int32
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-SecondsRemaining

Menentukan jumlah detik yang diproyeksikan yang tersisa hingga aktivitas selesai. Gunakan nilai -1 jika jumlah detik yang tersisa tidak diketahui atau tidak berlaku.

Type:Int32
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-SourceId

Menentukan sumber rekaman. Anda dapat menggunakan ini sebagai pengganti Id tetapi tidak dapat digunakan dengan parameter lain seperti ParentId.

Type:Int32
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Status

Menentukan baris kedua teks dalam judul di atas bilah status. Teks ini menjelaskan status aktivitas saat ini.

Type:String
Position:1
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

Input

None

Anda tidak dapat menyalurkan objek ke cmdlet ini.

Output

None

Cmdlet ini tidak mengembalikan output.

Catatan

Jika bilah kemajuan tidak muncul, periksa nilai $ProgressPreference variabel. Jika nilai diatur ke SilentlyContinue, bilah kemajuan tidak ditampilkan. Untuk informasi selengkapnya tentang preferensi PowerShell, lihat about_Preference_Variables.

Parameter cmdlet sesuai dengan properti kelas System.Management.Automation.ProgressRecord . Untuk informasi selengkapnya, lihat Kelas ProgressRecord.