如何 运行 使用域管理员凭据从脚本 运行ning 在未加入域的服务器上执行 WMI 命令

How to run WMI commands on non-domain-joined server from script running using domain admin credentials

我有一个来自计划任务的 windows 脚本 运行,使用域凭据设置为 运行。

它使用 WMI 检查我加入域的所有服务器上的磁盘 space。

Set wmi = GetObject("winmgmts:\" & hostname & "\root\cimv2")
...

Set wmiresults = wmi.ExecQuery("SELECT * FROM Win32_LogicalDisk WHERE Name = '" & _
    UCase(diskletter) & ":'")

For Each wmiresult In wmiresults
    ptotalspace = Round(CDbl(wmiresult.Size) / 1073741824, 2) 
    pfreespace = Round(CDbl(wmiresult.Freespace) / 1073741824, 2) 
Next

此脚本适用于所有加入域的服务器。但是我需要在此检查中包括一个未加入域的服务器,但由于脚本缺少对目标服务器的必要权限,它失败了。

我尝试过使用与域管理员帐户相同的名称和密码创建本地用户帐户并将其添加到本地管理员的 hacky 方法,但这没有用。

有没有办法允许脚本权限检查服务器的磁盘而无需将其加入域,并且不必创建此脚本的副本或版本 运行s 使用本地帐户执行此检查的权限?

解决方法在这里:Connecting to WMI Remotely with VBScript

查看标题 "To connect to a remote system using VBScript" 下的选项 2。您可以使用 SWbemLocator.ConnectServer 方法将不同的凭据传递给连接。它看起来像这样:

strComputer = "Computer_B"
Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator")
Set objSWbemServices = objSWbemLocator.ConnectServer(strComputer, _
                                                     "Root\CIMv2", _
                                                     "fabrikam\administrator", _
                                                     "password")

只需将 "fabrikam\administrator" 和 "password" 替换为对该计算机具有权限的用户名和密码。然后您可以像使用 wmi object.

一样使用 objSWbemServices object

如果您也从域内的机器 运行 它应该可以工作...我想。试一试。