我正在做一些研究,以找出最好和最有效的方法。 我需要在许多Window服务器/计算机上执行远程脚本(当我们构建它们时)。
我有一个Web应用程序将自动执行此任务,我目前正在使用PsExec来执行远程脚本。这需要在系统上安装PsExec。一位同事建议我应该使用WMI。
我在WMI做了一些研究,但我无法找到我正在寻找的东西。 我想要将脚本上传到服务器并执行它并读取结果,或者已经在服务器上有脚本并执行它并读取结果。我更喜欢第一种选择!
哪个更理想,PsExec还是WMI?
作为参考,这是我的原型PsExec代码。此脚本仅执行一个小脚本来获取Windows操作系统和Service Pack信息。
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 :(得分:0)
从其他研究来看,对于这类项目来说,看起来PsExec是最好的选择。
答案 1 :(得分:0)
是的,PsExec是迄今为止最好的路线。 PsExec使用RPC访问ADMIN $共享。但是,如果禁用RPC,如默认Win7,并启用WMI,和有一个共享文件夹可用于您的帐户,具有读/写访问权限,那么您可以使用由Frank White创建的变通方法几个月前使用这种“cmd / c echo ...”方法:
strCommand =“cmd / c echo myTextCommands> c:\ temp \ testscript.txt”
要查看完整的VBScript,请参阅我的解决方案here