从本地计算机获取数据

尽管 Windows 远程管理和WS-Management协议明确设计用于远程通信,但在本地计算机上建立会话是最简单的情况。 某些脚本可能需要访问本地计算机和远程计算机上的数据。

**WinRM 版本 2.0:**

所有操作都被视为远程操作,必须在执行任何操作之前启动 WinRM 服务。 如果未指定远程目标,则默认使用 localhost,并将所有操作发送到本地 WinRM 服务。 有关启动 WinRM 服务的详细信息,请参阅 Windows 远程管理的安装和配置

将 WinRM 服务用于本地操作时,应考虑以下因素:

  • 本地 WinRM 配置只能由管理员读取。
  • WMI 命名空间必须设置远程启用权限。 有关详细信息,请参阅 保护远程 WMI 连接
  • 如果未创建 WinRM 侦听器 ,则 WinRM 服务将侦听端口 47001 上的本地请求。

每个 WinRM 脚本必须首先通过创建 Session 对象来建立与计算机的会话或连接。 创建会话后,可以使用 Session 对象方法(如 Session.EnumerateSession.Invoke) 获取数据或执行方法。

会话的创建与 连接到 Windows Management Instrumentation (WMI) 命名空间有点类似。 会话实质上是一个层,可用于通过 SOAP 消息和 WS-Management 协议发送和接收数据。 有关详细信息,请参阅 WS-Management Protocol

调用 WSMan.CreateSession 方法来创建 Session 对象将启动连接到本地 WinRM 的 会话

创建 WSMan 会话并获取数据

  1. 创建 WSMan 对象。

    Set objWsman = CreateObject("Wsman.Automation")
    
  2. 通过调用 WSMan.CreateSession 方法创建会话。 此会话在登录用户名和密码下运行,可以通过本地 WinRM 获取数据。

    Set objSession = objWsman.CreateSession()
    
  3. 创建资源 URI,以标识要管理的资源或要获取其数据的资源。 有关设置 URI 格式的详细信息,请参阅 资源 URI。 此资源 URI 适用于 WMI Win32_Service 类的特定实例,即 Winmgmt 服务。 有关详细信息,请参阅 Windows 远程管理和 WMI

    strResource = "http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/Win32_Service?Name=Winmgmt"
    
  4. 调用使用资源 URI 获取或枚举数据的 会话 方法。 有关详细信息,请参阅 WinRM 脚本 API

    strResponse = objSession.Get(strResource)
    Wscript.Echo strResponse
    
  5. 若要从另一台计算机获取或管理数据或使用不同的身份验证方法,请参阅 从远程计算机获取数据

以下 VBScript 代码示例演示获取名为“Winmgmt”的 WMI Win32_Service 特定实例的完整脚本。

Set objWsman = CreateObject("Wsman.Automation")
Set objSession = objWsman.CreateSession()
strResource = "http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/Win32_Service?Name=Winmgmt"
strResponse = objSession.Get(strResource)
Wscript.Echo strResponse

以下 VBScript 代码示例演示包含数据转换的完整脚本。 有关详细信息,请参阅 显示 WinRM 脚本中的 XML 输出

Set objWsman = CreateObject("Wsman.Automation")
Set objSession = objWsman.CreateSession()
strResource = "http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/Win32_Service?Name=Winmgmt"
strResponse = objSession.Get(strResource)
Set xmlFile = CreateObject("MSXml.DOMDocument")
Set xslFile = CreateObject("MSXml.DOMDocument")
xmlFile.LoadXml(strResponse)
xslFile.Load("WsmTxt.xsl")
Wscript.Echo xmlFile.TransformNode(xslFile)

关于 Windows 远程管理

使用 Windows 远程管理

Windows 远程管理参考