Как создать процесс как другой пользователь в Windows? - PullRequest
3 голосов
/ 10 марта 2012

У меня есть Perl-скрипт, и мне нужно запустить его от имени другого пользователя в локальном окне. Это машина для тестирования, поэтому никакой реальной безопасности - я бы использовал молоток, если бы он работал.

То, что я до сих пор пробовал, это

$cmd = 'runas /user:tester01 "perl delegated.pl"';
system($cmd) == 0
    or die "could not spawn process as tester01: $!";

но это не работает: он запрашивает пароль в интерактивном режиме. (Трубопровод echo password в runas также не удался.)

Как мне добиться этого из скрипта Perl? Или я должен сделать что-то еще до этого system "runas..." часть?

Я знаю, что могу использовать PsExec, но я бы предпочел собственное решение для Windows. В настоящее время должны работать следующие блоки: Windows 7 и Windows XP, но другие ОС Windows могут быть добавлены позже.

Ответы [ 3 ]

3 голосов
/ 10 марта 2012

Если вы не хотите играть с WinAPI для отправки пароля в порожденную оболочку (например, Win32 :: GuiTest Метод SendKeys может быть полезен), вам лучше использовать PsExec. ) Этот поток немного устарел, но он все еще довольно хорошо описывает политику Microsoft, я думаю.

2 голосов
/ 10 марта 2012

Вот как будет выглядеть ваш код:

use strict;
use warnings;
use Win32::GuiTest qw[ SendKeys ];

system 1, q[runas /user:machinename\username "perl scriptname.pl"];

SendKeys( 'password~');

См. Документацию Win32 :: GuiTest для получения более подробной информации о SendKeys ().

0 голосов
/ 10 марта 2012

Я думаю, что вы хотите

system($cmd) == 0
    or die "could not spawn process as tester01: $!";

В вашем коде $cmd==0 будет оцениваться в 1, поскольку $cmd преобразуется в число 0 и 0==0, затем system будет передано 1 ипопробуйте запустить его как команду.

Вы должны use warnings; сообщить о проблеме, когда $cmd был неявно преобразован в число.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...