VBScript erfasst StdOut von ShellExecute

VBScript erfasst StdOut von ShellExecute

Ich versuche, den folgenden Codeausschnitt als Teil eines Tools auszuführen, um einige relevante Systemdiagnosen zu sammeln und zu protokollieren. Der Zweck dieses Ausschnitts besteht darin, das Ergebnis der Ausführung des Befehls zu erfassen:

vssadmin list writers

Der Ausschnitt lautet 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 Codeausschnitt (auskommentiert) kann ich den Befehl ausführen und stdout aus der Batchdatei erfassen. Im zweiten Codeausschnitt kann ich stdout nicht erfassen.

Ich muss das Batch-Skript mit erhöhten Berechtigungen ausführen können und suche daher nach einem Kompromiss zwischen der Funktionalität der beiden.

Ich kann das gesamte aufrufende Skript aufgrund von Einschränkungen durch andere Funktionsteile nicht im erhöhten Modus ausführen.

Ich bin auf der Suche nach Ideen, wie ich diese Ausgabe zu meinem Protokoll hinzufügen kann, da mir im Rahmen grundlegender Skripts die Optionen ausgehen.

Antwort1

strcmd="cmd /c " & sCurPath & "\vsswritercheck.bat"
return = wshshell.run(strcmd , 0 , true)
if return=0 then
    blnSuccess = True
else
    blnSuccess = False
end if

Antwort2

Wie wäre es, beide zu verwenden?

Verwenden Sie den auskommentierten Code, der im nicht erhöhten Modus funktioniert, und fügen Sie einen zusätzlichen Test hinzu, bei dem sich das Skript, wenn erhöhte Rechte erforderlich sind, stattdessen selbst mit ShellExecute() aufruft, wodurch der nachfolgende Aufruf von Exec() bereits über erhöhte Rechte verfügt und trotzdem stdout erfasst.

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

verwandte Informationen