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.
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.
sumber