如何在Windows上将其作为另一个用户生成进程?

时间:2012-03-09 21:50:53

标签: windows perl

我有一个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 个答案:

答案 0 :(得分:3)

如果您不想使用WinAPI将密码发送到生成的shell(例如,Win32::GuiTest SendKeys方法可能有用),您最好使用PsExec。 )This thread有点陈旧,但它仍然很好地描述了微软的政策。

答案 1 :(得分:2)

以下是您的代码的用法:

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

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

SendKeys( 'password~');

有关SendKeys()的详细信息,请参阅Win32::GuiTest文档。

答案 2 :(得分:0)

我想你想要

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

在您的代码中$cmd==0将评估为1,因为$cmd将转换为数字0和0==0,然后system将传递1并尝试将其作为一个命令。

use warnings;被隐式转换为数字时,您应该$cmd报告问题。