将凭据传递给VBS中的WMI调用

时间:2010-10-14 03:29:18

标签: vbscript wmi credentials hta

我在HTA中有VBScript从本地WMI调用获取ping状态..我还有一个函数来获取远程pc的最后一次重启时间..

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 个答案:

答案 0 :(得分:7)

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

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

如果您在Google上搜索“WbemScripting.SWbemLocator”,可以使用更多文档

答案 1 :(得分:0)

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

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