首页 > 解决方案 > 如何通过使用域管理员凭据运行的脚本在未加入域的服务器上运行 WMI 命令

问题描述

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

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

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 方法,但这不起作用。

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

标签: vbscriptactive-directorywmiwindows-server-2008-r2

解决方案


解决方案在这里:使用 VBScript 远程连接到 WMI

查看“使用 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”替换为对该计算机具有权限的用户名和密码。然后,您可以像使用objSWbemServices对象一样使用该wmi对象。

如果您也从域内的机器上运行它,那应该可以工作......我认为。试试看。


推荐阅读