170 lines
		
	
	
		
			No EOL
		
	
	
		
			4.1 KiB
		
	
	
	
		
			PowerShell
		
	
	
	
	
	
			
		
		
	
	
			170 lines
		
	
	
		
			No EOL
		
	
	
		
			4.1 KiB
		
	
	
	
		
			PowerShell
		
	
	
	
	
	
| ### Var
 | |
| $ServiceName = "*sshd*"		# formate wildcard (*)
 | |
| $Server      = "localhost"	# default
 | |
| 
 | |
| $server_list = @(
 | |
| "192.168.3.99",
 | |
| "192.168.3.100"
 | |
| )
 | |
| 
 | |
| ### Console Size
 | |
| # $size = $Host.UI.RawUI.WindowSize
 | |
| # $size.Width = 30
 | |
| # $size.Height = 25
 | |
| # $Host.UI.RawUI.WindowSize = $size
 | |
| # $title = $Host.UI.RawUI.WindowTitle
 | |
| # $title = "Menu Service Start-Stop"
 | |
| # $Host.UI.RawUI.WindowTitle = $title
 | |
| 
 | |
| ### Module ps-menu
 | |
| ### Source: https://github.com/chrisseroka/ps-menu
 | |
| function DrawMenu {
 | |
|     param ($menuItems, $menuPosition, $Multiselect, $selection)
 | |
|     $l = $menuItems.length
 | |
|     for ($i = 0; $i -le $l;$i++) {
 | |
| 		if ($menuItems[$i] -ne $null){
 | |
| 			$item = $menuItems[$i]
 | |
| 			if ($Multiselect)
 | |
| 			{
 | |
| 				if ($selection -contains $i){
 | |
| 					$item = '[x] ' + $item
 | |
| 				}
 | |
| 				else {
 | |
| 					$item = '[ ] ' + $item
 | |
| 				}
 | |
| 			}
 | |
| 			if ($i -eq $menuPosition) {
 | |
| 				Write-Host "> $($item)" -ForegroundColor Green
 | |
| 			} else {
 | |
| 				Write-Host "  $($item)"
 | |
| 			}
 | |
| 		}
 | |
|     }
 | |
| }
 | |
| 
 | |
| function Toggle-Selection {
 | |
| 	param ($pos, [array]$selection)
 | |
| 	if ($selection -contains $pos){ 
 | |
| 		$result = $selection | where {$_ -ne $pos}
 | |
| 	}
 | |
| 	else {
 | |
| 		$selection += $pos
 | |
| 		$result = $selection
 | |
| 	}
 | |
| 	$result
 | |
| }
 | |
| 
 | |
