PowerShell远程执行不直接安装软件,而是通过WinRM在目标机运行安装命令;需先启用PSRemoting、配置TrustedHosts与防火墙;再上传文件后调用msiexec或执行部署脚本;推荐封装逻辑为.ps1并用Invoke-Command远程运行。PowerShell 远程执行本身不直接“安装软件”,而是提供一种安全、可控的方式,在远程主机上运行安装逻辑——比如调用 MSI 安装包、执行 PowerShell 脚本、启动 EXE 安装程序,或调用系统级命令(如 `Start-Process`、`msiexec`)。关键在于:**远程执行的是命令或脚本,安装行为发生在目标机器本地**。 以下是实际可行、生产环境中常用的方法,按推荐顺序组织:
确保远程执行基础已就绪
远程安装的前提是 winrm 已启用且可通信:
- 在目标主机(即要安装软件的机器)上以管理员身份运行:
Enable-PSRemoting -Force - 确认 WinRM 监听状态:
winrm quickconfig 或 Test-WsMan -ComputerName <目标IP> - 若跨域或非域环境,需将目标主机加入本地 TrustedHosts:
Set-Item WSMan:\localhost\Client\TrustedHosts "<IP或主机名>" -Concatenate -Force - 防火墙需放行端口 5985(HTTP)或 5986(HTTPS),建议优先使用 HTTPS 并配置证书
把安装文件传到远程主机再执行
PowerShell 远程会话默认不自动同步本地文件。必须先上传安装介质(如 setup.exe、installer.msi、部署脚本):
- 使用 Copy-Item -ToSession(PowerShell 5.0+)上传文件:
$session = New-PSSession -ComputerName Server01
Copy-Item "C:\Local\app-installer.msi" -Destination "C:\Temp\" -ToSession $session - 然后在会话中调用安装命令:
Invoke-Command -Session $session -ScriptBlock {
& msiexec /i "C:\Temp\app-installer.msi" /quiet /norestart
} - 注意:/quiet 参数避免交互,/norestart 防止意外重启;建议加 Start-Process ... -Wait 确保安装完成再返回
直接远程执行安装脚本(推荐用于批量部署)
把安装逻辑封装成 .ps1 脚本(含错误检查、日志、静默参数),再通过远程会话加载执行:
通过 SSH 隧道从 Android 设备在互联网上对 Windows PC 实现完整远程控制的设置与使用指南,适用于远程桌面访问、安全 RDP 等。
- 脚本示例(deploy-app.ps1)可包含:
• 检查是否已安装(Get-AppxPackage / Get-WmiObject Win32_Product)
• 下载安装包(Invoke-WebRequest)或从共享路径复制
• 调用 msiexec 或 Install-Package(需提前注册包源)
• 记录 InstallLog.txt 到远程磁盘 - 执行方式:
Invoke-Command -ComputerName Server01 -FilePath ".\deploy-app.ps1"
该命令会把脚本内容序列化发送到远程主机并执行,无需预先上传脚本文件 - 优势:逻辑集中、版本可控、支持参数传入(如 -Version "2.4.1")
结合配置管理或扩展机制(进阶场景)
对大规模或云环境,不建议纯手工写远程命令,而应对接更稳定的部署通道:
- Azure VM 规模集:用 Custom Script Extension 自动下载并运行安装脚本
- Windows Server + Group Policy:通过启动脚本(Startup Script)静默部署 MSI
- Configuration Manager:用客户端推送安装 + 应用程序模型分发部署
- 使用 PowerShell DSC(Desired State Configuration)声明式定义“必须安装某软件”,由 LCM 引擎自动拉取并安装

















