2009-03-20 12 views
0

J'ai un problème intéressant/ennuyeux avec certains VBScripts fonctionnant sur Windows 2003 Server (ils fonctionnent bien sur XP).Erreur WMI après un certain temps

Les scripts appellent de manière périodique des objets WMI pour extraire des informations sur les performances et les écrire dans un fichier journal. Il est démarré par des tâches programmées à 00h05 chaque matin et se poursuit jusqu'à minuit (ou le ferait s'il ne s'écrasait pas). Il appartient à l'administrateur et la tâche est "cscript xx.vbs blah blah blah".

Parfois, il fonctionne pendant des heures, parfois seulement quelques minutes. Les appels sont de la forme:

set objWMI = getObject("winmgmts:\\.\root\cimv2") 
: : : 
do lots of times: 
    set itemCpu = wmi.get("Win32_PerfRawData_PerfOS_Processor.Name='_Total'") 

L'erreur, il revient avec une boîte de dialogue indiquant que l'appel de procédure distante a échoué à exécuter, mais aucune information supplémentaire (il ne donne un nombre hexadécimal 32 bits et I » Je mettrai cette question à jour avec la prochaine fois que cela arrivera, mais mes recherches sur Google ont montré des pages très génériques, donc je ne suis pas sûr que le code vous aidera).

Il a également utilisé pour écraser sur (même erreur) avec la ligne suivante, mais je n'ai pas vu un problème avec celui-ci depuis je l'ai changé à utiliser Win32_Perf Raw Data_PerfOS_Memory. Je comprends que ce n'est pas lié au réseau, car il est sur la même machine.

J'ai également essayé de mettre objWMI à zéro et de faire un autre getObject à chaque fois à travers la boucle, mais cela n'a pas aidé.

Un autre problème possible, il fonctionne réellement à l'intérieur de VMWare Workstation (mais il en est de même de l'XP) - la semaine prochaine, j'obtiendrai une configuration PC physique de Win2k3 pour le tester.

L'étrange est mince, il fonctionne parfois pendant des heures sans problèmes, la collecte des données et l'envoi dans le fichier journal. D'autres fois, il se bloque dans dix minutes.

Des idées des gourous Windows parmi nous?

MISE À JOUR:

D'accord, il a échoué finalement à nouveau. Voici mon petit effort de capture d'écran:

 
+-------------------------------------------------+ 
| Windows Script Host       |X| 
+-------------------------------------------------+ 
|/ Script: C:\Program Files\blah\blah.vbs | 
| /\ Line:  271        | 
|  Char:  2        | 
|  Error: The remote procedure call  | 
|     failed and did not execute.  | 
|  Code:  800706BF      | 
|  Source: SWbemServicesEx     | 
+-------------------------------------------------+ 

Ligne 271 est:

set itemCpu = wmi.get("Win32_PerfRawData_PerfOS_Processor.Name='_Total'") 

avec wmi ayant été préalablement sélectionnée avec:

set wmi = getObject("winmgmts:\\.\root\cimv2") 

(celui-ci est continuellement re -created à l'intérieur de la boucle, donc je ne pense pas que ce soit un problème avec la connexion RPC devenir obsolète).

+0

A propos des erreurs dans l'événement, rien? – lsalamon

+0

Rien dans la visionneuse d'événement du tout (j'aurais dû le mentionner). – paxdiablo

Répondre

1

L'erreur 1722 (0x6BF) est: Le serveur RPC est indisponible.

Une suggestion: gratuit tous les objets explicitement dans votre script

Pour mieux diagnostiquer EFFECTUER essayer de renifler votre réseau à l'aide Microsoft Network Monitor 3.2 et recherche de problème.(Voir cette aide How to capture network traffic with Network Monitor)

Bonne apparence.

+0

Il s'avère que c'était partiellement la solution. Il y avait un couple d'objets qui n'étaient pas explicitement libérés, bien que je pensais qu'ils seraient quand les variables ont été assignées avec quelque chose d'autre ou sont sorties de la portée. L'autre moitié du problème frappait WMI aussi fort que possible. – paxdiablo

+0

Lorsque j'ai explicitement libéré tous les objets dès que j'en avais fini avec eux ET que je ne demandais de WMI qu'une fois toutes les dix secondes, le problème disparaissait. Eh bien, il peut toujours être là, mais mon processus redémarre tous les minuit afin que le bit lent en cours d'exécution peut le faire arriver toutes les 25 heures au lieu de trois-ish :-) – paxdiablo

+0

Donc, +1 et accepter. Vous m'avez aidé à éviter d'avoir à réécrire la chose dans C. – paxdiablo

1

Si votre script vérifie les comptes d'utilisateurs lors de son exécution, consultez ce correctif. C'est seulement un problème sur 2003 qui peut expliquer pourquoi cela fonctionne bien sur votre système XP.

http://support.microsoft.com/kb/933593

Il était à l'origine des problèmes aléatoires pour nous au travail qui ne correspondait pas tout à fait la description dans l'article, mais le correctif a fait corriger nos problèmes.

+0

@Jerb, +1 pour l'info mais elle n'a pas résolu le problème spécifique que j'avais. – paxdiablo