Member 14156312 Ответов: 1

Как создать индикатор выполнения с помощью powershell?


Я хочу захватить изображение с помощью этого метода
DISM.exe /capture-ffu /imagefile=e:\WinOEM.ffu /capturedrive=\\.\PhysicalDrive0 /name:disk0 /description:"Windows 10 FFU"


Возможно ли для меня создать графический интерфейс, такой как индикатор выполнения, пока он делает захват?
Я создал этот сценарий PowerShell, но не знаю, куда мне поместить эту команду

<pre>DISM.exe /capture-ffu /imagefile=e:\WinOEM.ffu /capturedrive=\\.\PhysicalDrive0 /name:disk0 /description:"Windows 10 FFU"


Спасибо за любой совет.

Что я уже пробовал:

Add-Type -assembly System.Windows.Forms

## -- Create The Progress-Bar
$ObjForm = New-Object System.Windows.Forms.Form
$ObjForm.Text = "Image Capturing"
$ObjForm.WindowState = 'Maximized'
$ObjForm.BackColor = "White"

$ObjForm.FormBorderStyle = [System.Windows.Forms.FormBorderStyle]::FixedSingle
$ObjForm.StartPosition = [System.Windows.Forms.FormStartPosition]::CenterScreen

## -- Create The Label
$ObjLabel = New-Object System.Windows.Forms.Label
$ObjLabel.Text = "Starting. Please wait ... "
$ObjLabel.Left = 5
$ObjLabel.Top = 10
$ObjLabel.Width = 500 - 20
$ObjLabel.Height = 15
$ObjLabel.Font = "Tahoma"
## -- Add the label to the Form
$ObjForm.Controls.Add($ObjLabel)

$PB = New-Object System.Windows.Forms.ProgressBar
$PB.Name = "PowerShellProgressBar"
$PB.Value = 0
$PB.Style="Continuous"

$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Width = 700 - 40
$System_Drawing_Size.Height = 20
$PB.Size = $System_Drawing_Size
$PB.Left = 5
$PB.Top = 40
$ObjForm.Controls.Add($PB)

## -- Show the Progress-Bar and Start The PowerShell Script
$ObjForm.Show() | Out-Null
$ObjForm.Focus() | Out-NUll
$ObjLabel.Text = "Starting. Please wait ... "
$ObjForm.Refresh()

Start-Sleep -Seconds 1

## -- Execute The PowerShell Code and Update the Status of the Progress-Bar
$Result = & DISM.exe /capture-ffu /imagefile=E:\TEST\capture.ffu /capturedrive=\\.\PhysicalDrive0 /name:disk0

$Counter = 0
ForEach ($Item In $Result) {
    ## -- Calculate The Percentage Completed
    $Counter++
    [Int]$Percentage = ($Counter/$Result.Count)*100
    $PB.Value = $Percentage
    $ObjLabel.Text = "Capturing The Image"
    $ObjForm.Refresh()
    Start-Sleep -Milliseconds 150
    # -- $Item.Name
    "`t" + $Item.Path

}

$ObjForm.Close()
Write-Host "`n"

1 Ответов

Рейтинг:
2

RickZeeland

Смотрите пример здесь: Индикатор Выполнения Скрипта С Помощью PowerShell[^]
Я протестировал скрипт и после редактирования первой строки, чтобы установить правильную папку, он работал без каких-либо проблем.
Запуск с помощью правой кнопки мыши на файле сценария- запуск с помощью Powershell.
Возможно, Вам также потребуется разблокировать файл после его загрузки.


Member 14156312

Я имею в виду этот пример. Но у меня все еще нет никакой идеи, чтобы решить мою проблему

RickZeeland

Я сам не пробовал этот скрипт, но когда у меня будет время, я взгляну на него, хотя как программист C# мне гораздо легче делать такие вещи на C# :)

Member 14156312

Я обновил скрипт, поставил команду для захвата изображения в переменную result.
Я с нетерпением жду вашего совета. Огромное спасибо

RickZeeland

Он работает в моей системе Windows 10 pro, см. обновленное решение ...

Member 14156312

Да, я знаю, что это работает, чтобы перечислить все файлы, найденные в пути.
Но я должен это сделать". DISM.exe /capture-ffu /imagefile=e:\WinOEM.ffu /capturedrive=\\.\PhysicalDrive0 /имя:disk0 /описание:"Windows 10 FFU" в качестве индикатора выполнения моего параметра

Dave Kreskowiak

Вы не объясняете проблему ясно.

Если вы ожидаете фактического %завершения, вы не можете его получить. DISM не будет сообщать о прогрессе вашего скрипта, поэтому нет никакого способа вычислить процент. Единственная панель "прогресс", которую вы можете показать, - это шатер, который просто продолжает прокручиваться, чтобы вы знали, что что-то происходит.

Member 14156312

а ну понятно. В этом есть смысл. Спасибо