VBScript中传递凭据到WMI调用

6

我在HTA中使用VBScript从本地WMI调用获取ping状态。我还有一个函数可以获取远程计算机的最后重启时间。

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

大致上,我声明了变量并拥有另一个日期函数等等。

如果我使用WMI调用“localhost”,作为本地管理员,这个方法可以工作。然而,当对远程服务器进行WMI调用时,只有在我使用AD管理员帐户登录到我的本地机器时才能工作。

是否有一种方法可以提示用户输入用户名和密码,然后将其传递给WMI调用,以便任何人都可以使用管理员详细信息工作?

2个回答

7

看起来 SWbemLocator.ConnectServer 方法允许您在连接到远程计算机时指定用户名和密码。语法看起来相似,您只需要以不同方式创建 objWMIService 对象:

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

如果你在谷歌上搜索"WbemScripting.SWbemLocator",就可以找到更多与之相关的文档。


嗨Kragen,谢谢您的回复,您能告诉我是否有可能调试这个问题吗?我已经将它实现到我的代码中,并没有出现任何错误...然而我仍然没有得到响应,因此被拒绝访问。如果我使用管理员帐户登录运行它,它可以正常工作... - medoix
@medoix - 如果你启用了脚本调试,那么你应该能够在函数前面放置一个“Stop”语句来强制停止断点。 - Justin

0
作为域管理员,您可以向您的帐户添加额外的权限,使您能够以任何其他用户的身份启动进程。在AD中,这个权限被称为“允许用户委派信任”。它非常强大。这是唯一合法的以另一个用户的身份运行任务的方法。请参阅此链接设置该权限:

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接