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

Vbscript 如何通过使用域管理员凭据运行的脚本在非加入域的服务器上运行WMI命令,vbscript,active-directory,wmi,windows-server-2008-r2,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) & ":

我有一个从计划任务运行的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
此脚本适用于所有加入域的服务器。但是我需要将一个未加入域的服务器包括到这个检查中,并且由于脚本在目标服务器上缺乏必要的权限,所以它失败了

我尝试了一种黑客方法,创建一个与域管理员帐户同名、密码相同的本地用户帐户,并将其添加到本地管理员中,但没有成功

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

解决方案如下:

查看标题“使用VBScript连接到远程系统”下的选项2。您可以使用该方法向连接传递不同的凭据。看起来是这样的:

strComputer = "Computer_B"
Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator")
Set objSWbemServices = objSWbemLocator.ConnectServer(strComputer, _
                                                     "Root\CIMv2", _
                                                     "fabrikam\administrator", _
                                                     "password")
只需将“fabrikam\administrator”和“password”替换为在该计算机上具有权限的用户名和密码。然后,您可以使用该
objSWbemServices
对象,就像使用
wmi
对象一样


如果你也在域内的机器上运行它,这应该是可行的。。。我想。试试看。

谢谢。这是可行的,但我有点厌倦了将服务器密码以明文形式存储在脚本中,因此我可能不得不考虑是否在我的情况下使用它。我认为,如果您在未加入域的计算机上运行,您将无法回避这一问题。您必须以某种方式将凭据发送到服务器,以便在那里对其进行身份验证,因为身份验证不能在本地计算机上进行。