You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux环境下无需WinRM通过PowerShell连接Windows获取系统信息遇阻

解决Linux上PowerShell无法使用Get-WmiObject且禁用WinRM的Windows系统信息获取问题

首先得明确:你在Linux上用的是PowerShell Core(pwsh),这个版本已经完全移除了Get-WmiObject这个cmdlet——它只存在于旧版的Windows PowerShell(powershell.exe)里。所以报错是正常的,我们需要用PowerShell Core支持的方式,同时绕开WinRM来连接Windows机器。

下面是可行的方案:利用CIM(Common Information Model)通过DCOM协议连接Windows的WMI服务,这不需要依赖WinRM。

步骤1:在目标Windows机器上做准备

首先得确保Windows端允许DCOM和WMI的访问:

  • 开启DCOM:打开管理员命令提示符,执行dcomcnfg,在组件服务里展开「计算机」→「我的电脑」,右键选择「属性」,切换到「COM安全」标签,在「启动和激活权限」里点击「编辑限制」,确保你的访问账号拥有「本地启动」和「本地激活」权限;同样在「访问权限」里设置允许对应账号的访问权限。
  • 配置防火墙:打开Windows Defender防火墙,启用入站规则「Windows Management Instrumentation (DCOM-In)」和「Windows Management Instrumentation (WMI-In)」,确保这些规则允许来自Linux机器的IP访问。
  • 权限确认:确保你用来连接的Windows账号拥有WMI访问权限(最简单的方式是加入本地管理员组,或者通过wmimgmt.msc打开WMI控制,右键「本地WMI控制」→「属性」,设置对应命名空间的权限)。

步骤2:在Linux的pwsh中执行连接和查询

  1. 先创建凭据对象,输入Windows机器的账号密码:
$cred = Get-Credential -UserName "你的Windows账号(格式:DOMAIN\用户名或机器名\用户名)" -Message "输入Windows账号密码"
  1. 创建CIM会话选项,指定使用DCOM协议(绕过WinRM):
$sessionOption = New-CimSessionOption -Protocol Dcom
  1. 建立CIM会话:
$cimSession = New-CimSession -ComputerName "Windows机器的IP或主机名" -Credential $cred -SessionOption $sessionOption
  1. 查询系统信息,比如获取操作系统详情:
Get-CimInstance -CimSession $cimSession -ClassName Win32_OperatingSystem

你可以替换Win32_OperatingSystem为其他WMI类,比如Win32_ComputerSystem(硬件信息)、Win32_Process(进程列表)等。

  1. 用完会话记得关闭:
Remove-CimSession $cimSession

可能遇到的问题排查

  • 如果连接失败,先检查Linux机器能不能ping通Windows机器,用telnet WindowsIP 135测试135端口是否开放。
  • 确认Windows的DCOM服务(DcomLaunch)是否正常运行。
  • 检查账号权限是否足够,尤其是WMI的访问权限。

内容的提问来源于stack exchange,提问作者James

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:43:41