2008-11-12 17 views
1

J'ai un script VBScript qui lance une invite cmd, telnets dans un périphérique et TFTP la configuration à un serveur. Cela fonctionne quand je suis connecté et exécutez-le manuellement. Je voudrais l'automatiser avec Windows Task Scheduler.Programmer un fichier .vbs à exécuter dans Windows

Toute aide serait appréciée, voici le script VBScript:

set WshShell = WScript.CreateObject("WScript.Shell") 
WshShell.Run "cmd" 
WScript.Sleep 100 
WshShell.AppActivate "C:\Windows\system32\cmd.exe" 
WScript.Sleep 300 
WshShell.SendKeys "telnet 10.20.70.254{ENTER}" 
WScript.Sleep 300 
WshShell.SendKeys "netscreen" 
WScript.Sleep 300 
WshShell.SendKeys "{ENTER}" 
WScript.Sleep 300 
WshShell.SendKeys "netscreen" 
WshShell.SendKeys "{ENTER}" 
WScript.Sleep 300 
WScript.Sleep 300 
WshShell.SendKeys "save conf to tftp 10.10.40.139 test.cfg{ENTER}" 
WScript.Sleep 200 
WshShell.SendKeys "exit{ENTER}" 'close telnet session' 
set WshShell = WScript.CreateObject("WScript.Shell") 
WshShell.Run "cmd" 
WScript.Sleep 100 
WshShell.AppActivate "C:\Windows\system32\cmd.exe" 
WScript.Sleep 300 
WshShell.SendKeys "telnet 10.20.70.254{ENTER}" 
WScript.Sleep 300 
WshShell.SendKeys "netscreen" 
WScript.Sleep 300 
WshShell.SendKeys "{ENTER}" 
WScript.Sleep 300 
WshShell.SendKeys "netscreen" 
WshShell.SendKeys "{ENTER}" 
WScript.Sleep 300 
WScript.Sleep 300 
WshShell.SendKeys "save conf to tftp 10.10.40.139 palsg140.cfg{ENTER}" 'repeat as needed 
WScript.Sleep 200 
WshShell.SendKeys "exit{ENTER}" 'close telnet session' 
WshShell.SendKeys "{ENTER}" 'get command prompt back 
WScript.Sleep 200 
WshShell.SendKeys "exit{ENTER}" 'close cmd.exe 

WshShell.SendKeys "{ENTER}" 'get command prompt back 
WScript.Sleep 200 
WshShell.SendKeys "exit{ENTER}" 'close cmd.exe 
+2

Qu'est-ce qui se passe quand vous essayez? Vous ne dites pas quels problèmes vous rencontrez –

Répondre

4

Ajouter une tâche planifiée qui exécute le script avec vos informations d'identification. Rappelez-vous que vous devez mettre à jour les informations d'identification de la tâche chaque fois que vous modifiez votre mot de passe. Ce serait une bonne idée d'avoir le script "téléphone à la maison" par courriel ou quelque chose à chaque fois qu'il est exécuté afin que vous puissiez dire si elle est en cours d'exécution.

Il peut également être judicieux de configurer un ID de service distinct pour ce type d'activité. Vous n'aurez peut-être pas besoin de changer le mot de passe sur l'ID de service aussi fréquemment.

+0

Si telnet et cscript peuvent avoir besoin d'un contexte de bureau pour s'exécuter (en particulier avec "sendkeys"). Vous devrez peut-être laisser l'utilisateur connecté à l'ordinateur pour que la tâche planifiée fonctionne correctement. –

3

Vous pouvez ajouter une tâche planifiée et n'y entrer aucune information d'identification ou mot de passe. Cela l'amènera à s'exécuter sous LOCAL SYSTEM (qui est normalement le contexte utilisé par le service Planificateur de tâches). Sachez qu'il s'agit d'un scénario de vulnérabilité de porte dérobée: Toute personne autorisée à modifier votre fichier de script risque d'utiliser à mauvais escient les choses indésirables sur la machine qui exécute la tâche. Mettez l'autorisation appropriée sur le fichier de script pour empêcher cela. D'un autre côté, une tâche exécutée comme LOCAL SYSTEM ne peut pas détruire le réseau.

Je propose que vous condensent votre fichier script un peu.

 
Set WshShell = WScript.CreateObject("WScript.Shell") 

Run "cmd.exe" 
SendKeys "telnet 10.20.70.254{ENTER}" 
SendKeys "netscreen" 
SendKeys "{ENTER}" 
SendKeys "netscreen" 
SendKeys "{ENTER}" 
SendKeys "save conf to tftp 10.10.40.139 test.cfg{ENTER}" 
SendKeys "exit{ENTER}" 'close telnet session' 

Run "cmd.exe" 
SendKeys "telnet 10.20.70.254{ENTER}" 
SendKeys "netscreen" 
SendKeys "{ENTER}" 
SendKeys "netscreen" 
SendKeys "{ENTER}" 
SendKeys "save conf to tftp 10.10.40.139 palsg140.cfg{ENTER}" 'repeat as needed 
SendKeys "exit{ENTER}" 'close telnet session' 
SendKeys "{ENTER}" 'get command prompt back 
SendKeys "exit{ENTER}" 'close cmd.exe 
SendKeys "{ENTER}" 'get command prompt back 
SendKeys "exit{ENTER}" 'close cmd.exe 

Sub SendKeys(s) 
    WshShell.SendKeys s 
    WScript.Sleep 300 
End Sub 

Sub Run(command) 
    WshShell.Run command 
    WScript.Sleep 100 
    WshShell.AppActivate command 
    WScript.Sleep 300 
End Sub 

+0

Nice Sub's. Cela économise environ 20 lignes! +1 ;-) – Kredns

1

Je suis assez sûr SendKeys ne fonctionnera pas si le bureau est verrouillé ou non utilisateur est connecté

1

Je suis assez SendKeys ne fonctionnera pas si vous n'êtes pas connecté. Ce n'est pas fiable dans mon expérience de toute façon. Il vaudrait peut-être mieux utiliser un fichier batch DOS.

getftpconf.bat:

telnet 10.10.40.139 
netscreen 
netscreen 
save conf to tftp 10.10.40.139 palsg140.cf 
exit 

Quelque chose comme ça.

S'il y a une sortie dans l'invite de commande que vous devez enregistrer, vous pouvez mettre un ">> output.txt" à la fin du raccourci de la ligne de commande.

Vous pouvez ensuite appeler un autre fichier batch qui envoie ce fichier output.txt via ftp à l'endroit où vous en avez besoin.

Vous pouvez facilement configurer ce fichier de commandes pour qu'il s'exécute en tant que tâche planifiée dans Windows.

0

Les fichiers batch ne fonctionnent pas dans Windows avec Telnet (fonctionne très bien sous UNIX - encore une fois, aller à Microsoft). Comme déjà mentionné ici, sendkeys ne fonctionne pas dans vba lorsqu'il n'est pas connecté.

Désolé, je n'ai pas « cela fonctionne » solution pour vous .... Je suis coincé sur le même problème

1

juste un exemple de fichier de commandes qui contient ceci:

cscript.exe myscript.vbs 

enregistrez-le comme quelque chose comme myscript.bat.

Utilisez des tâches planifiées pour planifier le fichier .bat. Après avoir créé la tâche planifiée, vous devrez peut-être vérifier ses propriétés pour vous assurer que les droits d'utilisateur sont appropriés.

Il y a some options vous pouvez utiliser avec cscript il ne montre pas le logo, etc.