Функция RunAsWait

         Описание функции


RunAsWait

Запускает внешнюю программу от другого пользователя и приостанавливает выполнение скрипта до завершения внешней программы.

RunAsWait ( "username", "domain", "password", logon_flag, "program" [, "workingdir" [, show_flag [, opt_flag ]]] )

Параметры

username Имя пользователя.
domain Домен для аутентификации.
password Пароль пользователя.
logon_flag 0 - интерактивный вход без профиля.
1 - Интерактивный вход с профилем.
2 - Только сетевые учётные данные.
4 - Наследование переменных сред взамен пользователя.
program Полный путь к программе (EXE, BAT, COM, или PIF) для запуска (Смотрите примечания).
workingdir [необязательный] Рабочий каталог. Если не указан, то используется значение @SystemDir. Это не путь к программе.
show_flag [необязательный] Режим отображения запускаемой программы:
@SW_HIDE = Скрыть окно (или ключ Default)
@SW_MINIMIZE = Свернуть
@SW_MAXIMIZE = Развернуть
opt_flag [необязательный] Управление различными опциями взаимодействия процессов родительского и дочернего.
0x10000 ($RUN_CREATE_NEW_CONSOLE) = Дочерний консольный процесс должен быть создан в собственном окне, вместо использования родительского окна. Этот флаг имеет смысл только, когда родительская программа скомпилирована как консольное приложение.

Возвращаемое значение

Успех:Возвращает код выхода из программы, которая была запущена.
Ошибка:Возвращает 0 и устанавливает @error не равным нулю.

Примечания

Пути с пробелами должны быть заключены в кавычки.

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

Рекомендуется загрузить только профиль пользователя, если вы уверены, что это необходимо. Существует небольшая вероятность, что профиль может зависнуть в памяти при определенных условиях. Если скрипт с использованием RunAs() случайно запущен от SYSTEM (например, если скрипт запущен как служба) и загружен профиль пользователя, тогда вы должны позаботится чтобы скрипт оставался запущенным до завершения дочернего процесса.

При выполнении скрипта от Администратора, служба Вторичного входа (RunAs) должна быть включена или функция не будет выполнена. Это не относится к случаю, когда запуск от SYSTEM.

После запуска указанной программы скрипт приостанавливается до завершения внешней программы. Чтобы запустить программу, а затем немедленно продолжить выполнение скрипта используйте RunAs().

Некоторые программы выполнят возврат немедленно, даже если они все еще выполняются; эти программы порождают другие процессы - вы можете использовать функцию ProcessWaitClose() а таких случаях.

Опции "Вход с профилем" и "Только сетевые учётные данные" несовместимы. Использование обоих создаёт неопределённый результат.

Существует проблема в Windows XP поколения Windows, который предотвращает перенаправление STDIO и показывает флаг работы. Смотрите Базу Знаний Microsoft обновление - KB818858, для получения дополнительной информации о том, какие версии затрагивает, а также хотфикс для исправления. Пользователи использующие Windows 2000, Windows XP SP2 или поздние, или Windows Vista не затрагивает.

См. также

ProcessWait, ProcessWaitClose, Run, RunWait, ShellExecute, ShellExecuteWait, RunAs

Пример

; Введите имя пользователя и пароль для вашей системы.
$sUserName = "Username"
$sPassword = "Password"

; Запускает блокнот от имени указанного выше пользователя.
$iReturn = RunAsWait($sUserName, @ComputerName, $sPassword, 0, "notepad.exe")

MsgBox(4096, "", "Блокнот возвратил код выхода." & $iReturn)