| function Menu {
 | |
|     param ([array]$menuItems, [switch]$ReturnIndex=$false, [switch]$Multiselect)
 | |
|     $vkeycode = 0
 | |
|     $pos = 0
 | |
|     $selection = @()
 | |
|     if ($menuItems.Length -gt 0)
 | |
| 	{
 | |
| 		try {
 | |
| 			[console]::CursorVisible=$false #prevents cursor flickering
 | |
| 			DrawMenu $menuItems $pos $Multiselect $selection
 | |
| 			While ($vkeycode -ne 13 -and $vkeycode -ne 27) {
 | |
| 				$press = $host.ui.rawui.readkey("NoEcho,IncludeKeyDown")
 | |
| 				$vkeycode = $press.virtualkeycode
 | |
| 				If ($vkeycode -eq 38 -or $press.Character -eq 'k') {$pos--}
 | |
| 				If ($vkeycode -eq 40 -or $press.Character -eq 'j') {$pos++}
 | |
| 				If ($vkeycode -eq 36) { $pos = 0 }
 | |
| 				If ($vkeycode -eq 35) { $pos = $menuItems.length - 1 }
 | |
| 				If ($press.Character -eq ' ') { $selection = Toggle-Selection $pos $selection }
 | |
| 				if ($pos -lt 0) {$pos = 0}
 | |
| 				If ($vkeycode -eq 27) {$pos = $null }
 | |
| 				if ($pos -ge $menuItems.length) {$pos = $menuItems.length -1}
 | |
| 				if ($vkeycode -ne 27)
 | |
| 				{
 | |
| 					$startPos = [System.Console]::CursorTop - $menuItems.Length
 | |
| 					[System.Console]::SetCursorPosition(0, $startPos)
 | |
| 					DrawMenu $menuItems $pos $Multiselect $selection
 | |
| 				}
 | |
| 			}
 | |
| 		}
 | |
| 		finally {
 | |
| 			[System.Console]::SetCursorPosition(0, $startPos + $menuItems.Length)
 | |
| 			[console]::CursorVisible = $true
 | |
| 		}
 | |
| 	}
 | |
| 	else {
 | |
| 		$pos = $null
 | |
| 	}
 | |
| 
 | |
|     if ($ReturnIndex -eq $false -and $pos -ne $null)
 | |
| 	{
 | |
| 		if ($Multiselect){
 | |
| 			return $menuItems[$selection]
 | |
| 		}
 | |
| 		else {
 | |
| 			return $menuItems[$pos]
 | |
| 		}
 | |
| 	}
 | |
| 	else 
 | |
| 	{
 | |
| 		if ($Multiselect){
 | |
| 			return $selection
 | |
| 		}
 | |
| 		else {
 | |
| 			return $pos
 | |
| 		}
 | |
| 	}
 | |
| }
 | |
| 
 | |
| ### Get-Menu
 | |
| function Get-Menu ($server) {
 | |
| 	Write-Host
 | |
| 	$sn = $ServiceName -replace "\*"
 | |
| 	$menu = menu @("Get Services $sn", "Start Services $sn", "Stop Services $sn", "Restart Services $sn", "Select Server") -ReturnIndex
 | |
| 	if ($menu -eq 0) {
 | |
| 		Get-ServiceColor
 | |
| 		Get-Menu -server $server
 | |
| 	}
 | |
| 	elseif ($menu -eq 1) {
 | |
| 		Get-Service $ServiceName -ComputerName $server | Start-Service
 | |
| 		Get-ServiceColor
 | |
| 		Get-Menu -server $server
 | |
| 	}
 | |
| 	elseif ($menu -eq 2) {
 | |
| 		Get-Service $ServiceName -ComputerName $server | Stop-Service -Force
 | |
| 		Get-ServiceColor
 | |
| 		Get-Menu -server $server
 | |
| 	}
 | |
| 	elseif ($menu -eq 3) {
 | |
| 		Get-Service $ServiceName -ComputerName $server | Restart-Service -Force
 | |
| 		Get-ServiceColor
 | |
| 		Get-Menu -server $server
 | |
| 	}
 | |
| 	elseif ($menu -eq 4) {
 | |
| 		Write-Host
 | |
| 		$select_servers = menu $server_list
 | |
| 		$server         = $select_servers
 | |
| 		clear
 | |
| 		Get-Menu -server $server
 | |
| 	}
 | |
| }
 | |
| 
 | |
| ### Get-Service
 | |
| function Get-ServiceColor {
 | |
| 	clear
 | |
| 	$services = Get-Service $ServiceName -ComputerName $server
 | |
| 	Write-Host
 | |
| 	foreach ($s in $services) {
 | |
| 		$name = $s.Name
 | |
| 		$stat = $s.Status
 | |
| 		if ($stat -eq "Running") {
 | |
| 			Write-Host "  $server " -NoNewline
 | |
| 			Write-Host "$stat " -ForegroundColor Green -NoNewline
 | |
| 			Write-Host "$Name"
 | |
| 		}
 | |
| 		elseif ($stat -eq "Stopped") {
 | |
| 			Write-Host "$stat " -ForegroundColor Red -NoNewline
 | |
| 			Write-Host "$Name"
 | |
| 		}
 | |
| 	}
 | |
| 	Write-Host
 | |
| }
 | |
| 
 | |
| clear
 | |
| Get-Menu -server $server |