问题标签 [wsman]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 如何使用 WinRM 从 Linux 主机检索 CIM 实例?
我正在使用 WinRM API 试图从运行 Windows 或 Linux 的多个主机收集一些 CIM 实例。我的代码在连接到 Windows 主机时工作正常,但如果我尝试连接到运行 SFCB CIM 服务器的 Linux 机器,则会引发异常。我可以通过 WBEM 很好地从 Linux 主机检索 CIM 实例,但不能通过 WS-MAN/WinRM。
这是从 Windows 主机获取的示例代码CIM_OperatingSystem
- 这很好用:
如果remoteHost
指向 Linux 机器(在我的示例中为 openSUSE VM),会发生以下情况:
remoteHost = "myLinuxHost"
如果我只指定主机名,即session.Enumerate()
失败:
未处理的异常:System.IO.FileNotFoundException:找不到网络路径。在 WSManAutomation.IWSManSession.Enumerate(对象 resourceUri、字符串过滤器、字符串方言、Int32 标志)
我可以成功 ping 机器,所以它应该是可见的。但是,主机名仅映射到我的 Windowshosts
文件中的 IP。如果我尝试使用 PowerShell 创建到这台机器的会话,也会发生错误:
new-cimsession :WinRM 无法处理该请求。使用 Kerberos 身份验证时出现以下错误:找不到计算机 myLinuxHost。验证计算机是否存在于网络上,并且提供的名称拼写正确。
- 如果我指定了完整的主机 URL(一个我可以使用 WBEM 检索 CIM 实例的 URL),即,
remoteHost = "https://<ip>:5989"
或者remoteHost = "https://myLinuxHost:5989"
枚举失败并显示:
未处理的异常:System.Runtime.InteropServices.COMException:WSManAutomation.IWSManSession.Enumerate(对象 resourceUri,字符串过滤器,字符串方言,Int32 标志)发生安全错误
细节:
我究竟做错了什么?
linux - 如何在不以明文形式传递密码的情况下在 Linux 上使用 wsman?
我正在使用libwsman/wsmancli和 libcurl4-32bit 从 linux 机器上针对我拥有的一些戴尔机器的 iDracs 运行 wsman 命令。我遇到的问题是身份验证需要明文密码和用户名。如果我从命令行使用它就可以了;但是,我正在使用戴尔 python 包装器(基本上只是子进程的包装器)在我编写的脚本中执行命令。因此,在我运行命令的每个实例中,我都需要以明文形式传递我的密码。有没有办法解决这个问题?我能想到的唯一选择是为每个 iDrac 添加一个权限较低的用户;但这并不能解决根本问题..
windows - WSMan windows 'PUT' 方法不更新必要的值
全部。
我正在尝试使用不同的 WsMan 实用程序更新一些 WMI 类实例,例如 Msvm_ComputerSystem、Msvm_ProcessorSettingData:一个是我们公司编写的,下一个是用于基于 linux 的系统的 openwsman,最后一个是来自其他 windows 2012 计算机的 winrm . 从所有这些中,我可以请求使用这样的肥皂体进行放置查询:
我得到了旧的 VirtualQuantity 值的响应,没有任何错误响应:
正如我所说,我已经尝试过其他实用程序,如 winrm。我的 winrm 请求是这样的:
但是对于这个请求,我也得到了以前值的响应。在基于 Linux 的系统上与 wsman 的情况相同。所以,我的问题是怎么了?这是我的要求吗?也许 Windows WsManagement 服务不支持“PUT”功能?
windows - WSMAN 和 WMI 系统属性
我正在尝试在 WQL 查询中检索 __PATH 属性。
当我尝试使用 WSMAN 和 WQL 查询枚举它时,它只返回 ProcessId 。
但是很容易确保 __PATH 不为空。
为什么无法在枚举请求中检索 WMI 系统属性(如 __PATH)?
xml - 使用 powershell 在 Invoke-CimMethod 中将 XML 文件作为输入参数传递
我正在使用 power shell 调用 CIM 方法。方法参数在这样的 XML 文件中
XML 输入文件:-
Powershell命令:-
当我像 @{field1='value1';field2='value2'} 这样作为命令行参数传递时,它工作正常。
有什么方法可以直接将它作为 xml 输入文件传递给 power shell,就像我们在 winrm 中有'-file:input.xml' 一样?
java - WinRM(WsMan) 和 NTLM 身份验证
我正在尝试在 WsMan 连接期间使用 NTLM 身份验证。但是WinRm不直接支持NTLM方案的问题。这是响应标头:
官方文档中没有提到 NTLM 方案 https://docs.microsoft.com/en-us/powershell/module/Microsoft.WsMan.Management/Get-WSManInstance?view=powershell-5.1
但它说
谈判。协商是一种质询-响应方案,它与服务器或代理协商以确定用于身份验证的方案。例如,此参数值允许协商以确定是使用 Kerberos 协议还是使用 NTLM。
我正在尝试使用 SPNEGO 模式
但最后,它失败了https://pastebin.com/gGNEHGpx 所以看起来 NTLM 是 SPNEGO 的子机制,但是如何与 Apache http-client 正确使用呢?
windows - 你如何关闭 Pywinrm 会话?
您好,我正在使用 PyWinRM 轮询远程 Windows 服务器。
s = winrm.Session('10.10.10.10', auth=('管理员', '密码'))
由于没有可用的 s.close() 函数,我担心文件描述符泄漏。
我通过 using 进行了检查lsof -p <myprocess> | wc -l
,我的 fd 计数稳定,但我的谷歌搜索显示 ansible 之前有 fd 泄漏;ansible 也依赖 pywinrm 来管理远程窗口主机
好心的建议,谢谢!
c++ - 从 Linux OMI (omicli) 到 Windows WMI 的连接失败并出现 DMTF 相关错误
我正在用 C++ 在 CentO 上实现 OMI 客户端以与 Windows WMI 通信我已经在 Linux CentOS 7 上安装了 OMI,并尝试使用 OMI 提供的示例实用程序连接到 Windows 7。
参考:https ://github.com/Microsoft/omi
还在 Windows 上配置 WINRM 以接收基本身份验证调用。
我无法让样本正常工作。收到以下错误:
以下是目标机器的 WINRM 配置以供参考
C:\Windows\system32>winrm 获取 winrm/config
我错过了什么明显的东西吗?非常感谢任何有关使示例正常工作的帮助。
powershell - PowerShell 是否有导致错误的限制没有足够的配额可用于处理此命令?
我们有一个部署脚本失败并显示错误消息:没有足够的配额可用于处理此命令。
在它失败的地方,它试图在已经启动同一个可执行文件 10 次后异步启动一个可执行文件。所以11号失败了。一共需要启动17个。此脚本不是用 PowerShell 编写的,但我们使用远程 PowerShell 会话来启动它,并且仅当我们通过 PowerShell 远程运行脚本时才会发生此错误。
如果我们在不使用 PowerShell 远程处理的情况下直接在服务器上运行相同的脚本,我们不会收到此错误,并且该脚本启动所有 exe 实例(总共 17 个)并没有错误地完成也没有问题。
我检查了我怀疑可能是错误原因的典型 WSMAN 限制,据我所知,它们被设置为无限制。起初我想也许MaxProcessesPerShell设置得太低了。以下是运行它的服务器上 WSMAN 驱动器的结果:
我们目前有这些 WSMAN 设置:
是否有任何其他 PowerShell 或 WSMAN 设置可能导致此错误?
为Not enough quota...错误推荐的典型解决方案包括使页面文件更大。我还没有尝试过,因为脚本在 PowerShell 会话之外运行时没有错误。
如果需要帮助回答这个问题,我可以提供更多关于我们的脚本正在做什么的细节。
powershell - PowerShell 远程处理:控制目标版本(PowerShell Core 或 Windows PowerShell);跨平台远程处理的状态
这个以 Windows [1]为重点的自答问题解决了以下几个方面:
现在有两个PowerShell 版本- 传统的、仅限Windows 的Windows PowerShell和跨平台的 PowerShell Core,两者都可以安装在给定的 Windows 机器上:
如何判断哪个 PowerShell 版本将执行远程命令,例如 via
Invoke-Command -ComputerName
?我怎样才能通过配置来定位特定的版本,无论是临时的还是持久的?
笔记:
对于通过远程在给定机器上定位的版本,它必须设置为远程:
只有Windows PowerShell会自动设置为远程处理,但仅限于运行 Windows Server 2012 或更高版本的服务器上。
从 v7 开始,PowerShell Core还没有随 Windows 提供。如果您使用的是官方安装程序,您可以选择在安装期间启用远程处理。
在任何情况下,您都可以使用Enable-PSRemoting
(重新)启用 PowerShell remoting on demand,其中:
必须从相应的版本运行。
必须以管理权限运行
[1] 也就是说,问题侧重于基于WinRM的远程处理(WinRM 是 DTMF WSMan (WS-Management) 标准的 Windows 特定实现)。
至于使用 PowerShell Core的跨平台远程处理:
您已经可以在所有平台上使用基于 SSH 的远程处理:
使用基于 SSH 的远程处理与基于 WinRM 的远程处理主要涉及相同的 cmdlet,但所涉及的参数不同;
-HostName
最值得注意的是,您通过参数而不是参数指定目标计算机-ComputerName
。限制(从 v7 开始):“基于 SSH 的远程处理当前不支持远程端点配置和 Just Enough Administration (JEA)。”
对于Unix 到 Windows 的远程处理(Unix指的是 macOS 和 Linux 等类 Unix 平台)——也就是说,从类 Unix 机器远程处理到 Windows 机器——您也可以使用基于 WinRM 的远程处理和附加配置:
在 Windows 机器上:
- 必须通过为 HTTPS 配置 WinRM 来启用 SSL 连接。
- 从类 Unix 机器上使用的用户帐户必须定义为本地管理员组中的本地用户帐户- 域帐户将不起作用。
类 Unix 机器必须使用带
-Authentication Basic -UseSsl
参数的远程 cmdlet。
psl-omi-provider 存储库中正在开发基于 Unix WSMan 的实现,它已经使Linux机器能够充当远程目标(也就是说,服务器组件已经可用 - 我不清楚它是否也可以安装在macOS上);然而,在撰写本文时,客户端组件还没有准备好生产。
一旦客户端客户端组件可用,就可以在类 Unix 机器(Linux、macOS)之间以及类 Unix 机器和 Windows 机器之间进行统一的基于 WSMan 的跨平台远程处理。