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

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

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

Новый участник


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

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


Всем привет.
Написал с помощью PowerShell Studio скриптец с графическим интерфейсом (или уже программой это называть, не знаю).
Интерфейс стандартен - одна форма, на ней пару кнопок, чекбоксы, радио-переключатели, объекты типа label...
Собственно с помощью этих самых label я указываю, что происходит в программе в данный момент (меняю значение label.text="загрузка того-то", потом этой же label присваиваю текст "идет поиск" и т.д.)
Надо сказать что при нажатии кнопки "Старт" выполняется довольно много действий: импортируется модуль AD, создается объект excel, после чего заполняется заголовками столбцов, и далее уже идет непосредственно заполнение строк экселя необходимыми значениями, и сохраняется полученный файл (сам эксель пользователю не виден, так как при его создании свойство visible ставится в false).
Так вот, когда я запускаю этот скрипт из самой powershell studio, или же из powershell ISE - все мои подсказки что именно сейчас происходит - видны. Ну то есть сначала написано "импортируем модуль AD", затем написано "создаем объект excel", затем "идет поиск пользователей", причем счетчик количества найденных пользователей также меняется с каждым новым найденным и т.д. Короче запустившему скрипт человеку видно, что скрипт что-то делает, и видно на каком этапе находится.
Идем дальше, запускаю этот же скрипт (сохранив его в формате ps1) из командной оболочки powershell - запускается форма, я выбираю нужные параметры поиска, нажимаю "Старт" - и ничего не происходит со всеми моими указателями процесса. Все они остаются в начальных значениях. Форма тупо повисает, и только закончив работу, сразу рисует финальные цифры... То есть процесс то идет нормально, и результат тот же. Но вот не прорисовывается статистика выполнения. Запустившему скрипт человеку, кажется что он повис...
Такая же ситуация происходит, если запускать скомпелированный powershell студией экзешник.
Собственно вопрос - почему при запуске скрипта из powershell ISE или из powershell studio форма обновляется (тем самым меняя значения процесса выполнения), а при запуске из командной строки powershell или скомпелированного экзешника - форма зависает на все время работы скрипта и показывает уже только конечный результат?

И второй вопрос - кто-нибудь работал с потоками powershell? думаю имеет смысл засунуть зполнение экселя данными в отдельный поток, чтобы этот процесс не вешал форму... Т.к. думаю что именно в этом причина, но почему это зависит от способа запуска скрипта - вопрос выше )

Отправлено: 23:33, 26-11-2012

 

Ветеран


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

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


UpDaTe, стоит выложить код.

Отправлено: 23:47, 26-11-2012 | #2



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

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


Новый участник


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

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


Кода там слишком много, чуть подпилю тогда можно будет )
Но хочу сказать, что проблема решается запуском командной оболочки powershell в режиме STA. Также, если при компилировании экзешника в powershell студии поставить галочку "использовать режим STA", то тоже форма не виснет. Такие вот дела.
Ну и конечно, почитав интернеты, понял что при использовании интерфейса GUI в скриптах, особенно если при нажатии на какой-либо элемент интерфейса начинает производиться долгая операция (выборка объектов, отвечающих определенным условиям, или там какой-то поиск по файловой системе), то надо юзать потоки. И лучше всего RunSpace. Но пока что в них еще не разобрался )

Отправлено: 20:41, 27-11-2012 | #3


Ветеран


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

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


Цитата UpDaTe:
хочу сказать, что проблема решается запуском командной оболочки powershell в режиме STA. »
UpDaTe, я думал про это. Но проверять лучше на имеющемся коде.

Цитата UpDaTe:
Ну и конечно, почитав интернеты, понял что при использовании интерфейса GUI в скриптах, особенно если при нажатии на какой-либо элемент интерфейса начинает производиться долгая операция (выборка объектов, отвечающих определенным условиям, или там какой-то поиск по файловой системе), то надо юзать потоки. »
А стоит ли овчинка выделки? Старайтесь разбивать гигантские операции на части. Задействуйте методы, не блокирующие поток на время своего исполнения (например метод «.DownloadFileAsync()» вместо «.DownloadFile()» объекта «System.Net.WebClient»), используйте подписку на уведомления о событиях и их обработку.

Отправлено: 23:44, 27-11-2012 | #4



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Помогите понять в чем дело! miolik Металлолом 3 09-01-2012 21:08
Игровой процесс станет одним из ключевых моментов в Windows 8 OSZone News Новости и события Microsoft 0 25-12-2010 08:30
Прочее - Помогите понять postfix лог Endy1 Общий по Linux 5 02-12-2010 15:59
Вопрос - Помогите понять суть развода gigi1988 Защита компьютерных систем 2 14-07-2010 05:19
Монитор - [решено] Помогите понять Kondrat6407 Прочее железо 2 11-10-2008 17:54




 
Переход