Guest User

Untitled

a guest
Apr 4th, 2025
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.08 KB | None | 0 0
  1. Clear-Host
  2.  
  3. # Define servers
  4. $servers = @(
  5. @{ FriendlyName = "Friendly name here"; Name = "IP address here"; Username = "your_user_name" },
  6. @{ FriendlyName = "Friendly name here"; Name = "IP address here"; Username = "your_user_name" },
  7. @{ FriendlyName = "Friendly name here"; Name = "IP address here"; Username = "your_user_name" },
  8. @{ FriendlyName = "Friendly name here"; Name = "IP address here"; Username = "your_user_name" }
  9. )
  10.  
  11. # Add Quit Option
  12. $servers += @{ FriendlyName = "Quit"; Name = $null }
  13.  
  14. # Start Remote Desktop
  15. function Start-RDP {
  16. param ($Server)
  17. if ($Server.Name) {
  18. Write-Host "Starting Remote Desktop for $($Server.FriendlyName) ($($Server.Name))..."
  19. Start-Process -FilePath "mstsc.exe" -ArgumentList "/v:$($Server.Name)"
  20. } else {
  21. Write-Host "Invalid server details. Skipping."
  22. }
  23. }
  24.  
  25. # Interactive scrolling
  26. function Show-Menu {
  27. param (
  28. [array]$Items
  29. )
  30.  
  31. $selectedIndex = 0
  32. $key = $null
  33.  
  34. # Save cursor position
  35. $initialCursorTop = [Console]::CursorTop
  36.  
  37. while ($true) {
  38. # Clear console at start of every loop
  39. Clear-Host
  40.  
  41. # Reset cursor to top of menu
  42. [Console]::SetCursorPosition(0, $initialCursorTop)
  43.  
  44. Write-Host "Remote Servers" -ForegroundColor DarkGreen
  45. for ($i = 0; $i -lt $Items.Count; $i++) {
  46. if ($i -eq $selectedIndex) {
  47. if ($Items[$i].FriendlyName -eq "Quit") {
  48. # Highlight Quit in red
  49. Write-Host ">> $($Items[$i].FriendlyName)" -ForegroundColor Red
  50. } else {
  51. # Highlight selected item
  52. Write-Host ">> $($Items[$i].FriendlyName)" -ForegroundColor DarkGreen
  53. }
  54. } else {
  55. # Display unselected items normally
  56. Write-Host " $($Items[$i].FriendlyName)"
  57. }
  58. }
  59.  
  60. # Clear trailing lines while preventing buffer overflow
  61. $cursorTop = $initialCursorTop + $Items.Count + 2
  62. $maxHeight = [Console]::BufferHeight - 1
  63. if ($cursorTop -gt $maxHeight) {
  64. $cursorTop = $maxHeight
  65. }
  66. [Console]::SetCursorPosition(0, $cursorTop)
  67.  
  68. # Read key input
  69. $key = $Host.UI.RawUI.ReadKey("NoEcho, IncludeKeyDown").VirtualKeyCode
  70.  
  71. switch ($key) {
  72. 38 { # Up Arrow
  73. $selectedIndex = ($selectedIndex - 1) % $Items.Count
  74. if ($selectedIndex -lt 0) { $selectedIndex = $Items.Count - 1 }
  75. }
  76. 40 { # Down Arrow
  77. $selectedIndex = ($selectedIndex + 1) % $Items.Count
  78. }
  79. 13 { # Enter
  80. return $Items[$selectedIndex] }
  81. }
  82. }
  83. }
  84.  
  85. # Main Menu Loop
  86. do {
  87. # Clear console before each menu display
  88. Clear-Host
  89.  
  90. $selectedServer = Show-Menu -Items $servers
  91. if ($selectedServer.FriendlyName -eq "Quit") {
  92. Write-Host "Exiting."
  93. break
  94. } else {
  95. Start-RDP -Server $selectedServer
  96. }
  97. } while ($true)
Advertisement
Add Comment
Please, Sign In to add comment