【问题标题】:Pass Credentials to WMI Call in VBScript在 VBScript 中将凭据传递给 WMI 调用
【发布时间】:2010-10-14 03:29:18
【问题描述】:

我有一个 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 调用,这样它就可以像任何人一样使用管理员详细信息?

【问题讨论】:

    标签: vbscript wmi credentials hta


    【解决方案1】:

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

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

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

    【讨论】:

    • 嗨 Kragen,谢谢你的回复,你能告诉我是否可以调试这个吗?我已经在我的代码中实现了这一点,我没有收到任何错误..但是我仍然没有得到响应,因此访问被拒绝。如果我在以管理员帐户登录时运行它,它可以正常工作...
    • @medoix - 如果您在启用脚本调试的情况下运行,那么您应该能够在函数前面放置 Stop 语句来强制断点。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2014-04-10
      • 1970-01-01
      • 2017-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-29
      相关资源
      最近更新 更多