VBScript Capture StdOut von ShellExecute

8769
Joe

Ich versuche, das folgende Code-Snippet als Teil eines Tools zum Erfassen und Protokollieren relevanter Systemdiagnosen auszuführen. Der Zweck dieses Snippets besteht darin, das Ergebnis der Ausführung des Befehls zu ermitteln:

vssadmin list writers 

Der Ausschnitt ist wie folgt:

' Set WshShell = CreateObject("WScript.Shell") ' WScript.Echo sCurPath & "\vsswritercheck.bat" ' Set WshShellExec = WshShell.Exec("elevate.cmd cmd.exe /c " & sCurPath & "\vsswritercheck.bat")  Set oShell = CreateObject("Shell.Application") oShell.ShellExecute "cmd.exe", sCurPath & "\vsswritercheck.bat",, "runas", 1 vsswriter = VSSWriterCheck  Select Case oShell.Status Case WshFinished strOutput = oShell.StdOut.ReadAll Case WshFailed strOutput = oShell.StdErr.ReadAll End Select WScript.Echo strOutPut vsswriter = strOutPut 

Mit dem ersten Code-Snippet (auskommentiert) kann ich den Befehl ausführen und stdout von der Batchdatei erfassen. Im zweiten Code kann ich nicht stdout erfassen.

Ich muss in der Lage sein, das Batch-Skript mit erhöhten Berechtigungen auszuführen, deshalb suche ich nach einem Kompromiss zwischen der Funktionalität der beiden.

Das gesamte aufrufende Skript kann aufgrund von Einschränkungen bei anderen Funktionen nicht im erhöhten Modus ausgeführt werden.

Ich bin auf der Suche nach Ideen, wie ich diese Ausgabe in mein Protokoll aufnehmen kann, da mir die Optionen zur Verfügung stehen, die im Rahmen der grundlegenden Skripts liegen.

2

2 Antworten auf die Frage

1
José Luís Teixeira
strcmd="cmd /c " & sCurPath & "\vsswritercheck.bat" return = wshshell.run(strcmd, 0, true) if return=0 then blnSuccess = True else blnSuccess = False end if 
Es wäre schön, wenn Sie ein wenig Kontext für den Code bereitstellen könnten :) Der Hochstapler vor 11 Jahren 0
Ich denke, das ist fast das, was ich brauche, aber ich muss StdOut aus dem Skript erfassen, nicht nur, ob es erfolgreich war oder nicht. Joe vor 11 Jahren 0
0
Crafty

Wie wär's mit beiden?

Verwenden Sie den von Ihnen auskommentierten Code, der im nicht-erhöhten Modus arbeitet, und fügen Sie einen zusätzlichen Test hinzu. Wenn erhöhte Rechte erforderlich sind, ruft das Skript sich stattdessen mit ShellExecute () auf, wodurch der nachfolgende Aufruf von Exec () bereits ausgeführt wird erhöhte Rechte und trotzdem stdout erfassen.

Es ist ein bisschen verrückt, aber mühelos.