2010-10-14 41 views
6

J'ai VBScript dans une HTA obtenir le statut de ping à partir d'un appel WMI locale .. J'ai aussi une fonction pour obtenir la dernière fois de redémarrage de l'ordinateur distant ..de vérification des pouvoirs Pass pour WMI Appel en VBScript

Function GetReboot(strComputer) 
    Set objWMIService = GetObject _ 
     ("winmgmts:\\" & strComputer & "\root\cimv2") 
    Set colOperatingSystems = objWMIService.ExecQuery _ 
     ("Select * from Win32_OperatingSystem") 
    For Each objOS in colOperatingSystems 
     dtmBootup = objOS.LastBootUpTime 
     dtmLastBootupTime = WMIDateStringToDate(dtmBootup) 
     dtmSystemUptime = DateDiff("h", dtmLastBootUpTime, Now) 
     Wscript.Echo dtmSystemUptime 
    Next 
    GetReboot = dtmLastbootupTime 
End Function 

C'est à peu près ce que c'est, évidemment je déclare les variables et ai une autre fonction de date etc.

Cela fonctionne si j'appelle "localhost" de WMI car je suis un admin local .. cependant en faisant l'appel de WMI à un serveur distant cela ne fonctionne que si je suis connecté à mon ordinateur local avec un compte administrateur AD.

Y a-t-il un moyen de demander à l'utilisateur un nom d'utilisateur et un mot de passe, puis de le passer à l'appel WMI afin qu'il fonctionne comme n'importe qui avec les détails d'administration?

Répondre

7

Il semble que la méthode SWbemLocator.ConnectServer vous permet de spécifier un nom d'utilisateur et un mot de passe lors de la connexion à des ordinateurs distants. Il ressemble à la syntaxe que vous devez utiliser est similaire, il vous suffit de créer votre objet objWMIService différemment:

Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator") 
Set objWMIService = objSWbemLocator.ConnectServer("MachineName", "root\cimv2", "Username", "Password") 

Plus de documentation est disponible si vous recherchez « WbemScripting.SWbemLocator » sur Google

+0

Salut Kragen, je vous remercie pour la réponse, vous êtes en mesure de me dire s'il est possible de déboguer cela? J'ai mis en application ceci dans mon code et je n'obtiens aucune erreur .. cependant je n'obtiens toujours pas de réponse et par conséquent accès refusé. Si je l'exécute pendant que je suis connecté en tant que compte administrateur, cela fonctionne bien ... – medoix

+0

@medoix - Si vous exécutez le débogage de script activé, vous devriez pouvoir placer une instruction 'Stop' sur le devant de votre fonction pour forcer un point d'arrêt. – Justin

0

Comme un administrateur de domaine, vous seriez en mesure d'ajouter un droit supplémentaire à votre compte, ce qui vous permettrait de démarrer des processus comme tout autre utilisateur. Ce droit dans AD est appelé "Autoriser l'utilisateur à être approuvé pour la délégation". C'est extrêmement puissant. C'est le seul moyen légitime d'exécuter votre tâche en tant qu'un autre utilisateur. Voir ce lien pour définir le droit:

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