You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Invoke-Command仅在远程主机有用户登录时可执行静默安装问题求助

解决WinRM远程执行静默安装无活跃会话时挂起的问题

问题原因

多数Windows桌面应用安装包(即使带静默参数)依赖交互式会话的桌面环境,而WinRM默认创建的是非交互式会话,没有桌面资源,导致安装进程因等待桌面上下文而挂起。

解决方案

1. 调整Start-Process参数强制非交互式运行

给Start-Process添加-NoNewWindow参数,避免安装程序尝试创建桌面窗口,同时通过-PassThru获取进程状态确认结果:

# Create Session
$session = New-PSSession -ComputerName $computer

# Install the application on the remote computer
Invoke-Command -Session $session -ScriptBlock {
    $installProcess = Start-Process -FilePath "c:\VMware-Horizon-Agent-x86_64-2312-8.12.0-23142606.exe" `
        -ArgumentList "/s /v`"/qn ADDLOCAL=Core,USB,RTAV,VmwVaudio,GEOREDIR,V4V,PerfTracker,HelpDesk,PrintRedir REMOVE=ClientDriveRedirection`"" `
        -Wait -NoNewWindow -PassThru
    Write-Output "安装进程退出码: $($installProcess.ExitCode)"
}

2. 直接调用MSI安装包(推荐)

部分exe安装包实际是MSI的封装,可先提取MSI后直接用msiexec执行,完全避开exe的交互式依赖:

  • 先在本地提取MSI:
    VMware-Horizon-Agent-x86_64-2312-8.12.0-23142606.exe /extract c:\temp
    
  • 远程执行MSI安装:
    Invoke-Command -Session $session -ScriptBlock {
        $installProcess = Start-Process msiexec.exe `
            -ArgumentList "/i c:\temp\VMware-Horizon-Agent.msi /qn ADDLOCAL=Core,USB,RTAV,VmwVaudio,GEOREDIR,V4V,PerfTracker,HelpDesk,PrintRedir REMOVE=ClientDriveRedirection" `
            -Wait -NoNewWindow -PassThru
        Write-Output "安装进程退出码: $($installProcess.ExitCode)"
    }
    

3. 用任务计划执行安装(最可靠的无会话方案)

任务计划可指定以SYSTEM权限在无用户登录时运行,不依赖桌面会话:

Invoke-Command -Session $session -ScriptBlock {
    # 创建安装任务动作
    $taskAction = New-ScheduledTaskAction -Execute "c:\VMware-Horizon-Agent-x86_64-2312-8.12.0-23142606.exe" `
        -Argument "/s /v`"/qn ADDLOCAL=Core,USB,RTAV,VmwVaudio,GEOREDIR,V4V,PerfTracker,HelpDesk,PrintRedir REMOVE=ClientDriveRedirection`""
    # 创建10秒后触发的触发器
    $taskTrigger = New-ScheduledTaskTrigger -Once -At (Get-Date).AddSeconds(10)
    # 设置任务不依赖电池和网络
    $taskSettings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries -RunOnlyIfNetworkAvailable:$false
    # 指定SYSTEM权限运行
    $taskPrincipal = New-ScheduledTaskPrincipal -UserId "SYSTEM" -LogonType ServiceAccount -RunLevel Highest
    # 注册并启动任务
    Register-ScheduledTask -TaskName "HorizonAgentInstall" -Action $taskAction -Trigger $taskTrigger -Settings $taskSettings -Principal $taskPrincipal -Force
    Start-ScheduledTask -TaskName "HorizonAgentInstall"
    # 等待任务完成
    do {
        Start-Sleep -Seconds 30
        $taskStatus = Get-ScheduledTask -TaskName "HorizonAgentInstall" | Get-ScheduledTaskInfo
    } while ($taskStatus.Status -ne "Completed")
    # 输出结果并清理任务
    Write-Output "任务退出码: $($taskStatus.LastTaskResult)"
    Unregister-ScheduledTask -TaskName "HorizonAgentInstall" -Confirm:$false
}

总结

优先尝试方案1和2,若仍无效,方案3是无用户会话场景下最稳定的安装方式。

内容的提问来源于stack exchange,提问作者anton123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 00:22:35