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.