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

时间:2019-06-21 09:29:32

标签: vbscript active-directory wmi windows-server-2008-r2

我有一个计划任务运行的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

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

我尝试了一种骇人听闻的方法,即使用与域管理员acct相同的名称和密码创建一个本地用户帐户,并将其添加到本地管理员中,但这没用。

是否有一种方法可以允许脚本权限检查服务器的磁盘而无需将其加入域,也不必创建此脚本的副本或版本,该脚本使用具有执行此检查权限的本地帐户运行? / p>

1 个答案:

答案 0 :(得分:1)

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

在“使用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对象。

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