498 lines
15 KiB
PowerShell
498 lines
15 KiB
PowerShell
$ErrorActionPreference = "Stop"
|
|
|
|
$servers = @(
|
|
@{
|
|
Environment = "DEV"
|
|
Name = "Development - dev-server001.contoso.com"
|
|
Host = "dev-server001.contoso.com"
|
|
Port = 22
|
|
},
|
|
@{
|
|
Environment = "PROD"
|
|
Name = "Production - prod-server001.contoso.com"
|
|
Host = "prod-server001.contoso.com"
|
|
Port = 22
|
|
},
|
|
@{
|
|
Environment = "PROD"
|
|
Name = "Production - prod-server002.contoso.com"
|
|
Host = "prod-server002.contoso.com"
|
|
Port = 22
|
|
},
|
|
@{
|
|
Environment = "PROD"
|
|
Name = "Production - prod-server003.contoso.com"
|
|
Host = "prod-server003.contoso.com"
|
|
Port = 22
|
|
},
|
|
@{
|
|
Environment = "PROD"
|
|
Name = "Production - prod-server004.contoso.com"
|
|
Host = "prod-server004.contoso.com"
|
|
Port = 22
|
|
},
|
|
@{
|
|
Environment = "PROD"
|
|
Name = "Production - prod-server005.contoso.com"
|
|
Host = "prod-server005.contoso.com"
|
|
Port = 22
|
|
},
|
|
@{
|
|
Environment = "PROD"
|
|
Name = "Production - prod-server006.contoso.com"
|
|
Host = "prod-server006.contoso.com"
|
|
Port = 22
|
|
},
|
|
@{
|
|
Environment = "PROD"
|
|
Name = "Production - prod-server007.contoso.com"
|
|
Host = "prod-server007.contoso.com"
|
|
Port = 22
|
|
},
|
|
@{
|
|
Environment = "PROD"
|
|
Name = "Production - prod-server008.contoso.com"
|
|
Host = "prod-server008.contoso.com"
|
|
Port = 22
|
|
},
|
|
@{
|
|
Environment = "PROD"
|
|
Name = "Production - prod-server009.contoso.com"
|
|
Host = "prod-server009.contoso.com"
|
|
Port = 22
|
|
},
|
|
@{
|
|
Environment = "PROD"
|
|
Name = "Production - prod-server010.contoso.com"
|
|
Host = "prod-server010.contoso.com"
|
|
Port = 22
|
|
},
|
|
@{
|
|
Environment = "PROD"
|
|
Name = "Production - prod-server011.contoso.com"
|
|
Host = "prod-server011.contoso.com"
|
|
Port = 22
|
|
},
|
|
@{
|
|
Environment = "PROD"
|
|
Name = "Production - prod-server012.contoso.com"
|
|
Host = "prod-server012.contoso.com"
|
|
Port = 22
|
|
},
|
|
@{
|
|
Environment = "PROD"
|
|
Name = "Production - prod-server013.contoso.com"
|
|
Host = "prod-server013.contoso.com"
|
|
Port = 22
|
|
},
|
|
@{
|
|
Environment = "PROD"
|
|
Name = "Production - prod-server014.contoso.com"
|
|
Host = "prod-server014.contoso.com"
|
|
Port = 22
|
|
},
|
|
@{
|
|
Environment = "PROD"
|
|
Name = "Production - prod-server015.contoso.com"
|
|
Host = "prod-server015.contoso.com"
|
|
Port = 22
|
|
},
|
|
@{
|
|
Environment = "PROD"
|
|
Name = "Production - prod-server016.contoso.com"
|
|
Host = "prod-server016.contoso.com"
|
|
Port = 22
|
|
},
|
|
@{
|
|
Environment = "PROD"
|
|
Name = "Production - prod-server017.contoso.com"
|
|
Host = "prod-server017.contoso.com"
|
|
Port = 22
|
|
},
|
|
@{
|
|
Environment = "PROD"
|
|
Name = "Production - prod-server018.contoso.com"
|
|
Host = "prod-server018.contoso.com"
|
|
Port = 22
|
|
},
|
|
@{
|
|
Environment = "PROD"
|
|
Name = "Production - prod-server019.contoso.com"
|
|
Host = "prod-server019.contoso.com"
|
|
Port = 22
|
|
},
|
|
@{
|
|
Environment = "PROD"
|
|
Name = "Production - prod-server020.contoso.com"
|
|
Host = "prod-server020.contoso.com"
|
|
Port = 22
|
|
},
|
|
@{
|
|
Environment = "PROD"
|
|
Name = "Production - prod-server021.contoso.com"
|
|
Host = "prod-server021.contoso.com"
|
|
Port = 22
|
|
},
|
|
@{
|
|
Environment = "PROD"
|
|
Name = "Production - prod-server022.contoso.com"
|
|
Host = "prod-server022.contoso.com"
|
|
Port = 22
|
|
},
|
|
@{
|
|
Environment = "PROD"
|
|
Name = "Production - prod-server023.contoso.com"
|
|
Host = "prod-server023.contoso.com"
|
|
Port = 22
|
|
},
|
|
@{
|
|
Environment = "PROD"
|
|
Name = "Production - prod-server024.contoso.com"
|
|
Host = "prod-server024.contoso.com"
|
|
Port = 22
|
|
},
|
|
@{
|
|
Environment = "QAS"
|
|
Name = "Quality - qas-server001.contoso.com"
|
|
Host = "qas-server001.contoso.com"
|
|
Port = 22
|
|
},
|
|
@{
|
|
Environment = "QAS"
|
|
Name = "Quality - qas-server002.contoso.com"
|
|
Host = "qas-server002.contoso.com"
|
|
Port = 22
|
|
},
|
|
@{
|
|
Environment = "QAS"
|
|
Name = "Quality - qas-server003.contoso.com"
|
|
Host = "qas-server003.contoso.com"
|
|
Port = 22
|
|
},
|
|
@{
|
|
Environment = "QAS"
|
|
Name = "Quality - qas-server004.contoso.com"
|
|
Host = "qas-server004.contoso.com"
|
|
Port = 22
|
|
},
|
|
@{
|
|
Environment = "QAS"
|
|
Name = "Quality - qas-server005.contoso.com"
|
|
Host = "qas-server005.contoso.com"
|
|
Port = 22
|
|
},
|
|
@{
|
|
Environment = "QAS"
|
|
Name = "Quality - qas-server006.contoso.com"
|
|
Host = "qas-server006.contoso.com"
|
|
Port = 22
|
|
},
|
|
@{
|
|
Environment = "QAS"
|
|
Name = "Quality - qas-server007.contoso.com"
|
|
Host = "qas-server007.contoso.com"
|
|
Port = 22
|
|
},
|
|
@{
|
|
Environment = "QAS"
|
|
Name = "Quality - qas-server008.contoso.com"
|
|
Host = "qas-server008.contoso.com"
|
|
Port = 22
|
|
},
|
|
@{
|
|
Environment = "QAS"
|
|
Name = "Quality - qas-server009.contoso.com"
|
|
Host = "qas-server009.contoso.com"
|
|
Port = 22
|
|
},
|
|
@{
|
|
Environment = "QAS"
|
|
Name = "Quality - qas-server010.contoso.com"
|
|
Host = "qas-server010.contoso.com"
|
|
Port = 22
|
|
},
|
|
@{
|
|
Environment = "QAS"
|
|
Name = "Quality - qas-server011.contoso.com"
|
|
Host = "qas-server011.contoso.com"
|
|
Port = 22
|
|
},
|
|
@{
|
|
Environment = "QAS"
|
|
Name = "Quality - qas-server012.contoso.com"
|
|
Host = "qas-server012.contoso.com"
|
|
Port = 22
|
|
},
|
|
@{
|
|
Environment = "QAS"
|
|
Name = "Quality - qas-server013.contoso.com"
|
|
Host = "qas-server013.contoso.com"
|
|
Port = 22
|
|
},
|
|
@{
|
|
Environment = "QAS"
|
|
Name = "Quality - qas-server014.contoso.com"
|
|
Host = "qas-server014.contoso.com"
|
|
Port = 22
|
|
},
|
|
@{
|
|
Environment = "QAS"
|
|
Name = "Quality - qas-server015.contoso.com"
|
|
Host = "qas-server015.contoso.com"
|
|
Port = 22
|
|
},
|
|
@{
|
|
Environment = "QAS"
|
|
Name = "Quality - qas-server016.contoso.com"
|
|
Host = "qas-server016.contoso.com"
|
|
Port = 22
|
|
},
|
|
@{
|
|
Environment = "QAS"
|
|
Name = "Quality - qas-server017.contoso.com"
|
|
Host = "qas-server017.contoso.com"
|
|
Port = 22
|
|
},
|
|
@{
|
|
Environment = "QAS"
|
|
Name = "Quality - qas-server018.contoso.com"
|
|
Host = "qas-server018.contoso.com"
|
|
Port = 22
|
|
},
|
|
@{
|
|
Environment = "QAS"
|
|
Name = "Quality - qas-server019.contoso.com"
|
|
Host = "qas-server019.contoso.com"
|
|
Port = 22
|
|
},
|
|
@{
|
|
Environment = "QAS"
|
|
Name = "Quality - qas-server020.contoso.com"
|
|
Host = "qas-server020.contoso.com"
|
|
Port = 22
|
|
},
|
|
@{
|
|
Environment = "QAS"
|
|
Name = "Quality - qas-server021.contoso.com"
|
|
Host = "qas-server021.contoso.com"
|
|
Port = 22
|
|
},
|
|
@{
|
|
Environment = "QAS"
|
|
Name = "Quality - qas-server022.contoso.com"
|
|
Host = "qas-server022.contoso.com"
|
|
Port = 22
|
|
},
|
|
@{
|
|
Environment = "QAS"
|
|
Name = "Quality - qas-server023.contoso.com"
|
|
Host = "qas-server023.contoso.com"
|
|
Port = 22
|
|
},
|
|
@{
|
|
Environment = "QAS"
|
|
Name = "Quality - qas-server024.contoso.com"
|
|
Host = "qas-server024.contoso.com"
|
|
Port = 22
|
|
},
|
|
@{
|
|
Environment = "QAS"
|
|
Name = "Quality - qas-server025.contoso.com"
|
|
Host = "qas-server025.contoso.com"
|
|
Port = 22
|
|
},
|
|
@{
|
|
Environment = "QAS"
|
|
Name = "Quality - qas-server026.contoso.com"
|
|
Host = "qas-server026.contoso.com"
|
|
Port = 22
|
|
},
|
|
@{
|
|
Environment = "PROD"
|
|
Name = "Production - prod-server025.contoso.com"
|
|
Host = "prod-server025.contoso.com"
|
|
Port = 22
|
|
},
|
|
@{
|
|
Environment = "THIRD_PARTY"
|
|
Name = "ThirdParty - thirdparty-server001.contoso.com"
|
|
Host = "thirdparty-server001.contoso.com"
|
|
Port = 22
|
|
},
|
|
@{
|
|
Environment = "THIRD_PARTY"
|
|
Name = "ThirdParty - thirdparty-server002.contoso.com"
|
|
Host = "thirdparty-server002.contoso.com"
|
|
Port = 22
|
|
},
|
|
@{
|
|
Environment = "THIRD_PARTY"
|
|
Name = "ThirdParty - thirdparty-server003.contoso.com"
|
|
Host = "thirdparty-server003.contoso.com"
|
|
Port = 22
|
|
},
|
|
@{
|
|
Environment = "THIRD_PARTY"
|
|
Name = "ThirdParty - thirdparty-server004.contoso.com"
|
|
Host = "thirdparty-server004.contoso.com"
|
|
Port = 22
|
|
},
|
|
@{
|
|
Environment = "THIRD_PARTY"
|
|
Name = "ThirdParty - thirdparty-server005.contoso.com"
|
|
Host = "thirdparty-server005.contoso.com"
|
|
Port = 22
|
|
},
|
|
@{
|
|
Environment = "THIRD_PARTY"
|
|
Name = "ThirdParty - thirdparty-server006.contoso.com"
|
|
Host = "thirdparty-server006.contoso.com"
|
|
Port = 22
|
|
},
|
|
@{
|
|
Environment = "THIRD_PARTY"
|
|
Name = "ThirdParty - thirdparty-server007.contoso.com"
|
|
Host = "thirdparty-server007.contoso.com"
|
|
Port = 22
|
|
},
|
|
@{
|
|
Environment = "THIRD_PARTY"
|
|
Name = "ThirdParty - thirdparty-server008.contoso.com"
|
|
Host = "thirdparty-server008.contoso.com"
|
|
Port = 22
|
|
},
|
|
@{
|
|
Environment = "THIRD_PARTY"
|
|
Name = "ThirdParty - thirdparty-server009.contoso.com"
|
|
Host = "thirdparty-server009.contoso.com"
|
|
Port = 22
|
|
},
|
|
@{
|
|
Environment = "THIRD_PARTY"
|
|
Name = "ThirdParty - thirdparty-server010.contoso.com"
|
|
Host = "thirdparty-server010.contoso.com"
|
|
Port = 22
|
|
},
|
|
@{
|
|
Environment = "THIRD_PARTY"
|
|
Name = "ThirdParty - thirdparty-server011.contoso.com"
|
|
Host = "thirdparty-server011.contoso.com"
|
|
Port = 22
|
|
},
|
|
@{
|
|
Environment = "THIRD_PARTY"
|
|
Name = "ThirdParty - thirdparty-server012.contoso.com"
|
|
Host = "thirdparty-server012.contoso.com"
|
|
Port = 22
|
|
},
|
|
@{
|
|
Environment = "THIRD_PARTY"
|
|
Name = "ThirdParty - thirdparty-server013.contoso.com"
|
|
Host = "thirdparty-server013.contoso.com"
|
|
Port = 22
|
|
}
|
|
)
|
|
|
|
$sshUser = "USER"
|
|
$environments = @("DEV", "QAS", "PROD", "THIRD_PARTY")
|
|
|
|
function Show-EnvironmentMenu {
|
|
Clear-Host
|
|
Write-Host "Select environment:" -ForegroundColor Cyan
|
|
Write-Host ""
|
|
|
|
for ($i = 0; $i -lt $environments.Count; $i++) {
|
|
Write-Host ("[{0}] {1}" -f ($i + 1), $environments[$i])
|
|
}
|
|
|
|
Write-Host ""
|
|
Write-Host "[0] Exit"
|
|
Write-Host ""
|
|
}
|
|
|
|
function Show-ServerMenu {
|
|
param (
|
|
[string]$Environment
|
|
)
|
|
|
|
Clear-Host
|
|
Write-Host ("Select server from {0}:" -f $Environment) -ForegroundColor Cyan
|
|
Write-Host ""
|
|
|
|
$environmentServers = @($servers | Where-Object { $_.Environment -eq $Environment })
|
|
|
|
for ($i = 0; $i -lt $environmentServers.Count; $i++) {
|
|
$server = $environmentServers[$i]
|
|
Write-Host ("[{0}] {1} ({2}:{3})" -f ($i + 1), $server.Name, $server.Host, $server.Port)
|
|
}
|
|
|
|
Write-Host ""
|
|
Write-Host "[0] Back"
|
|
Write-Host ""
|
|
}
|
|
|
|
if (-not (Get-Command ssh.exe -ErrorAction SilentlyContinue)) {
|
|
Write-Host "Could not find ssh.exe on Windows." -ForegroundColor Red
|
|
Write-Host "Install or enable the OpenSSH client in Windows Optional Features." -ForegroundColor Yellow
|
|
exit 1
|
|
}
|
|
|
|
while ($true) {
|
|
Show-EnvironmentMenu
|
|
$environmentChoice = Read-Host "Your choice"
|
|
|
|
if ($environmentChoice -eq "0") {
|
|
Write-Host "Closing..."
|
|
exit 0
|
|
}
|
|
|
|
if (-not [int]::TryParse($environmentChoice, [ref]$null)) {
|
|
Write-Host "Invalid choice." -ForegroundColor Red
|
|
Start-Sleep -Seconds 2
|
|
continue
|
|
}
|
|
|
|
$environmentIndex = [int]$environmentChoice - 1
|
|
|
|
if ($environmentIndex -lt 0 -or $environmentIndex -ge $environments.Count) {
|
|
Write-Host "Invalid choice." -ForegroundColor Red
|
|
Start-Sleep -Seconds 2
|
|
continue
|
|
}
|
|
|
|
$selectedEnvironment = $environments[$environmentIndex]
|
|
$environmentServers = @($servers | Where-Object { $_.Environment -eq $selectedEnvironment })
|
|
|
|
while ($true) {
|
|
Show-ServerMenu -Environment $selectedEnvironment
|
|
$serverChoice = Read-Host "Your choice"
|
|
|
|
if ($serverChoice -eq "0") {
|
|
break
|
|
}
|
|
|
|
if (-not [int]::TryParse($serverChoice, [ref]$null)) {
|
|
Write-Host "Invalid choice." -ForegroundColor Red
|
|
Start-Sleep -Seconds 2
|
|
continue
|
|
}
|
|
|
|
$serverIndex = [int]$serverChoice - 1
|
|
|
|
if ($serverIndex -lt 0 -or $serverIndex -ge $environmentServers.Count) {
|
|
Write-Host "Invalid choice." -ForegroundColor Red
|
|
Start-Sleep -Seconds 2
|
|
continue
|
|
}
|
|
|
|
$selectedServer = $environmentServers[$serverIndex]
|
|
|
|
Write-Host ""
|
|
Write-Host ("Connecting to {0}..." -f $selectedServer.Name) -ForegroundColor Green
|
|
|
|
& ssh.exe -p $selectedServer.Port "$sshUser@$($selectedServer.Host)"
|
|
exit $LASTEXITCODE
|
|
}
|
|
}
|
|
|