UpDaTe
26-11-2012, 23:33
Всем привет.
Написал с помощью 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? думаю имеет смысл засунуть зполнение экселя данными в отдельный поток, чтобы этот процесс не вешал форму... Т.к. думаю что именно в этом причина, но почему это зависит от способа запуска скрипта - вопрос выше )
Написал с помощью 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? думаю имеет смысл засунуть зполнение экселя данными в отдельный поток, чтобы этот процесс не вешал форму... Т.к. думаю что именно в этом причина, но почему это зависит от способа запуска скрипта - вопрос выше )