在远程计算机上执行启动进程Powershell脚本

问题描述 投票:0回答:1

我以管理员身份打开 PowerShell,并使用以下代码行运行 Windows 更新的脱机文件。效果很好

Start-Process 'wusa.exe' -ArgumentList 'C:\Temp\windows10.0-kb5032189-x64_0a3b690ba3fa6cd69a2b0f989f273cfeadba745f.msu' -verb runas

但现在我尝试以某种方式使用相同的代码在远程计算机上运行该文件。 Windows 更新文件在远程 PC 上具有相同的名称和确切位置

我想出了下面的代码,它首先获取管理员凭据并将其传递给调用命令。然后调用命令运行启动进程代码。

$Username = 'username123'
$Password = '84fWfghnsf&5Fh'
$pass = ConvertTo-SecureString -AsPlainText $Password -Force
$Cred = New-Object System.Management.Automation.PSCredential -ArgumentList $Username,$pass
Invoke-Command -ComputerName 8HPF31J7V6.domain.local -Credential $Cred -ScriptBlock {Start-Process 'wusa.exe' -ArgumentList 'C:\Temp\windows10.0-kb5032189-x64_0a3b690ba3fa6cd69a2b0f989f273cfeadba745f.msu' -verb runas}

问题是,当我执行此操作时,远程 PC 上没有任何反应

运行时我也没有收到任何错误

关于我做错了什么有什么想法,或者除此之外还有其他解决方案吗?

powershell updates remote-access invoke-command start-process
1个回答
0
投票
  • -Wait
    添加到远程
    Start-Process
    调用,以确保
    wusa.exe
    在从远程 Invoke-Command
     调用返回之前运行完成

    • 否则,通过使用
      -ComputerName
      参数隐式创建临时远程会话,当
      Start-Process
      调用返回时,Invoke-Command启动的进程将
      自动终止
  • 通过 PowerShell 的 remoting 执行的代码在目标计算机上无形地运行,因此使用

    -Verb RunAs
    是没有意义的:

    • 如果远程进程已经is提升,则它没有效果。请注意,如果运行远程命令的用户身份是目标计算机上的管理员,则远程进程将自动提升

    • 如果不是(只有当您明确授予非管理用户使用 PowerShell 远程处理的权限时才会发生这种情况),则调用

      总是失败,因为无法显示 UAC 对话框。

因此:

# Note the use of -Wait, removal of -Verb RunAs Invoke-Command -ComputerName 8HPF31J7V6.domain.local -Credential $Cred -ScriptBlock { Start-Process -Wait wusa.exe -ArgumentList 'C:\Temp\windows10.0-kb5032189-x64_0a3b690ba3fa6cd69a2b0f989f273cfeadba745f.msu' }
    
© www.soinside.com 2019 - 2024. All rights reserved.