如何使用VBScript将输出从EXE重定向到TXT文件?

时间:2014-04-01 17:52:15

标签: windows vbscript

要求是使用Microsoft SCCM等工具在多个工作站上执行某个脚本。

此脚本是执行EXE' C:\ ugs \ n \ nx5 \ UGII \ env_print.exe '在每个工作站上。这将使用以下参数完成两次:

  • C:\ ugs \ nx5 \ UGII \ env_print.exe -m
  • C:\ ugs \ n \ nx5 \ UGII \ env_print.exe -n

脚本的设计必须使上述输出应存储在工作站的某个位置,SCCM可以从中读取值。

为了达到这个要求,我写了下面的VBscript:

----------------------------------------------- ---------------------------------------------

On Error Resume Next

Const HKEY_LOCAL_MACHINE = &H80000002

Dim WshShell, fso, file, objRegistry, strKeyPath, strSysDrive, outputFile, strTEMP, file2, oTxtFile, oTxtFile2
Dim ComExec, strSysRoot, strComputer, outputFile2, EXEpath, ComExec2, return, return2, text, text2, CMDPath

strComputer = "."
Set WshShell = Wscript.CreateObject("WScript.Shell")
Set fso  = CreateObject("Scripting.FileSystemObject")

Set objRegistry = GetObject("winmgmts:\\" & strComputer & "\root\default:StdRegProv")

strSysDrive = WshShell.ExpandEnvironmentStrings("%SystemDrive%")
strSysRoot = WshShell.ExpandEnvironmentStrings("%SystemRoot%")

EXEpath = strSysDrive & "\ugs\nx5\UGII\env_print.exe"

CMDPath = strSysRoot & "\system32\cmd.exe"

'-----------------------SET TXT FILE LOCATION-----------------------

outputFile = strSysDrive & "\env_print_m.txt"

outputFile2 = strSysDrive & "\env_print_n.txt"

'-----------------------CREATE TEXT FILES-----------------------

Set oTxtFile = fso.CreateTextFile(outputFile)

Set oTxtFile2 = fso.CreateTextFile(outputFile2)

'-------COMMAND TO EXECUTE AND REDIRECT OUTPUT TO TXT FILE-------

ComExec = CMDPath & " /c " & EXEpath & " -m >> " & outputFile

ComExec2 = CMDPath & " /c " & EXEpath & " -n >> " & outputFile2

'-----------------------EXEUTE COMMANDS-----------------------

return = WshShell.Run(ComExec, 0, true)

return2 = WshShell.Run(ComExec2, 0, true)

'-----------------------READ OUTPUT FROM TXT FILES-----------------------

Set file = fso.OpenTextFile(outputFile, 1)

text = file.ReadAll

file.Close


Set file2 = fso.OpenTextFile(outputFile2, 1)

text2 = file2.ReadAll

file.Close

'-----------------------WRITE OUTPUT VALUES TO REGISTRY STRING VALUES-----------------------

strKeyPath = "SOFTWARE\env_print_Ver"

objRegistry.CreateKey HKEY_LOCAL_MACHINE, strKeyPath

WshShell.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\env_print_Ver\env_print_m", text, "REG_SZ"

WshShell.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\env_print_Ver\env_print_n", text2, "REG_SZ"

'-----------------------DELETE TXT FILES-----------------------

fso.DeleteFile outputFile

fso.DeleteFile outputFile2

----------------------------------------------- ---------------------------------------------

此脚本使用所需参数执行EXE,并将输出存储到2个不同的TXT文件( env_print_m.txt env_print_n.txt )。

然后从文本文件中读取这些字符串值,并将它们作为注册表字符串值存储在以下位置,以便SCCM可以读取它。

  • HKEY_LOCAL_MACHINE \ SOFTWARE \ env_print_Ver \ env_print_m
  • HKEY_LOCAL_MACHINE \ SOFTWARE \ env_print_Ver \ env_print_n

但是,在运行Windows XP的工作站上执行此脚本时,输出不会重定向到TXT文件。也没有显示错误。

我在我的智慧结束。请帮忙。

1 个答案:

答案 0 :(得分:0)

由于您的第一个输出文件是已命名/指定outputFile,请更改

Set file = fso.OpenTextFile("outputFile", 1)

Set file = fso.OpenTextFile(outputFile, 1)

(与第二个相同)

尝试访问错误命名的文件应该使用错误消息中止脚本。您通过EVIL global" On Error Resume Next"切换了此功能。摆脱它,看看"输出是否没有被重定向'由错误消息解释。

添加了wrt评论:

如果像

那样的话
WshShell.Run ComExec, 0, true

'不起作用'你应该:

  1. 调用.Run作为函数并检查返回值
  2. 回显命令(ComExec)并尝试从控制台执行此命令
  3. 切换/ c到/ k并查看
  4. 牺牲山羊并考虑权限
  5. 哦,我忘了:

    1. 手动删除输出文件并检查它们是否已创建但未获取内容 - 然后重新编译.exe