Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Clear-Host
- # Define servers
- $servers = @(
- @{ FriendlyName = "Friendly name here"; Name = "IP address here"; Username = "your_user_name" },
- @{ FriendlyName = "Friendly name here"; Name = "IP address here"; Username = "your_user_name" },
- @{ FriendlyName = "Friendly name here"; Name = "IP address here"; Username = "your_user_name" },
- @{ FriendlyName = "Friendly name here"; Name = "IP address here"; Username = "your_user_name" }
- )
- # Add Quit Option
- $servers += @{ FriendlyName = "Quit"; Name = $null }
- # Start Remote Desktop
- function Start-RDP {
- param ($Server)
- if ($Server.Name) {
- Write-Host "Starting Remote Desktop for $($Server.FriendlyName) ($($Server.Name))..."
- Start-Process -FilePath "mstsc.exe" -ArgumentList "/v:$($Server.Name)"
- } else {
- Write-Host "Invalid server details. Skipping."
- }
- }
- # Interactive scrolling
- function Show-Menu {
- param (
- [array]$Items
- )
- $selectedIndex = 0
- $key = $null
- # Save cursor position
- $initialCursorTop = [Console]::CursorTop
- while ($true) {
- # Clear console at start of every loop
- Clear-Host
- # Reset cursor to top of menu
- [Console]::SetCursorPosition(0, $initialCursorTop)
- Write-Host "Remote Servers" -ForegroundColor DarkGreen
- for ($i = 0; $i -lt $Items.Count; $i++) {
- if ($i -eq $selectedIndex) {
- if ($Items[$i].FriendlyName -eq "Quit") {
- # Highlight Quit in red
- Write-Host ">> $($Items[$i].FriendlyName)" -ForegroundColor Red
- } else {
- # Highlight selected item
- Write-Host ">> $($Items[$i].FriendlyName)" -ForegroundColor DarkGreen
- }
- } else {
- # Display unselected items normally
- Write-Host " $($Items[$i].FriendlyName)"
- }
- }
- # Clear trailing lines while preventing buffer overflow
- $cursorTop = $initialCursorTop + $Items.Count + 2
- $maxHeight = [Console]::BufferHeight - 1
- if ($cursorTop -gt $maxHeight) {
- $cursorTop = $maxHeight
- }
- [Console]::SetCursorPosition(0, $cursorTop)
- # Read key input
- $key = $Host.UI.RawUI.ReadKey("NoEcho, IncludeKeyDown").VirtualKeyCode
- switch ($key) {
- 38 { # Up Arrow
- $selectedIndex = ($selectedIndex - 1) % $Items.Count
- if ($selectedIndex -lt 0) { $selectedIndex = $Items.Count - 1 }
- }
- 40 { # Down Arrow
- $selectedIndex = ($selectedIndex + 1) % $Items.Count
- }
- 13 { # Enter
- return $Items[$selectedIndex] }
- }
- }
- }
- # Main Menu Loop
- do {
- # Clear console before each menu display
- Clear-Host
- $selectedServer = Show-Menu -Items $servers
- if ($selectedServer.FriendlyName -eq "Quit") {
- Write-Host "Exiting."
- break
- } else {
- Start-RDP -Server $selectedServer
- }
- } while ($true)
Advertisement
Add Comment
Please, Sign In to add comment