1

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

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

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

4

2 回答 2

2

tl;博士

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


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

更新Alberto Varga 的有用回答指出Win32_ProcessWMI 类的.Create方法确实允许创建任意进程;PowerShell Invoke-WmiMethodcmdlet的文档甚至包含一个示例。

相比之下,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 从 PSv5.1 开始,支持通过不使用 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
于 2017-11-19T21:23:00.097 回答
1

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

于 2017-11-20T02:26:43.250 回答