`

如何使用 WMI 管理远程计算机

阅读更多

转自:http://hi.baidu.com/peter_she/blog/item/2203c4f198411ac87931aab5.html

 

一般情况下,可以在本地计算机上执行的 WMI 操作也可以在远程计算机上执行,只要您拥有该计算机的管理员权限。 如果您对远程命名空间拥有权限(请参见如 何设置 WMI 命名空间的安全性? ) 并且远程计算机支持远程访问,您就可以连接到该远程计算机并执行拥有相应权限的操作。另外,如果远程计算机启动了委派,您还可以使用委派功能。委派允许远 程计算机使用来自客户端的身份验证信息到另外一台计算机上获取数据。 换句话说,您可以在计算机 A 上运行脚本连接到计算机 B;计算机 B 将会使用运行在计算机 A 上的脚本所提供的用户名和密码来连接计算机 C。关于委派情境的故障处理,请参见远 程操作涉及到第三台计算机的时候为何失败?

使用 WMI 工具连接远程命名空间

1.

想使用类似 CIM Studio 或 Wbemtest 这样的工具进行远程连接,必需按照以下格式指定一个命名空间:“\\<machinename>\root \<namespace>”
例如:\\myserver\root\cimv2

2.

身份验证可以使用 Kerberos 或 NTLM 进行处理。如果使用 NTLM 或默认(非 Kerberos)验证,请指定如下内容:

User :<domain>\<User>
Password :<password>
Authority :保留空白,或者输入 “NTLMDomain:<domain>”。如果想要包含 Authority 参数,请把“<domain>\”从 User 参数中去掉,只输入用户名即可。例如:

User :kenmyer
Password :45Tgfr98q
Authority :NTLMDomain:fabrikam

3.

要使用 Kerberos 认证,请按如下指定:

User :<domain>\<User>
Password :<password>
Authority :在这里输入 “Kerberos:<domain>\<machinename>”。例如:

User :kenmyer
Password :45Tgfr98q
Authority :Kerberos:fabrikam\atl-ws-01

使用脚本连接到远程计算机上的 WMI

1.

开始之前,请确保对远程命名空间拥有相应的权限。 如果拥有权限,您可以在不指定用户身份信息的情况下连接到远程计算机。WMI 将使用您登陆时输入的用户身份进行连接。

2.

如果不指定用户身份信息,您可以使用被称作 别名字符串 的简短连接语法连接到远程计算机。更多信息,请访问:http://msdn.microsoft.com/library/default.asp 并搜索 “Constructing a Moniker String”(构造一个别名字符串)。例如,以下别名字符串将连接到一个名为 TargetComputer 的远程计算机的默认命名空间(因为没有指定命名空间,会自动连接到默认的命名空间):

Set objWMIService = GetObject("winmgmts:\\TargetComputer”)

如果 TargetComputer 位于另外一个域中,还必需在命名空间中包含域名。否则将会返回一个“拒绝访问”错误。例如,以下命名空间连接到位于 DomainName 域的 TargetComputer 计算机:

Set objWMIService = GetObject("winmgmts:\\DomainName\TargetComputer”)

尽管不是必需的,您也可以在别名字符串中指定 WMI 命名空间。这对连接到不同平台是非常有帮助的,因为在不同版本的操作系统上默认的命名空间不完全相同。例如,在 Windows 2000、Windows XP 和 Windows Server 2003 上,默认的命名空间是 root\cimv2;但是,在 Windows NT 4.0 和 Windows 98 上,默认的命名空间是 root\default。

以下别名字符串连接到远程计算机 TargetComputer 的 root\cimv2 命名空间:

Set objWMIService = GetObject("winmgmts:\\TargetComputer\root\cimv2)

如果需要处理多种平台,您可能还需要指定 Impersonation(模拟)级别; 尽管 Windows 2000 和更高版本的默认 Impersonation 级别为“Impersonate”,但之前版本的 Windows 的默认 Impersonation 级别为“Identify”。如果需要处理 Windows NT 4.0 和(或)Windows 98 计算机,需要在别名字符串中包含 Impersonation 级别;使用委派的时候也需要包含 Impersonation 级别。

以下别名连接到 TargetComputer 的 root\cimv2 命名空间,并且指定了“Impersonate”作为 Impersonation 级别:

Set objWMIService =    GetObject _
    ("winmgmts:{impersonationLevel=Impersonate}!\\TargetComputer\root\cimv2")

最后,您可能还需要根据操作系统版本的不同来设置 Authentication(身份验证)级别。您可以通过指定 Authentication 级别来请求 DCOM 的身份验证类型和在整个连接过程中需要用到的隐私数据。它的设置的范围从“无身份验证”一直到“每数据保加密身份验证”(per-packet encrypted authentication)。

以下别名连接到名为 TargetComputer 的计算机的 root\cimv2 命名空间,同时指定了 Impersonation 级别为“Impersonate”。另外,它还将 Authentication 级别配置为 pkt:

Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate," _ &    
         "authenticationLevel=pkt}!\\  _ 
            TargetComputer\root\cimv2")

3.

也可以在脚本中指定用户的身份验证信息;这样,即使您用一个标准用户账户登录到远程计算机,仍然可以运行需要管理员权限的 脚本。更多信息,请访问:http://msdn.microsoft.com/library/default.asp 并搜索 “Creating a WMI Script”(创建 WMI 脚本)。

wbemImpersonationLevelImpersonate = 3
wbemAuthenticationLevelPktPrivacy = 6

Set objLocator = CreateObject("WbemScripting.SWbemLocator")
Set objService = objLocator.ConnectServer _
    ("TargetComputer", "root\cimv2", "UserName", "Password")
objService.Security_.ImpersonationLevel = wbemImpersonationLevelImpersonate
objservices.Security_.AuthenticationLevel = wbemAuthenticationLevelPktPrivacy

注意 。一般来说,在脚本代码中写入管理员密码是不明智的。更好的办法是在每次运行的时候询问密码。

更多信息,请访问http://msdn.microsoft.com/library/default.asp 并搜索“Connecting Between Different Operating Systems”(不同操作系统间的连接)。

使用 WMIC 连接 WMI

如果对远程命名空间拥有权限并且远程计算机支持远程操作,则连接的时候可以不指定用户名和密码,WMIC 会自动使用当前的用户身份信息。例如:

WMIC /NODE:"computer1" OS GET Caption,CSDVersion,CSName

 

如果需要使用委派,应该在 WMIC 连接字符串中包含 /IMPLEVEL:Delegate 和 /AUTHORITY 设置。例如:

WMIC /NODE:"computer1" /IMPLEVEL:Delegate /AUTHORITY:"Kerberos:domain\computer1" OS

另外,您也可以选择指定用户账户和密码(对于 WMI 脚本,默认只有管理员拥有 WMI 远程连接权限)。例如:

WMIC /NODE:"computer1" /USER:"domainname\username" OS GET Caption,CSDVersion

下面这个命令的例子包含了密码和用户名:

WMIC /NODE:"computer1" /USER:"domainname\username" /PASSWORD:"userpassword" OS GET Caption,CSDVersion,CSName

更多信息,请访问http://msdn.microsoft.com/library/default.asp 并搜索 “Connecting to WMI on a Remote Computer”(连接到远程计算机上的 WMI)。

“拒绝访问”(Access Denied)错误意味着什么?

试图连接到 WMI 命名空间或对象的时候可能会遇到“Access Denied”错误。Access Denied 错误有多种类型:

0x80041003 (WBEM_E_ACCESS_DENIED)
试图连接命名空间的进程如果没有必需的 WMI 权限通常是出现该错误的原因。试图进行远程访问的账户应该是目标计算机的管理员;另外,该账户的具体权限也需要被启用。
要解决该错误,请检查远程计算机上的命名空间的安全性,确定是否为该账户启用了相应的权限。

0x80070005 (DCOM ACCESS_DENIED)
如果远程计算机不能识别连接用户或者对其具有某种形式的限制(例如,该用户被锁定),就会导致该错误。 这种情况大多数是因为账户属于另外一个域。对 WMI 安全性的最新修改也可能导致该错误发生:

以前版本允许的空密码在 Windows XP 和 Windows Server 2003 中不被允许。

WMI 不支持针对 Windows 98 客户端的异步回调。从 Windows 98 计算机到 Windows XP 计算机的 SWbemServices.ExecNotificationQueryAsync 调用将会向 Windows 98 计算机返回一个“拒绝访问”错误。

DCOM 访问设置可能发生了改变。

如果目标计算机运行 Windows XP,注册表键 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa 下的 Forceguest 值可能被设置为强制禁止 Guest 账户(值为 0)。

0x800706xx (DCOM RPC 错误)

如果远程计算机配置了防火墙,通常会导致该错误。 您需要在防火墙上打开特定端口,允许通过 DCOM 进行远程管理。

或者,计算机可能在映射 IP 和主机名方面出现了问题。要测试这种可能性,请尝试在连接字符串中使用 IP 地址代替主机名:

Set objWMIService = GetObject("winmgmts:\\192.168.1.1")

要排除远程错误

1.

请检查用户是否可以访问远程计算机。在命令提示行执行以下命令:

net user \\< remotecomputer >\\C$ /u:< domain\username > *

2.

在远程计算机上启用“详细的日志记录”,然后重新运行脚本。脚本运行之后, 检查远程计算机上的日志文件(%windir%\system32\wbem\Logs\)。

3.

启用审核事件来判断哪一个账户连接失败。启用之后,您将在事件日志中看到类似如下的事件:

Event Type:????Failure Audit

Event Source:????Security

Event Category:????Logon/Logoff

Event ID:????529

Date:????????6/14/2004

Time:????????10:52:35 AM

User:????????NT AUTHORITY\SYSTEM

Computer:????<remote machine>

Description:

Logon Failure:

?????Reason:????????Unknown user name or bad password

?????User Name:????xuser

?????Domain:????????NTDEV

?????Logon Type:????3

?????Logon Process:????NtLmSsp

?????Authentication Package:????MICROSOFT_AUTHENTICATION_PACKAGE_V1_0

?????Workstation Name:????<console Machine >

4.

Check the DCOM configuration for the Access\Launch permission; the user running the script must have this permission.

5.

如果所有这些检查都正常,如果用户可以被远程计算机识别,但仍然会发生“DCOM 拒绝访问”错误,请联系产品支持服务(http://support.microsoft.com/default.aspx ) 并提供以下信息:

每台计算机运行的操作系统。

安装历史

导致错误发生的步骤

发生错误的脚本或工具

进行 WMI 连接的用户身份信息,包括“身份验证”和“模拟”的级别。

两台计算机的 %windir%\system32\wbem\logs 目录的 zip 文件

分享到:
评论

相关推荐

    Windows Management Instrumentation(WMI):常见问题

    10:如何使用 WMI 管理远程计算机? 11:远程操作涉及到第三台计算机的时候为何失败? 12:为什么我的查询需要很长时间才能完成? 13:如何列出特定计算机上已经安装的所有应用? 14:如何获得性能计数器数据?

    怎样使用WMI查询

    WMI(Windows Management Instrumentation,Windows 管理规范)是一项核心的 Windows 管理技术;用户可以使用 WMI 管理本地和远程计算机。 WMI查询可通过WMI命令查询系统的信息,本文档演示如何使用WMI查询。

    WMI信息VB脚本生成器.exe

    本资源可以获取WMI信息,生成VB脚本,执行生成的脚本查看本机或远程计算机的信息。 WMI简述:WMI是Windows Management Instrumentation (Windows管理工具)的缩写,是内置在 Windows 2000、Windows XP 和 Windows ...

    基于 WMI(Windows Management Instrumentation)的 BIOS 接口设计&lt;固件 C 字营&gt;C

    Script、PowerShell 及 Windows API(C++、C#等)管理本地或远程计算机。使用 WMI 框 架应用程序可以直接访问 EC RAM、 I/O 端口、Memory 地址、芯片寄存器、Setup NV 设 定值,以及其他的系统设备资源。’ 本 Demo ...

    WMI查询工具

    Windows 管理规范(Windows Management Instrumentation)是一项核心的 Windows 管理技术;用户可以使用 WMI 管理本地和远程计算机。WMI 通过编程和脚本语言为日常管理提供了一条连续一致的途径。

    Remote Computer Manager远程管理工具.rar

    Remote Computer Manager 是一款非常实用的远程计算机管理系统,支持IPv4和IPv6协议和远程桌面控制,可以作为服务运行,允许网络管理员集中管理远程计算机进行诸如远程桌面控制、远程关机、运行(执行)命令、启动...

    c#与WMI使用技巧集第1/2页

    1、 什么是WMI WMI是英文Windows Management Instrumentation的简写,它的功能主要是:访问本地主机的一些信息和服务,可以管理远程计算机(当然你必须要拥有足够的权限),比如:重启,关机,关闭进程,创建...

    C#实现远程计算机重启

    WMI("视窗管理规范")可以实现许多的功能,远程计算机 重启就是其中的一个功能。

    C#重启远程计算机的代码

    如果现在只告诉你远程计算机的管理者的登陆帐号,而并不允许你在远程的计算机上面运行一个所谓的客户端程序,让你通过程序来完成重启远程计算机。不知道你是否感觉有些困难了。其实按照上面的这些条件实现重启远程...

    WMI 脚本编程指南

    网管人员的好帮手,可实现计算机的远程管理及控制。

    wmic的文件使用详解.doc

    使用wmic,我们不但可以管理本地计算机,而且还可以管理同一windows域内的所有远程计算机(需要必要的权限),而被管理的远程计算机不必事先安装分析、解释和执行从命令行接受的别名(Alias)的引擎…… 很多人制作...

    wbemtest.exe(WMI测试器工具)

    wbemtest.exe下载,Windows 管理规范测试器 1.打开一个命令提示,键入 C:\&gt;wbemtest.exe,按下 Enter 来开始 ... 连接到本地或远程计算机上的 WMI 服务。显示“连接”对话框,它提供一个标记为 Namespace 的文本输入区

    远程Windows管理工具。 你知道你想要它。-.NET开发

    它允许您检索信息并与网络上的远程计算机进行交互。 (最新版本为v2019.0515,于2019年5月15日发布)Splice Admin Splice Admin是一个远程Windows管理工具。 它允许您检索信息并与网络上的远程计算机进行交互。 ...

    VB中使用WMI获取系统硬件和软件有关信息

    WMI是英文Windows Management Instrumentation的简写,它的功能主要是:访问本地主机的一些信息和服务,可以管理远程计算机(当然你必须要拥有足够的权限),比如:重启,关机,关闭进程,创建进程等

    WMI-VBScripts:我整理了一些VB脚本来帮助诊断Windows PC故障

    远程过程转储提供远程计算机上所有正在运行的进程的列表,包括每个进程使用了​​多少RAM和VM。检查查询文件夹的大小标识哪些用户配置文件具有Microsoft Queries文件夹,以及它们的大小。 这是为了处理我们遇到的。...

    远程进程查看器, 查看网络中其它计算机上的进程

    远程进程查看器对您的网络... 远程进程查看器 使用Windows内置的WMI服务. 这也就意味着您不用在要查看计算机上安装任何软件(即:不用代理的监控). 官方网址:http://www.wenjian.cn/freeware/remoteprocess.html 168KB

    WMI 的一个实现VC源代码

    本文我将向你展示一些技巧,让你可以在远程地访问网络中其他计算机的操作系统、服务、当前运行着的进程等等信息,当然前提是你必须得拥有这些计算机的管理员权限。同时我也将向你展示如何利用WMI来启动或者停止服务...

    进程管理经典软件MFC

     regsvc.exe 进程文件: regsvc or regsvc.exe 进程名称: 远程注册表服务 描述: 远程注册表服务用于访问在远程计算机的注册表。 是否为系统进程: 是 (16)  rpcss.exe 进程文件: rpcss or rpcss.exe 进程名称: RPC ...

    D-Lite:台式计算机管理工具-开源

    使用wmi来管理网络上的PC的管理工具。 查看谁登录了运行事件日志和已安装软件的进程。 只需单击几下即可对远程计算机进行碎片整理!

    c# 修改windows中账户的用户名和密码

    在 C# 中,我们可以使用 WMI 类中的 Win32_Service 或者 Win32 API 中的函数 ChangeServiceConfig 来修改本地或远程计算机 Windows 服务登录身份 (账户) 的用户名和密码。 1、使用 Win32 API 修改服务登录身份信息:...

Global site tag (gtag.js) - Google Analytics