PowerShell:如何使用WMI在远程计算机上运行powershell脚本

时间:2017-11-19 17:27:26

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

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

例如,我使用Get-Wmiobject来获取一些数据,比如正在运行的进程,但是在经过大量搜索后我失败了,找到了在这个远程数据库上运行powershell脚本块的方法。我发现的其中一个命令是Invoke-Command,但是这个命令使用的winRM没有打开到该远程服务器。

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

2 个答案:

答案 0 :(得分:2)

<强> TL;博士

考虑使用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远程处理那样。

支持通过-ComputerName 定位远程计算机的PowerShell cmdlet列表,不使用使用PowerShell远程处理,从PSv5.1开始(有关背景信息,请参阅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

答案 1 :(得分:1)

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