Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - Совместить секундомер и прогресс бар

Ответить
Настройки темы
PowerShell - Совместить секундомер и прогресс бар

Старожил


Сообщения: 216
Благодарности: 15

Профиль | Отправить PM | Цитировать


Доброго времени суток всем!
Некоторые скрипты работают довольно длительное время. Чтобы как-то контролировать процесс, можно было бы добавлять прогресс бар. Но универсального решения нет и нужно в каждом скрипте мозговать другой код для добавления прогресс бара.
Есть простой секундомер для контроля времени работы скрипта:
Код: Выделить весь код
     $watch = [System.Diagnostics.Stopwatch]::StartNew()
     $watch.Start()
 
     Скрипт
 
     $watch.Stop()
     $watch.Elapsed
Возможно ли совместить его с прогресс баром? То есть скрипт запустился, секундомер начал отсчитывать время и пошла полоска прогресс бара. Может можно как-то данные для прогресс бара брать с этого секундомера?

Отправлено: 12:06, 31-10-2020

 

Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Uragan66, нет. Прогресс-бар имеет смысл, когда известно начальное значение, конечное значение и хоть какие-то реперные точки.
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:31, 31-10-2020 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Сообщения: 1754
Благодарности: 965

Профиль | Цитировать


Uragan66,

Может Write-Progress?

Код: Выделить весь код
for ($i = 1; $i -lt 50; $i++)
{
    $perc = $i * 2
    $sec = 50 - $i
    Write-Progress -Activity { Какой-то отчет о текущем выполнении } -PercentComplete $perc -SecondsRemaining $sec
    Start-Sleep 1
}
Но работает вроде только в цикле.
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:43, 31-10-2020 | #3


Старожил


Сообщения: 216
Благодарности: 15

Профиль | Отправить PM | Цитировать


Цитата Foreigner:
Но работает вроде только в цикле »
Foreigner, да, такой код работает только, когда в коде есть цикл. Пишу скрипты для облегчения рутинной работы с плейлистами IPTV, а циклы, если и есть, то значений для прогресс бара недостаточно. Да и не весь код это будет.
Цитата Iska:
нет. Прогресс-бар имеет смысл, когда известно начальное значение, конечное значение и хоть какие-то реперные точки »
жаль... что здесь не получится.

Отправлено: 14:53, 31-10-2020 | #4


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата Uragan66:
…для облегчения рутинной работы с плейлистами IPTV »
А что Вы с ними делаете?

Отправлено: 15:49, 31-10-2020 | #5


Старожил


Сообщения: 216
Благодарности: 15

Профиль | Отправить PM | Цитировать


Цитата Iska:
А что Вы с ними делаете? »
Iska, да много чего... Например, удаление дубликатов каналов, добавление в плейлист различных директив (для распознавания каналов файлом телепрограммы, деления по группам и т.д.), сканирование потоков на валидность. Да и другие задачи, типа как создание того же плейлиста из ссылок... Многие из этих задач можно и в блокноте решить, но автоматизация + дальнейшее отправление на "облако", конечно же удобнее...

Отправлено: 15:59, 31-10-2020 | #6


Ветеран


Сообщения: 3806
Благодарности: 824

Профиль | Отправить PM | Цитировать


Uragan66, описанные вами задачи не выглядят сколько-нибудь тяжеловесными, чтобы хотя бы успеть заметить/увидеть прогресс-бар

Отправлено: 17:03, 31-10-2020 | #7


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1171
Благодарности: 487

Профиль | Отправить PM | Цитировать


Цитата Uragan66:
Пишу скрипты для облегчения рутинной работы с плейлистами IPTV, а циклы, если и есть, то значений для прогресс бара недостаточно. Да и не весь код это будет. »
Чтобы сказать о том, что возможно, а что нет, необходимо таки увидеть скрипт...

Цитата Busla:
описанные вами задачи не выглядят сколько-нибудь тяжеловесными »
зависит от размера плейлистов... а их иногда склеивают из нескольких и на выходе получают достаточно объемные текстовые файлы...

-------
scio me nihil scire. Ѫ


Отправлено: 17:23, 31-10-2020 | #8


Старожил


Сообщения: 216
Благодарности: 15

Профиль | Отправить PM | Цитировать


