2012-07-16 61 views
0

我正在做一些研究,以找出最好和最有效的方法。 我需要在多个Window服务器/计算机上执行远程脚本(当我们构建它们时)。在ASP.net中运行远程VBScript的最佳方法是什么? WMI或PsExec?

我有一个Web应用程序将自动执行此任务,我目前有我的原型工作使用PsExec来执行远程脚本。这需要在系统上安装PsExec。一位同事建议我应该使用WMI。

我在WMI中做了一些研究,但是找不到我要找的东西。 我想要将脚本上传到服务器并执行它并读取结果,或者已经在服务器上有脚本并执行它并读取结果。尽管如此,我宁愿选择第一个选项!

哪个比较理想,PsExec还是WMI?

仅供参考,这是我的原型PsExec代码。此脚本仅执行一个小脚本来获取Windows操作系统和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 

回答

0

从其他研究,对于这种类型的项目,它看起来像PsExec是最好的路线。

0

是的,PsExec是目前最好的路线。 PsExec使用RPC来访问ADMIN $共享。但是,如果禁用了RPC(如默认Win7和WMI已启用,),则可通过读/写访问权限为您的帐户提供共享文件夹,然后您可以使用几个月前由Frank White创建的解决方法这种 “CMD/C回声......” 的方法:

strCommand = “CMD/C回声myTextCommands> C:\ TEMP \ testscript.txt”

看到一个完全充实的VBScript,看到我的解决办法here

相关问题