使用 sshpass、bash 和 PsExec 问题从 rhel-server1 在 windows-machine1 上执行 file.ps1

Execute file.ps1 on windows-machine1 from rhel-server1 using sshpass, bash & PsExec issues

如果我有头发,我会再次秃头。

我有 2 个服务器。

windows01 linux01

windows01 机器上我有一个基于 GUI 的应用程序 我需要从 开始linux01 服务器。

start.ps1 在 windows01 机器上的脚本如下所示:(它被放置在应用程序和 psexec.exe位于)

if((get-process "TmaApplication" -ea SilentlyContinue) -eq $Null){ 
        echo "TmaApplication not running, attempting to start"
        & .\psexec.exe -accepteula TMA.exe /u "Default User" /c y /p 5003
}

else{ 
    echo "Running"
 }

然而,当我 运行 来自 linux01 服务器的以下内容时,我得到以下内容:(由于某种原因,它 运行s来自 linux 机器,而不是简单地执行位于 windows01 机器上的 start.ps1 文件。)

[root@linux01]# ./test.sh

TmaApplication not running, attempting to start
.\psexec.exe : The term '.\psexec.exe' is not recognized as the name of a cmdlet, function, script file, or operable pr
ogram. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
At C:\Program Files (x86)\redacted\redacted\redacted 1.0\redacted Application\start.ps1:3 char:9
+         .\psexec.exe -accepteula TMA.exe /u "Default User" /c y /p 50 ...
+         ~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (.\psexec.exe:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException
 

test.sh文件的内容为:

#!/bin/bash
STP="redacted"
Server="redacted"
User="redacted"
Password="redacted"
TMAVersion="1.0"
PsExecSourceFile="/opt/tools/psexec.exe"
PsExecFileName="psexec.exe"
Test="test.ps1"


sshpass -p $Password ssh -o stricthostkeychecking=no $User@$Server 'powershell -InputFormat None -File "C:/Program Files (x86)/redacted/redacted/redacted '$TMAVersion'/redacted Application/'$Test'"'

我对此非常陌生,我不得不使用复制粘贴和没有复制粘贴的东西。 除此之外一切正常。 如果我 运行 启动。ps1 直接从 windows01 机器通过右键单击“运行 with powershell” 它确实做了什么我想要它做。但是我需要从这台 linux 机器上执行它。

当涉及到 OS 级别时,我可以完全 root/admin 控制 linux 和 windows 环境。但我宁愿限制第三方应用程序。如果不是直接从 Microsoft 或 RedHat

发布,恐怕任何非开源都不是前进的选择

您可以在 linux 机器上安装 Powershell 7 吗? https://github.com/powershell/powershell

然后就可以使用PSSessions通过powershell连接到windows机器了。

$session = New-PSSession -HostName UbuntuVM1 -UserName TestUser
Enter-PSSession $session

更多信息在这里: https://docs.microsoft.com/en-us/powershell/scripting/learn/remoting/ssh-remoting-in-powershell-core?view=powershell-7