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 |