comment ajouter un journal pour mon vbscript
j'ai ce script qui lit une liste d'ordinateurs et de vérifier pour voir si les ordinateurs ont la bonne version de logiciel à installer. le script echo pour moi, les ordinateurs avec la mauvaise version, mais je veux faire un journal de la place
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
peut-on m'aider svp merci
OriginalL'auteur user1766952 | 2013-04-09
Vous devez vous connecter pour publier un commentaire.
Il y a plusieurs façons de le faire. La façon la plus simple, sans aucune modification de votre script, serait d'appeler le script avec
cscript.exe
(dans l'invite de commande) et de rediriger la sortie vers un fichier:Cependant, si vous souhaitez un journal à être créé, même lorsque les utilisateurs double-cliquez sur votre script, vous devrez modifier votre script afin qu'il écrit dans un fichier au lieu d'en écho à la sortie. Ouvrez le fichier journal au début du script:
remplacer
WScript.Echo ...
avecmyLog.WriteLine ...
, et fermer le fichier avant de quitter le script:Un peu plus sophistiqué, approche serait de créer un ensemble de fonctions de journalisation, qui vous permettent de créer des lignes de log en fonction de certaines conditions, par exemple
LogInfo()
pour information les messages du journal desLogError()
pour les erreurs.Shameless plug: il y a Quelques temps j'en ai eu marre avec l'écriture de la même standard les fonctions de journalisation, encore et encore, j'ai donc écrit un enregistreur de classe qui encapsule l'habitude de journalisation (console interactive, fichiers, journal des événements) et fournit des méthodes de journalisation pour les 4 niveaux du journal (Erreur, Avertissement, Information, Debug). La classe peut être utilisée pour la connexion à un fichier comme ceci:
Le fichier journal est automatiquement fermé lorsque l'objet est libéré.
Copier/coller le code de la classe à votre script et de l'utiliser comme décrit ci-dessus.
OriginalL'auteur Ansgar Wiechers
Pourquoi ne pas utiliser le journal des événements du système? J'ai décrit comment dans cette réponse
Cela signifie la plupart du travail est fait pour vous et vous n'avez pas besoin de vous soucier de l'emplacement de votre fichier de log
OriginalL'auteur Jobbo