vbs script programa para ocultar linea hacer ejecutar desde con como comandos bat abrir command-line vbscript snmp silent

command-line - script - ocultar cmd con vbs



¿Ejecuta la línea de comandos silenciosamente con VbScript y obtiene resultados? (5)

@Mark Cidade

Gracias Mark! Esto resolvió algunos días de investigación sobre cómo debería llamar esto desde PHP WshShell. Así que gracias a tu código, pensé ...

function __exec($tmppath, $cmd) { $WshShell = new COM("WScript.Shell"); $tmpf = rand(1000, 9999).".tmp"; // Temp file $tmpfp = $tmppath.''/''.$tmpf; // Full path to tmp file $oExec = $WshShell->Run("cmd /c $cmd -c ... > ".$tmpfp, 0, true); // return $oExec == 0 ? true : false; // Return True False after exec return $tmpf; }

Esto es lo que funcionó para mí en mi caso. Siéntase libre de usar y modificar según sus necesidades. Siempre puede agregar funcionalidad dentro de la función para leer automáticamente el archivo tmp, asignarlo a una variable y / o devolverlo y luego eliminar el archivo tmp. Gracias de nuevo @Mark!

Quiero poder ejecutar un programa a través de la línea de comandos y quiero iniciarlo con VbScript. También quiero obtener el resultado de la línea de comando y asignarlo a una variable y quiero que todo esto se haga de forma silenciosa sin que aparezcan las ventanas de cmd. He manejado dos cosas por separado pero no juntas. Esto es lo que obtuve hasta ahora. Ejecute el comando desde cmd y obtenga salida:

Dim WshShell, oExec Set WshShell = WScript.CreateObject("WScript.Shell") Set oExec = WshShell.Exec("C:/snmpget -c public -v 2c 10.1.1.2 .1.3.6.1.4.1.6798.3.1.1.1.5.1") x = oExec.StdOut.ReadLine Wscript.Echo x

El script anterior funciona y hace lo que quiero, excepto que el cmd aparece por un breve momento.

Aquí hay un script que se ejecutará en silencio pero no captará la salida

Set WshShell = WScript.CreateObject("WScript.Shell") Return = WshShell.Run("C:/snmpset -c public -v 2c -t 0 10.1.1.2 .1.3.6.1.4.1.6798.3.1.1.1.7.1 i 1", 0, true)

¿Hay alguna manera de hacer que estos dos trabajen juntos?

Déjame darte un resumen sobre por qué quiero hacer esto. Básicamente, estoy sondeando una unidad cada 5-10 minutos y voy a enviar la secuencia de comandos por correo electrónico o lanzar un cuadro de mensaje cuando ocurre una determinada condición, pero no quiero ver la línea de cmd apareciendo todo el día en mi computadora. ¿Alguna sugerencia? Gracias


He tomado este y otros comentarios y he creado una función un poco más avanzada para ejecutar una aplicación y obtener el resultado.

Ejemplo de función de llamada: generará la lista DIR de C: / solo para directorios. La salida se devolverá a la variable CommandResults y permanecerá en C: / OUTPUT.TXT.

CommandResults = vFn_Sys_Run_CommandOutput("CMD.EXE /C DIR C:/ /AD",1,1,"C:/OUTPUT.TXT",0,1)

Función

Function vFn_Sys_Run_CommandOutput (Command, Wait, Show, OutToFile, DeleteOutput, NoQuotes) ''Run Command similar to the command prompt, for Wait use 1 or 0. Output returned and ''stored in a file. ''Command = The command line instruction you wish to run. ''Wait = 1/0; 1 will wait for the command to finish before continuing. ''Show = 1/0; 1 will show for the command window. ''OutToFile = The file you wish to have the output recorded to. ''DeleteOutput = 1/0; 1 deletes the output file. Output is still returned to variable. ''NoQuotes = 1/0; 1 will skip wrapping the command with quotes, some commands wont work '' if you wrap them in quotes. ''---------------------------------------------------------------------------------------- On Error Resume Next ''On Error Goto 0 Set f_objShell = CreateObject("Wscript.Shell") Set f_objFso = CreateObject("Scripting.FileSystemObject") Const ForReading = 1, ForWriting = 2, ForAppending = 8 ''VARIABLES If OutToFile = "" Then OutToFile = "TEMP.TXT" tCommand = Command If Left(Command,1)<>"""" And NoQuotes <> 1 Then tCommand = """" & Command & """" tOutToFile = OutToFile If Left(OutToFile,1)<>"""" Then tOutToFile = """" & OutToFile & """" If Wait = 1 Then tWait = True If Wait <> 1 Then tWait = False If Show = 1 Then tShow = 1 If Show <> 1 Then tShow = 0 ''RUN PROGRAM f_objShell.Run tCommand & ">" & tOutToFile, tShow, tWait ''READ OUTPUT FOR RETURN Set f_objFile = f_objFso.OpenTextFile(OutToFile, 1) tMyOutput = f_objFile.ReadAll f_objFile.Close Set f_objFile = Nothing ''DELETE FILE AND FINISH FUNCTION If DeleteOutput = 1 Then Set f_objFile = f_objFso.GetFile(OutToFile) f_objFile.Delete Set f_objFile = Nothing End If vFn_Sys_Run_CommandOutput = tMyOutput If Err.Number <> 0 Then vFn_Sys_Run_CommandOutput = "<0>" Err.Clear On Error Goto 0 Set f_objFile = Nothing Set f_objShell = Nothing End Function


O bien, busque asignar la salida al Portapapeles (en su primer script) y luego en el segundo script analizar el valor del Portapapeles.

Si obtiene cualquier otro método, por favor sugiérame también.


Puede redirigir la salida a un archivo y luego leer el archivo:

return = WshShell.Run("cmd /c C:/snmpset -c ... > c:/temp/output.txt", 0, true) Set fso = CreateObject("Scripting.FileSystemObject") Set file = fso.OpenTextFile("c:/temp/output.txt", 1) text = file.ReadAll file.Close


Dim path As String = GetFolderPath(SpecialFolder.ApplicationData) Dim filepath As String = path + "/" + "your.bat" '' Create the file if it does not exist. If File.Exists(filepath) = False Then File.Create(filepath) Else End If Dim attributes As FileAttributes attributes = File.GetAttributes(filepath) If (attributes And FileAttributes.ReadOnly) = FileAttributes.ReadOnly Then '' Remove from Readonly the file. attributes = RemoveAttribute(attributes, FileAttributes.ReadOnly) File.SetAttributes(filepath, attributes) Console.WriteLine("The {0} file is no longer RO.", filepath) Else End If If (attributes And FileAttributes.Hidden) = FileAttributes.Hidden Then '' Show the file. attributes = RemoveAttribute(attributes, FileAttributes.Hidden) File.SetAttributes(filepath, attributes) Console.WriteLine("The {0} file is no longer Hidden.", filepath) Else End If Dim sr As New StreamReader(filepath) Dim input As String = sr.ReadToEnd() sr.Close() Dim output As String = "@echo off" Dim output1 As String = vbNewLine + "your 1st cmd code" Dim output2 As String = vbNewLine + "your 2nd cmd code " Dim output3 As String = vbNewLine + "exit" Dim sw As New StreamWriter(filepath) sw.Write(output) sw.Write(output1) sw.Write(output2) sw.Write(output3) sw.Close() If (attributes And FileAttributes.Hidden) = FileAttributes.Hidden Then Else '' Hide the file. File.SetAttributes(filepath, File.GetAttributes(filepath) Or FileAttributes.Hidden) Console.WriteLine("The {0} file is now hidden.", filepath) End If Dim procInfo As New ProcessStartInfo(path + "/" + "your.bat") procInfo.WindowStyle = ProcessWindowStyle.Minimized procInfo.WindowStyle = ProcessWindowStyle.Hidden procInfo.CreateNoWindow = True procInfo.FileName = path + "/" + "your.bat" procInfo.Verb = "runas" Process.Start(procInfo)

guarda su archivo .bat en "Appdata del usuario actual", si no existe y elimina los atributos y luego establece los atributos "ocultos" en el archivo después de escribir su código cmd y ejecutarlo silenciosamente y capturar todos los resultados, lo guarda en archivo así que si quieres guardar toda la salida de cmd en el archivo simplemente agrega tu como este

code > C:/Users/Lenovo/Desktop/output.txt

simplemente reemplace la palabra "código" con su código o comando de archivo .bat y después de eso el directorio del archivo de salida encontré un código recientemente después de buscar mucho si quiere ejecutar el archivo .bat en vb o c # o simplemente agregue esto de la misma manera en el cual he escrito