http://www.perlmonks.org?node_id=989926


in reply to Re: Need to Execute msiexec using Net::Telnet
in thread Need to Execute msiexec using Net::Telnet

Hi Philip,

I used these commented lines just to show that I've tried all these options, but, none of them is working :(. For you, I've copied lines of code that is being executed. Please see below code-

use Net::Telnet; BEGIN { $|=1 } $user = "administrator"; $pass = 'pass'; $telnet = new Net::Telnet ( Timeout=>20, Errmode=>'die', Prompt => '/[ +%#>] ?$/', Dump_Log=>"dumplogs.txt", Input_log=>"inputlogs.txt", O +utput_log=>"outputlogs.txt"); $telnet->open('xx.xx.xx.xx'); $telnet->login(Name=>$user, Password=>$pass, Prompt => '/[%#>:] ?$/'); $command = qq(msiexec \/qn \/i \\\\10.210.156.150\\SEP_Builds\\Jaguar\ +\Integration\\940\\DVD-SEP-EE\\SEPx64\\Sep64.msi \/norestart RUNLIVEU +PDATE=0 \/l\*v C:\\Compatibility_Automation_Temp\\SepClientInstallLog +.txt); print "command is: [$command]\n"; @output = $telnet->cmd(String=>$command); print "output is:\n@output\n"; exit;
The output of this command seen from the "inputlogs.txt" is mentioned below-
Welcome to Microsoft Telnet Service login: administrator password: *=============================================================== Microsoft Telnet Server. *=============================================================== C:\Users\Administrator>msiexec /qn /i \\10.210.156.150\SEP_Builds\Jagu +ar\Integration\940\DVD-SEP-EE\SEPx64\Sep64.msi /norestart RUNLIVEUPDA +TE=0 /l*v C:\Compatibility_Automation_Temp\SepClientInstallLog.txt C:\Users\Administrator>
Now, if I copy and paste the same command I see in inputlogs.txt file, this command works well on remote mahcine. but using this script, it doesn't. Please help me with this.

Replies are listed 'Best First'.
Re^3: Need to Execute msiexec using Net::Telnet
by philiprbrenan (Monk) on Aug 27, 2012 at 19:19 UTC

    We are making progress. The nest step is to prove that you can execute a simple command on the target machine via Telnet. The ideal command would be perl -v so that we can see that we can start perl remotely. Once that done we can put the desired msiexec command in a perl script on the target machine and start that. So: can you execute perl remotely via Telnet on the target machine?

      Hi Philip,

      Here, I want to mention a point. Actually, I wanted to remove the dependencies of installing something on remote machine. That is why I came up with this "Telnetting" idea. Otherwise, earlier I was doing this stuff using Jenkins(a tool that allows us to add client machine and fire commands on the client). In that case, there were so many dependencies of installing Java, Perl with required modules etc. So, I thought to get rid of it and just use telnetting and fire commands from there. In this way, I don't require to install anything on remote machine. just need one machine with everything installed as a server from where I can initiate this telnet script.

      I hope, you have understood my problem. Now, as you were asking about any simple command to run using this script, please see below script with its output-

      use Net::Telnet; BEGIN { $|=1 } $user = "administrator"; $pass = 'crt@123'; $telnet = new Net::Telnet ( Timeout=>20, Errmode=>'die', Prompt => '/[ +%#>] ?$/', Dump_Log=>"dumplogs.txt", Input_log=>"inputlogs.txt", O +utput_log=>"outputlogs.txt"); $telnet->open('10.217.50.218'); $telnet->login(Name=>$user, Password=>$pass, Prompt => '/[%#>:] ?$/'); $command = qq(ipconfig && hostname); print "command is: [$command]\n"; @output = $telnet->cmd(String=>$command); print "output is:\n@output\n"; exit;
      And the output of this script is-
      C:\Compatibility_Automation_Temp>perl test1.pl command is: [ipconfig && hostname] output is: Windows IP Configuration Ethernet adapter Local Area Connection: Connection-specific DNS Suffix . : crt.com Link-local IPv6 Address . . . . . : fe80::a489:bdd0:bbd7:748a%11 IPv4 Address. . . . . . . . . . . : 10.217.50.218 Subnet Mask . . . . . . . . . . . : 255.255.252.0 Default Gateway . . . . . . . . . : 10.217.48.1 Tunnel adapter isatap.crt.com: Media State . . . . . . . . . . . : Media disconnected Connection-specific DNS Suffix . : crt.com WIN-3K3OARCE05I C:\Users\Administrator
      Here, you can see it's working fine. Please suggest me for further.

        I am beginning to think that your Telnet session does not have enough priviledges to run msiexec, and that msiexec is objecting via a pop up which is ruining your telnet session. MS might have come to the conclusion that it would be bad for remote users to install software.

        If you wish to continue to the bitter end:

        So now we know that you can execute simple commands via telnet. The next command to execute is perl -v

        Then a perl script that executes the msiexec command for you. This script should be first tested on the target machine (i.e. not via telnet). Then via telnet.

        Once this has been done we know that msiexec can be started remotely and there is not some Windows weirdness that prevents it from happening, we can concentrate on the final step of eliminating the need for the perl wrapper on the target machine - which I agree is an excessive requirement in general but useful as a stepping stone to finding asolution.

        By taking these small steps we are eventually going to run into the actual problem that is occurring here, its tedious, but as Edison said: 1% inspiration, 99% perspiration.