Цитата Busla:
описанные вами задачи не выглядят сколько-нибудь тяжеловесными, чтобы хотя бы успеть заметить/увидеть прогресс-бар »
Задачи с текстовым содержимым плейлистов таки да, выполняются достаточно быстро. Но, к примеру, та же проверка потоков на работоспособность или какой-нить сканер занимают по времени 30-40 мин. и поболее. Всё зависит от объёмности плейлиста, как ниже правильно заметили.
Но вопрос то даже не в том, можно заметить движение прогресс бара или нет. Если в скрипте есть циклы, то можно прогресс бар добавить, но опять таки он будет работать не всё время выполнения скрипта... Да и для каждого скрипта нужно свой прогресс бар мудрить.
Поэтому и подумал о секундомере, чтобы с него как-то брать данные для прогресс бара и это было бы универсальным решением для любого скрипта.
Цитата YuS_2:
Чтобы сказать о том, что возможно, а что нет, необходимо таки увидеть скрипт... »
YuS_2, да скрипты то разные, соответственно и решения с прогресс баром будут разными... Хотелось бы что-то универсальное.
Есть такой скрипт:
Код: Выделить весь код
Add-Type -AssemblyName PresentationCore,PresentationFramework
[xml]$xaml = @"
<Window Name="main"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="250.456" Width="223.212">
    <Grid Margin="0,0,2,0">
        <Label HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" RenderTransformOrigin="-1.028,-1.353" Width="186" Height="38">
            <Grid Height="38" Margin="0,0,0,0" Width="176">
                <TextBlock HorizontalAlignment="Left"  TextWrapping="Wrap" Text="Запуск скрипта" VerticalAlignment="Top" Height="28" Width="97" FontSize="18" FontFamily="Segoe Script" Margin="10,0,0,0"/>
                <TextBlock Name="Count" Text="" HorizontalAlignment="Right"  TextWrapping="Wrap" VerticalAlignment="Top" Height="28" Width="48" FontSize="18" FontFamily="Segoe Script"/>
            </Grid>
        </Label>
        <Button Name="inc" Content="Запустить скрипт"  HorizontalAlignment="Left" Margin="10,53,0,0" VerticalAlignment="Top" Width="180" Height="45">          
        </Button>
        <ProgressBar Minimum="0" Maximum="100" Margin="10,93,0,0" HorizontalAlignment="Left" Width="180" Height="45" Name="pbStatus" />
    </Grid> 
</Window>
"@
$reader=(New-Object System.Xml.XmlNodeReader $xaml)
$Window=[Windows.Markup.XamlReader]::Load( $reader )
$xaml.SelectNodes("//*[@*[contains(translate(name(.),'n','N'),'Name')]]") | %{
    Set-Variable -Name ($_.Name) -Value $Window.FindName($_.Name) -Scope Global
}
$inc.add_click({
    $pbStatus.isIndeterminate=$true
    $runspace = [runspacefactory]::CreateRunspace()
    $runspace.Open()
    $runspace.SessionStateProxy.SetVariable('pbStatus',$pbStatus)
    $powershell = [powershell]::Create()
    $powershell.Runspace = $runspace
    $powershell.AddScript({

Здесь любой скрипт

        $pbStatus.Dispatcher.invoke([action]{$pbStatus.isIndeterminate=$false})
        $pbStatus.Dispatcher.invoke([action]{$pbStatus.value=100})
    })
    $powershell.BeginInvoke()
})
$Window.showdialog()
Прошу прощения, что не указываю автора, просто не помню где нашел этот код.
Работает с любым скриптом... Но неудобно с него запускать скрипты, лишнее окно и т.д. Да и сам прогресс бар просто движется непрерывно.

Отправлено: 19:36, 31-10-2020 | #9


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Тогда можно. Сначала считаем общее число каналов, это будет конечной точкой. Затем, в процессе поиска дубликатов/сканирования потоков на валидность/прочая, выводим текущее значение для прогресс-бара.

Цитата Uragan66:
Поэтому и подумал о секундомере, чтобы с него как-то брать данные для прогресс бара и это было бы универсальным решением для любого скрипта. »
Отнюдь. Вы ведь не знаете заранее, сколько времени понадобится для полной обработки?
Это сообщение посчитали полезным следующие участники:

Отправлено: 20:52, 31-10-2020 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - Совместить секундомер и прогресс бар

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
PowerShell - Добавить прогресс бар в готовый скрипт c4uran Скриптовые языки администрирования Windows 11 26-10-2018 20:16
Добавить прогресс бар к скрипту support23 AutoIt 1 25-11-2012 06:53
[решено] Прогресс-бар для скрипта Tosyk AutoIt 10 23-09-2012 11:04
VBS/WSH/JS - [решено] Прогресс бар для vbscript neo21 Скриптовые языки администрирования Windows 2 27-10-2011 13:31
[решено] Прогресс бар semiono AutoIt 17 24-03-2009 23:18




 
Переход