tl;博士
考虑使用psexec
PowerShell 远程处理的替代方法来执行任意命令。
支持以远程计算机为目标而不依赖 PowerShell 远程处理的 PowerShell 命令列表是有限的(见下文);它们可能都是基于 WMI 的(我不确定),并且它们专注于检索和操作远程资源(通常是 WMI),而不是提供执行任意命令的能力。
更新:Alberto Varga 的有用回答指出Win32_Process
WMI 类的.Create
方法确实允许创建任意进程;PowerShell 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
从 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