Best way to run remote VBScript in ASP.net? WMI or PsExec?
- by envinyater
I am doing some research to find out the best and most efficient method for this.
I will need to execute remote scripts on a number of Window Servers/Computers (while we are building them).
I have a web application that is going to automate this task, I currently have my prototype working to use PsExec to execute remote scripts. This requires PsExec to be installed on the system. A colleague suggested I should use WMI for this.
I did some research in WMI and I couldn't find what I'm looking for.
I want to either upload the script to the server and execute it and read the results, or already have the script on the server and execute it and read the results. I would prefer the first option though!
Which is more ideal, PsExec or WMI?
For reference, this is my prototype PsExec code. This script is only executing a small script to get the Windows OS and Service Pack Info.
Protected Sub windowsScript(ByVal COMPUTERNAME As String)
' Create an array to store VBScript results
Dim winVariables(2) As String
nameLabel.Text = Name.Text
' Use PsExec to execute remote scripts
Dim Proc As New System.Diagnostics.Process
' Run PsExec locally
Proc.StartInfo = New ProcessStartInfo("C:\Windows\psexec.exe")
' Pass in following arguments to PsExec
Proc.StartInfo.Arguments = COMPUTERNAME & " -s cmd /C c:\systemInfo.vbs"
Proc.StartInfo.RedirectStandardInput = True
Proc.StartInfo.RedirectStandardOutput = True
Proc.StartInfo.UseShellExecute = False
Proc.Start()
' Pause for script to run
System.Threading.Thread.Sleep(1500)
Proc.Close()
System.Threading.Thread.Sleep(2500) 'Allows the system a chance to finish with the process.
Dim filePath As String = COMPUTERNAME & "\TTO\somefile.txt"
'Download file created by script on Remote system to local system
My.Computer.Network.DownloadFile(filePath, "C:\somefile.txt")
System.Threading.Thread.Sleep(1000) ' Pause so file gets downloaded
''Import data from text file into variables
textRead("C:\somefile.txt", winVariables)
WindowsOSLbl.Text = winVariables(0).ToString()
SvcPckLbl.Text = winVariables(1).ToString()
System.Threading.Thread.Sleep(1000)
' ''Delete the file on server - we don't need it anymore
Dim Proc2 As New System.Diagnostics.Process
Proc2.StartInfo = New ProcessStartInfo("C:\Windows\psexec.exe")
Proc2.StartInfo.Arguments = COMPUTERNAME & " -s cmd /C del c:\somefile.txt"
Proc2.StartInfo.RedirectStandardInput = True
Proc2.StartInfo.RedirectStandardOutput = True
Proc2.StartInfo.UseShellExecute = False
Proc2.Start()
System.Threading.Thread.Sleep(500)
Proc2.Close()
' Delete file locally
File.Delete("C:\somefile.txt")
End Sub