转自: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>” |
2. | 身份验证可以使用 Kerberos 或 NTLM 进行处理。如果使用 NTLM 或默认(非 Kerberos)验证,请指定如下内容: User :<domain>\<User> User :kenmyer |
3. | 要使用 Kerberos 认证,请按如下指定: User :<domain>\<User> User :kenmyer |
使用脚本连接到远程计算机上的 WMI
1. | 开始之前,请确保对远程命名空间拥有相应的权限。 如果拥有权限,您可以在不指定用户身份信息的情况下连接到远程计算机。WMI 将使用您登陆时输入的用户身份进行连接。 | ||||||||||
2. | 如果不指定用户身份信息,您可以使用被称作 别名字符串 的简短连接语法连接到远程计算机。更多信息,请访问:http://msdn.microsoft.com/library/default.asp 并搜索 “Constructing a Moniker String”(构造一个别名字符串)。例如,以下别名字符串将连接到一个名为 TargetComputer 的远程计算机的默认命名空间(因为没有指定命名空间,会自动连接到默认的命名空间):
| ||||||||||
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 ) 并提供以下信息:
|