【问题标题】:Invoke-Command executes on remote machine without having an effectInvoke-Command 在远程机器上执行而没有效果
【发布时间】:2022-07-01 05:19:03
【问题描述】:

我正在尝试使用 Invoke-Command 在 VM 上运行命令。该命令应在完成当前作业后停止处理作业的程序。如果我使用 RDC 在终端中运行它,它就可以工作。

& 'C:\Program Files\Autodesk\Vault Client 2021\Explorer\JobProcessor.exe' /stop

但如果我使用 Invoke-Command 从另一台机器上运行它,似乎什么也没有发生。

$session = New-PSSession -ComputerName 'hostname' -Credential (Get-Credential)
Invoke-Command -Session $session -ScriptBlock {
    & 'C:\Program Files\Autodesk\Vault Client 2021\Explorer\JobProcessor.exe' /stop
}

但是Process Monitor 显示命令在两种情况下都进入,但程序仍在运行。

我也尝试过使用 Start-Process 获得相同的结果,即它可以在 VM 的终端中运行,但不能使用 Invoke-Command。

Start-Process -FilePath 'C:\Program Files\Autodesk\Vault Client 2021\Explorer\JobProcessor.exe' -ArgumentList '/stop'

我已经被困了很多天,我已经用谷歌搜索了这个问题的知识。

【问题讨论】:

    标签: powershell invoke-command


    【解决方案1】:

    您确定该文件存在于远程计算机上吗?

    为简单起见,我将您的命令重写为 Windows 中始终存在的已知可执行文件,并返回任何给定计算机的唯一信息。

    C:\> & 'C:\Windows\system32\HOSTNAME.EXE'
    server1
    C:\> icm {& 'C:\Windows\system32\HOSTNAME.EXE'}
    server1
    C:\> icm {& 'C:\Windows\system32\HOSTNAME.EXE'} -ComputerName server2
    server2
    

    这是带有一些错误处理的脚本。

    $session = New-PSSession -ComputerName 'hostname' -Credential (Get-Credential)
    Invoke-Command -Session $session -ScriptBlock {
        $exe = 'C:\Program Files\Autodesk\Vault Client 2021\Explorer\JobProcessor.exe'
        $ok = Test-Path $exe
        if ($ok) {& $exe /stop} else {
            Write-Warning "EXE not present on $($env:COMPUTERNAME)!"
        }
    }
    

    了解如何添加错误处理,您将能够更快地解决问题并完成更多工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-02
      相关资源
      最近更新 更多