无法通过Perl脚本使用PSEXEC在远程计算机上执行多个命令

无法通过Perl脚本使用PSEXEC在远程计算机上执行多个命令,perl,psexec,siebel,Perl,Psexec,Siebel,我正在尝试使用psexec连接到远程计算机并执行多个命令 当我试图连接到sieb服务器管理器并执行某些相关命令时,执行挂起 system("cmd /c c:\\PsExec.exe \\\\$host_name -u $user_name -p \ $pwd cmd /c \" $command1 && srvrmgr/g enterprise server /u username /p password /e siebel /s siebserver /c \"cmd

我正在尝试使用psexec连接到远程计算机并执行多个命令

当我试图连接到sieb服务器管理器并执行某些相关命令时,执行挂起

system("cmd /c c:\\PsExec.exe \\\\$host_name  -u  $user_name  -p \ $pwd  cmd /c \" $command1 && srvrmgr/g enterprise server /u username /p password /e siebel /s siebserver /c \"cmd to execute\"\"");
我通过perl脚本运行该命令,能够运行其他命令,唯一的问题是,我试图连接到服务器管理器并执行一些相关命令

system("cmd /c c:\\PsExec.exe \\\\$host_name  -u  $user_name  -p \ $pwd  cmd /c \" $command1 && srvrmgr/g enterprise server /u username /p password /e siebel /s siebserver /c \"cmd to execute\"\"");

无法弄清问题所在

您需要调试命令的转义:

use 5.012;

my $host_name = 'HOST_NAME';
my $user_name = 'USER_NAME';
my $pwd       = 'PWD';
my $command1  = 'COMMAND1';

my $cmd = "cmd /c c:\\PsExec.exe \\\\$host_name  -u  $user_name  -p \ $pwd  cmd /c \" $command1 && srvrmgr/g enterprise server /u username /p password /e siebel /s siebserver /c \"cmd to execute\"\"";

print $cmd;
产出:

cmd /c c:\PsExec.exe \\HOST_NAME  -u  USER_NAME  -p  PWD  cmd /c " COMMAND1 && srvrmgr/g enterprise server /u username /p password /e siebel /s siebserver /c "cmd to execute""
几张便条

  • 这个反斜杠
    \$pwd
    没有任何作用
  • 这些双引号
    “cmd to execute”
    可能需要在shell级别转义
  • 此外,如果要构造包含双引号的命令,最好使用不同的分隔符来生成字符串

    下面是我将如何修改您的命令

    my $cmd = qq{cmd /c c:\\PsExec.exe \\\\$host_name  -u  $user_name  -p  $pwd  cmd /c " $command1 && srvrmgr/g enterprise server /u username /p password /e siebel /s siebserver /c \\"cmd to execute\\""};
    

    我可以看到
    srvrmgr
    命令和
    /g
    参数之间缺少空格,您正在使用系统调用与perl无关的exe。将此字符串打印到屏幕,复制并粘贴到命令行。这将复制脚本的功能,并让您检查错误。也许其中一个变量不包含您认为它所包含的内容。另请参见perldoc系统