gpt4 book ai didi

vbscript - 如何将日志添加到我的vbscript

转载 作者:行者123 更新时间:2023-12-04 09:41:04 29 4
gpt4 key购买 nike

我有此脚本可读取计算机列表,并检查计算机是否安装了正确的软件版本。脚本向我回显了版本错误的计算机,但我想改成日志

Dim strComputer, objFSO, ObjShell, strDisplayName, objList, strObject
Dim objReg, arrSubKeys, strProduct, strVersion, strReqVersion
Const For_Writing = 2
Const ForReading = 1
const ForAppending = 3
Const HKLM = &H80000002
Const strKeyPath = "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
strReqVersion = "8.2.1 MP2"
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objShell = CreateObject("WScript.Shell")
Set objList = objFSO.OpenTextFile("c:\test\test.txt",ForReading)
Do While Not objList.AtEndOfStream
strComputer = objList.ReadLine
If HostOnline(strComputer) = True Then
Inventory(strComputer)
End If
Loop
Function Inventory(strComputer)
Set objTextFile = objFSO.OpenTextFile("c:\test\inventory.txt",2,true)
'creating a dictionary object
Set objDictionary = CreateObject("Scripting.Dictionary")
Set objReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _
strComputer & "\root\default:StdRegProv")
' Enumerate the subkeys of the Uninstall key
objReg.EnumKey HKLM, strKeyPath, arrSubKeys
For Each strProduct In arrSubKeys
' Get the product's display name
objReg.GetStringValue HKLM, strKeyPath & "\" & strProduct, "DisplayName", strDisplayName
' Process only products whose name contain 'symantec'
If InStr(1, strDisplayName, "Symantec", vbTextCompare) > 0 Then
' Get the product's display version
objReg.GetStringValue HKLM, strKeyPath & "\" & strProduct, "DisplayVersion", strVersion
If strReqVersion <> strVersion Then
WScript.Echo strObject
objDictionary.Add strComputer, strVersion
For Each strObject In objDictionary
WScript.Echo strObject

objTextFile.WriteLine(strObject)
Next
objTextFile.Close
End If
End If
Next
End Function
Function HostOnline(strComputername)
'---------- Test to see if host or url alive through ping -----------------
' Returns True if Host responds to ping
'
' strComputername is a hostname or IP
Const OpenAsASCII = 0
Const FailIfNotExist = 0
Const ForReading = 1
Dim objShell, objFSO, sTempFile, fFile
Set objShell = CreateObject("WScript.Shell")
Set objFSO = CreateObject("Scripting.FileSystemObject")
sTempFile = objFSO.GetSpecialFolder(2).ShortPath & "\" & objFSO.GetTempName
objShell.Run "cmd /c ping -n 2 -l 8 " & strComputername & ">" & sTempFile, 0 , True
Set fFile = objFSO.OpenTextFile(sTempFile, ForReading, FailIfNotExist, OpenAsASCII)
Select Case InStr(fFile.ReadAll, "TTL=")
Case 0
HostOnline = False
Case Else
HostOnline = True
End Select
ffile.close
objFSO.DeleteFile(sTempFile)
Set objFSO = Nothing
Set objShell = Nothing
End Function

有人可以帮我吗,谢谢

最佳答案

有几种方法可以做到这一点。最简单的方法,无需对脚本进行任何修改,就是使用cscript.exe调用脚本(在命令提示符下)并将输出重定向到文件:

cscript your.vbs > output.log

但是,如果即使用户双击脚本也要创建日志,则必须更改脚本,以便将其写入文件而不是回显输出。在脚本开头打开日志文件:
Set myLog = objFSO.OpenTextFile("C:\my.log", For_Writing, True)

WScript.Echo ...替换 myLog.WriteLine ...,并在退出脚本之前关闭文件:
myLog.Close

一种更复杂的方法是创建一组日志记录功能,这将允许您根据某些条件(例如, LogInfo()用于提供信息日志消息, LogError()用于提供错误。

无耻插件:不久前,我厌倦了一次又一次地编写相同的样板日志记录功能,所以我写了一个 logger class,其中封装了常用的日志记录功能(交互式控制台,文件,事件日志),并提供了4个日志的日志记录方法。级别(错误,警告,信息,调试)。该类可用于记录到如下文件:
Set myLog = New CLogger
myLog.LogToConsole = False
myLog.LogFile = "C:\my.log"

myLog.LogInfo "info message"
...
myLog.LogError "an error occurred"

释放对象后,日志文件将自动关闭。

关于vbscript - 如何将日志添加到我的vbscript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15908042/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com