如何在Powershell中验证New-ssh Session

时间:2017-06-01 09:53:49

标签: powershell jenkins ssh

我已经下载了Joakim Svendsen的SSH-Sessions,它使用SSH.NET并在Jenkins Windows服务器中安装了PowerShell模块

在Jenkins中,我有以下PowerShell脚本:

Import-Module SSH-Sessions

$lastExitCode = 0
$devApp1 = "10.0.1.109"
$devApp2 = "10.0.1.110"

Write-Output "Deployment started in $devApp1......"

New-SshSession -ComputerName $devApp1 -Username test -Password test@123

问题是,当连接失败时,Jenkins作业不会失败。 Jenkins的输出是:

Unable to connect to 10.0.1.109: Exception calling "Connect" with "0" argumen
t(s): "No connection could be made because the target machine actively refused 
it"
Finished: SUCCESS

如何解决此问题?

1 个答案:

答案 0 :(得分:1)

使用this documentation,我会做这样的事情:

New-SshSession -ComputerName $devApp1 -Username test -Password test@123

if (!$SshSessions.$devApp1.Connected) {
    throw "Session to $devApp1 is not connected"
}

或者这个:

New-SshSession -ComputerName $devApp1 -Username test -Password test@123    
$Session = Get-SshSession -ComputerName $devApp1

if (!$Session.Connected) {
    throw "Session to $devApp1 is not connected"
}

显然,如果您与$devApp1有多个连接,则此代码将无效,但文档中的示例表明它不允许您这样做。无论出于何种原因New-SshSession不支持-PassThru参数,它似乎也不返回会话,也不允许您为会话指定变量。相反,设计使用全局变量:$SshSessions。不是我设计它的方式。

您可能需要查看Posh-SSH。我不记得这是否设计得更好,但我不记得这种问题。它还使用SSH.Net库。或者,WinSCP has a .Net assembly在PowerShell中非常容易使用。