GUI PowerShell - помогите понять пару моментов
Всем привет.
Написал с помощью 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? думаю имеет смысл засунуть зполнение экселя данными в отдельный поток, чтобы этот процесс не вешал форму... Т.к. думаю что именно в этом причина, но почему это зависит от способа запуска скрипта - вопрос выше ) |
UpDaTe, стоит выложить код.
|
Кода там слишком много, чуть подпилю тогда можно будет )
Но хочу сказать, что проблема решается запуском командной оболочки powershell в режиме STA. Также, если при компилировании экзешника в powershell студии поставить галочку "использовать режим STA", то тоже форма не виснет. Такие вот дела. Ну и конечно, почитав интернеты, понял что при использовании интерфейса GUI в скриптах, особенно если при нажатии на какой-либо элемент интерфейса начинает производиться долгая операция (выборка объектов, отвечающих определенным условиям, или там какой-то поиск по файловой системе), то надо юзать потоки. И лучше всего RunSpace. Но пока что в них еще не разобрался ) |
Цитата:
Цитата:
|
Время: 02:22. |
Время: 02:22.
© OSzone.net 2001-