使用 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
如果我有头发,我会再次秃头。
我有 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