问题标签 [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.

0 投票
1 回答
178 浏览

php - preg_replace 在数组中的每个子字符串之前和之后添加一个“1”

我有一个脚本,我正在针对一组服务器运行以使用 openwsman 从它们中提取硬件数据。这是为了在一个非常开放的环境中跟踪变化,并最终更新一个 mysql 数据库以保持库存记录。问题是 preg_replace 在数组中每个值的开头和结尾添加了“1”。我敢肯定,这些步骤相当不寻常,所以我将解释每个步骤的作用并在最后提供输出。

此外,如果我删除 preg_replace,array_sum 将变为空白。我输出变量 memsize、memsizepreg 和 memsize sum 变量只是为了确保提取的数据是准确的,并且无论 preg_replace 做什么,都会导致在变量的开头和结尾添加 1。

输出:

0 投票
0 回答
1190 浏览

powershell - 使用 Nginx 前端“Windows 远程管理”Web 服务

我希望 NGINX 对将后端代理 WinRM / WSMAN 请求的请求进行前端处理。Nginx 应该监听端口 80 和后端代理端口 5985。

nginx配置:

我正在通过 powershell 远程处理进行测试。如果我直接点击服务器它可以工作,但是当我尝试通过代理时它会失败。查看网络捕获,授权请求似乎没问题,但随后 powershell 报告“访问被拒绝”。我是否在 Nginx 配置中遗漏了一些特殊的东西,或者它是否由于 Microsoft 的实施而无法正常工作(即,由于 Microsoft 的实施,nginx 如何无法前端 NTLM 身份验证请求)

0 投票
1 回答
3075 浏览

powershell - 为什么交换和窗口的 WSManConnectionInfo 对象中的 connectionUri 不同?

对于交换,使用的连接 uri 是:

WSManConnectionInfo 对象通过以下方式创建:

要连接到 Windows,使用的 uri 是

WSManConnectionInfo 对象通过以下方式创建:

为什么exchange和windows的连接uri有区别?

0 投票
2 回答
2398 浏览

c# - PowerShell 远程处理:WSManClientSessionTransportManager.Initialize() 中的异常 PSInvalidOperationException

我有 C# Asp.Net 应用程序,它连接到远程计算机(与 Web 服务器相关的远程)以使用 PowerShell 在它们上运行命令。这通常有效,但是在某些情况下(我还不完全理解),我们完全失去了建立任何远程会话的能力。发生这种情况时,任何连接到远程 PowerShell 的尝试都会导致以下异常:

当这种情况开始时,所有连接到任何主机的尝试都会引发此异常,据我所知,这完全是原始主机上的客户端问题。

我在这里或 MS 论坛上没有找到任何解释。这不是任何类型的用户权限的问题,因为在 Microsoft 组件中触发某些条件之前一切正常。

这是我的连接方式:

我试图直接获得运行空间:

以及通过池:

...这没有什么区别,除了少数外部堆栈框架略有不同。

我怀疑这与线程有关。我们直接从响应 AJAX 请求的 IIS 线程(同步)执行一些 PowerShell 连接,并且一些连接是从单独的线程异步完成的,通过ThreadPool.QueueUserWorkItem(...). 因此,一开始(在重新启动 IIS 时),这两种类型的调用都有效,然后在一些不良事件之后,所有类型的连接尝试都开始抛出上述异常。这总是发生在同步调用所做的某些事情之后(这非常简单且看似良性),并且永远不会在异步调用之后发生。IIS 重新启动会清除该情况,直到再次触发该条件。

看起来好像某些 PowerShell 操作可能无法正确释放资源。会话完成后,我尝试使用Close(),Disconnect()Dispose()运行空间/池的所有组合关闭它们,这没有任何区别。

PS。远程管理的事件日志中有这个:

(事件 ID:28)访问被拒绝错误:WSManCreateSession API 调用者与应用程序对象的创建者不匹配

此消息首先在同步 PowerShell 连接成功出现,然后在之后的所有连接中出现。

0 投票
0 回答
3175 浏览

c# - 关闭远程 PowerShell 会话后,多个进程 wsmprovhost.exe 不会终止

我正在使用 PowerShell Remoting(直接从 C# 代码)从 C# 应用程序连接到远程计算机。这很好用,但是每个这样的连接都会在目标计算机上留下一个新的进程wsmprovhost.exe(WSMan 主机进程)实例。它们从不退出并消耗少量(<0.1%)的 CPU 时间。

这是我用来打开 PowerShell 会话的示例代码:

...这是我目前关闭该会话的方式:

我排除了我们在此运行空间中所做的任何事情导致这种情况的可能性,因为即使我们不对其执行任何操作, wsmprovhost.exe 也会保留在那里 - 即简单地连接然后断开连接。

当我从 PS 命令行手动执行等效操作时,问题不会发生- 即:

在后一种情况下,wsmprovhost.exe的实例出现在Enter-PSSession之后,然后在Exit-PSSession之后立即关闭。

到目前为止,我尝试了以下方法,但都没有帮助:

  • 使用RunspacePool代替Runspace
  • Disconnect/ Close/的所有组合和排列Dispose
  • 设置CancelTimeoutWSManConnectionInfo小值(1ms)

我错过了一些简单的东西吗?关闭以编程方式打开的 PowerShell 会话的正确方法是什么?


编辑:所有系统上的 Windows 7、PowerShell 3.0 和 .Net 4.0。

编辑 2:我发现设置IdleTimeoutWSManConnectionInfo60000(60 秒 - 允许的最低值)会使wsmprovhost.exe在断开连接后一分钟退出。但是,在命令行方案中,IdleTimeout 为 2 小时,但 wsmprovhost.exe 在断开连接后立即终止。另外,我现在注意到响应 C# 操作而启动的 wsmprovhost.exe 毕竟确实退出了,但仅在 2 小时内。一分钟肯定比 2 小时好,但在重负载场景中,我们的应用程序可能必须频繁地运行 PowerShell,以使 1 分钟的关闭时间成为问题。

0 投票
1 回答
440 浏览

wmi - 使用 WQL 检索 WMI 属性的类型

我可以使用 WQL 查询找到 WMI 主机支持的类 SELECT * FROM meta_class

这将返回类及其方法和属性。这些似乎都是字符串。我正在尝试做一些发现,虽然拥有属性名称很好,但获取属性的类型会更好。是否可以获取属性的类型?

例如,如果上面的查询返回CIM_Processor具有属性的类,Family我可以告诉它Family是 auint16而不是 auint32或 astring吗?我一直在阅读检索类定义,但似乎找不到返回类型的查询。这甚至可能吗?有没有不使用 WQL 的解决方法?

0 投票
1 回答
466 浏览

c# - 使用远程 PowerShell 转换为 C# 对象

我正在使用 C# 远程连接到 PowerShell 控制台:

我想调用Get-Date PowerShell 命令并以某种方式PSObject转换为DateTime. 解决此问题的“通常”方法是什么?

0 投票
2 回答
312 浏览

php - 使用php将非标准xml wsman数据加载到对象中

这个问题已经有很多不同的答案,但没有一个涉及我的情况。

我正在使用 WSMan 提取数据,然后将输出作为一种 sudo-xml 返回。我什至不会认为它是“真正的”xml,因为它有很多非标准属性。问题是我需要能够将输出作为 PHP 中的对象引用。所以目前我使用了很多 str_replace。这样做的问题是,如果非标准格式出现偏差(在某些情况下它会返回类似的东西,而<KeyID xsi:nil="true"/>在其他情况下它可能是这样的东西<CMCIP xsi:nil="true"/>),很难预见我将拥有的所有不同属性在使用 simplexml_load_string 将其作为对象导入之前考虑并退出变量。

所以,我的问题很简单:有没有办法将非标准 XML 加载到对象中?这是 xml 数据的示例,以便您知道我们在这里处理的是什么疯狂。

0 投票
1 回答
291 浏览

c# - 从 Azure Worker Role 建立 WSManConnection

我们正在尝试使用 Azure 服务总线队列和 Azure 工作角色的组合来自动化我们的大量天蓝色/服务维护任务。简而言之,概念如下......

  1. 维护任务发布到 SB 队列
  2. Worker 角色监听 SB Queue 上的任务
  3. Worker 角色连接到所需的 VM/Web 角色/云服务并执行远程 powershell 命令

在实践中,这在开发环境中运行时按预期工作,但是在发布工作角色后,远程 powershell 连接失败并响应“访问被拒绝”。建立连接的代码如下...

最初,我怀疑这是 CA 证书问题,但后来我通过 RDP 连接到工作角色并确认证书已正确部署。此外,我还设法通过“winrs -r:”命令也使用远程桌面连接来实现与目标服务器的连接。

作为确认,辅助角色也在以提升的权限运行。

对此的任何帮助将不胜感激

提前致谢

0 投票
1 回答
1481 浏览

powershell-2.0 - 使用 powershell 在系统列表上测试 winrm 连接性

我想测试 winrm 是否在服务器列表上运行。

winrm id -r:servername 适用于单个系统,但我想递归测试 csv 或文本文件中的列表。

输出到一个文件,每个文件都说“工作”或“不工作”。

我该怎么做呢?

谢谢大家。

编辑:
到了一个点,我正在传递一个 vm 和管道列表,直到我成功地将 winrm 连接输出到文件并在控制台中显示失败。

get-vm |where {$ .powerstate -like "PoweredOn"}|get-vmguest |where {$ .guestfamily -like "windowsGuest"}|foreach {winrm id -r:$_.hostname} |Out-File c: \脚本\winrmtest.txt

在我的输出文件中,我得到了像 identifyResponse ProtocolVersion = http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd ProductVendor = Microsoft Corporation ProductVersion = OS: 6.1.7601 SP: 1.0 Stack: 2.0这样的输出

对于成功的连接,在控制台上我得到以下失败信息:

错误号:-2144108526 0x80338012 客户端无法连接到请求中指定的目的地。验证目标上的服务是否正在运行并且正在接受请求。请查阅在目的地(最常见的是 IIS 或 WinRM)上运行的 WS-Management 服务的日志和文档。如果目标是 WinRM 服务,在目标上运行以下命令来分析和配置 WinRM 服务:“winrm quickconfig”。WSManFault 消息 = 客户端无法连接到请求中指定的目标。验证目标上的服务是否正在运行并且正在接受请求。请查阅在目标(最常见的是 IIS 或 WinRM)上运行的 WS-Management 服务的日志和文档。如果目标是 WinRM 服务,

需要将所有输出连同响应所针对的来宾 vm 的名称一起放入文件中。