【问题标题】:PowerShell: How to run a powershell script on a remote machine using WMIPowerShell:如何使用 WMI 在远程计算机上运行 powershell 脚本
【发布时间】:2017-11-19 17:27:25
【问题描述】:

具体来说:我想在远程 Windows 服务器上运行一个 powershell 脚本,但我只能使用 WMI 连接到该服务器。

例如,我使用Get-Wmiobject 来获取一些数据,例如正在运行的进程,但经过大量搜索后,我未能找到一种在此远程进程上运行 powershell 脚本块的方法。我发现的命令之一是Invoke-Command,但这个命令使用未向该远程服务器打开的 winRM。

那么,不允许使用 WMI 在远程服务器上运行 powershell 脚本吗?我没有找到一个明确而直接的答案。

【问题讨论】:

  • 这不是 WMI 的用途
  • 谢谢,但它的主要用途是什么?

标签: powershell wmi invoke-command get-wmiobject wmi-service


【解决方案1】:

tl;dr

考虑使用 psexec 作为 PowerShell 远程处理的替代方法来执行任意命令。


支持以远程计算机为目标而不依赖 PowerShell 远程处理的 PowerShell 命令列表是有限的(见下文);它们可能都基于 WMI(我不确定),并且它们专注于检索和操作远程资源(通常是 WMI)而不是提供执行任意命令的能力

更新Alberto Varga's helpful answer 指出Win32_Process WMI class's .Create method 确实允许创建任意进程; documentation of PowerShell's Invoke-WmiMethod cmdlet 甚至包含一个示例。

相比之下,Invoke-Command 确实提供了执行任意命令的能力,确实使用 PowerShell 远程处理,正如您所发现的,这需要 WS-Management 协议,由 Microsoft 实现WinRM 服务,以及其他先决条件 - 见Get-Help about_Remote_Requirements

下面列出的最通用的非远程命令是Invoke-WmiMethod,它提供对 WMI 类及其方法的开放式访问。

但是请注意,Microsoft 建议使用更新的 *-Cim* cmdlet,例如 Invoke-CimMethod,以实现跨平台支持,并且这些符合 CIM 的 cmdlet 再次依赖于 WS-Management (WSMan)标准,就像 PowerShell 远程处理一样。


从 PSv5.1 开始,支持通过-ComputerName使用 PowerShell 远程处理来定位远程计算机的 PowerShell cmdlet 列表(有关背景信息,请参阅Get-Help about_Remote_FAQ):

Add-Computer
Clear-EventLog
Get-EventLog
Get-HotFix
Get-Process
Get-Service
Get-WmiObject
Invoke-WmiMethod
Limit-EventLog
New-EventLog
Register-WmiEvent
Remove-Computer
Remove-EventLog
Remove-WmiObject
Rename-Computer
Restart-Computer
Set-Service
Set-WmiInstance
Show-EventLog
Stop-Computer
Test-Connection
Write-EventLog

【讨论】:

  • 谢谢你。我试过Invoke-WmiMethod,我很喜欢。根据您的回答,我尝试了许多这些命令,发现几乎所有命令都是基于 WMI 的。
  • 但不幸的是,他们中的一些人没有办法将凭据传递给他们,比如Get-ProcessGet-Service和Eventlog相关的命令,所以,例如,我可以使用Get-Process直接获取远程计算机的进程,只要它与我的本地计算机具有相同的凭据,但如果不是,我认为我们需要使用Invoke-Command 来传递凭据。你能帮我通过 WMI 获取特定文件夹中的文件大小吗?谢谢。
  • 如果您想传递凭据,您似乎必须使用Invoke-WmiMethod;我建议您尝试一下,如果这不起作用,您可以提出一个解决该特定问题的问题。
【解决方案2】:

这很容易做到。您想要的是 Win32_Process 和名为 Create 的方法。这允许您在远程机器 2K3 和更高版本上生成进程。

【讨论】:

    猜你喜欢
    • 2014-07-26
    • 2019-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-14
    • 1970-01-01
    • 2021-08-22
    • 2015-04-20
    相关资源
    最近更新 更多