VBScript Capture StdOut dari ShellExecute

2

Saya mencoba menjalankan cuplikan kode berikut sebagai bagian dari alat untuk mengumpulkan dan mencatat beberapa diagnostik sistem terkait. Tujuan cuplikan ini adalah untuk mengumpulkan hasil menjalankan perintah:

vssadmin list writers

Cuplikannya adalah sebagai berikut:

'   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

Dengan potongan kode pertama (dikomentari) saya dapat menjalankan perintah dan menangkap stdout dari file batch. Dalam kode kedua yang terpotong, saya tidak dapat menangkap stdout.

Saya harus dapat menjalankan skrip batch dengan izin yang tinggi, jadi saya mencari kompromi antara fungsionalitas keduanya.

Saya tidak dapat menjalankan seluruh skrip panggilan dalam mode tinggi karena pembatasan dari fungsi lain.

Saya mencari ide tentang cara menambahkan output ini ke log saya karena saya kehabisan opsi yang berada dalam lingkup skrip dasar.

Joe
sumber

Jawaban:

1
strcmd="cmd /c " & sCurPath & "\vsswritercheck.bat"
return = wshshell.run(strcmd , 0 , true)
if return=0 then
    blnSuccess = True
else
    blnSuccess = False
end if
José Luís Teixeira
sumber
Alangkah baiknya jika Anda bisa memberikan sedikit konteks untuk pergi dengan kode :)
Der Hochstapler
Saya pikir itu hampir apa yang saya butuhkan, tetapi saya perlu menangkap StdOut dari skrip, tidak hanya jika itu berhasil atau tidak.
Joe
0

Bagaimana kalau menggunakan keduanya?

Gunakan kode yang Anda komentari, yang bekerja dalam mode non-elevasi, dan tambahkan tes tambahan di mana, jika hak-hak tinggi diperlukan, skrip akan memanggil dirinya sendiri menggunakan ShellExecute (), menyebabkan panggilan berikutnya ke Exec () sudah ada hak tinggi dan masih menangkap stdout.

Agak aneh, tapi tanpa usaha.

Licik
sumber