vbscript - 如何通过使用域管理员凭据运行的脚本在未加入域的服务器上运行 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 方法,但这不起作用。
有没有办法允许脚本权限检查服务器的磁盘而不将其加入域,并且不必创建使用具有执行此检查权限的本地帐户运行的此脚本的副本或版本?
解决方案
解决方案在这里:使用 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
对象。
如果您也从域内的机器上运行它,那应该可以工作......我认为。试试看。
推荐阅读
- java - spring 状态机并行实例中子状态的异步执行
- javascript - 省略的可选输入设置为 null 而不是 undefined
- ruby-on-rails - 为什么 link_to URL 参数不能与符号一起正常工作
- javascript - 为什么 firebase signInWithEmailAndPassword 不会触发 onAuthChange?
- magento - 如何将 magento 1.9 代码迁移到 magento 2.3
- json - 从 iforge 获取数据并将其导入 csv 时的时间戳问题
- python - 从python中的邻接矩阵计算距离矩阵
- ios - 如何通过使用不同的类来切换 SceneKit 视图
- google-apps-script - 在电子表格之间复制所有单元格内容的最佳方法
- java - 如何映射 OneToOne 递归实体?