我有一个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操作系统可能会在以后添加。
答案 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
报告问题。