2017-10-14 2 views
1
Set sh = CreateObject("Wscript.Shell") 
Set objFSO = CreateObject("Scripting.FileSystemObject") 
Dim counter, myNum, fileLine 
myNum = 0 
counter = 9000000 
Do While myNum < counter 
    myNum = myNum + 1 
    Call GetConnections() 
Loop 

Function GetConnections() 
    i = 0 
    outFile = "netband_logger_vbs.tmp" 
    Set objFile = objFSO.CreateTextFile(outFile, True) 
    Set shExec = sh.Exec("netstat -e") 
    Do While Not shExec.StdOut.AtEndOfStream 
     fileLine = shExec.StdOut.ReadLine() 
     objFile.Write fileLine & vbCrLf 
     objFile.Close 
    Loop 
End Function 

J'ai au-dessus du VBScript. Ce que je veux faire est d'exécuter la commande netstat -e 9000000 fois et écrire chaque ligne de sortie dans un fichier texte ligne par ligne. Et chaque fois que le premier cycle d'exécutions est terminé, le script doit remplacer le contenu précédent du fichier netband_logger_vbs.tmp avec les valeurs de la nouvelle série d'exécutions.VBScript lance "variable objet pas encore défini" erreur

Actuellement, j'ai deux problèmes: Je n'arrive pas à écrire la sortie complète dans mon fichier .tmp et je suis également confronté à une erreur "variable d'objet non définie".

Répondre

1

L'erreur que vous obtenez est probablement parce que vous fermez le handle de fichier après la première itération. Pour résoudre ce problème, déplacez la ligne objFile.Close après la boucle. Cela dit, je ne recommanderais pas d'utiliser la méthode Exec ici de toute façon. Dans votre scénario, il est beaucoup plus facile de débourser pour CMD et utiliser la redirection de sortie:

sh.Run "%COMSPEC% /c netstat -e >""" & outFile & """", 0, True 
0

Quant à savoir pourquoi vous ne pouvez pas obtenir toutes les sorties ensemble dans un seul fichier; le système de fichiers FAT32 a un plafond de 4 Go, et si vous écrivez beaucoup de petits fichiers .tmp, il y a un plafond de répertoire.

Et pour éviter que le fichier soit fermé pendant un laps dans le mouvement de flux StdOutobjFile.Close pour après la Loop

+0

Il en écrasant le même fichier à chaque itération, et je doute en quelque sorte qu'un seul terme 'netstat' générerait Sortie de 4+ Go. Sans oublier que la limitation de 4 Go s'applique uniquement s'il utilise FAT32 en premier lieu. Ce qui est également douteux. –