Как создать в Powershell Menu представление о Меню - PullRequest
0 голосов
/ 30 октября 2018

Я разработал небольшой полезный скрипт для мониторинга и управления Сервисами на удаленных серверах:

do {
    $srv = Read-Host 'What is your ServerName?'
    $srvs = Read-Host 'What is ServiceName?'
    $userMenuChoice = Read-Host -Prompt "
    `n1. ServiceList
    `n2. Service Status.
    `n3. Stop Service.
    `n4. Start Service.
    `n5. Exit
    `nPlease Select Operation"

    switch($userMenuChoice){
        1{Get-Service -ComputerName $srv | select -property name,starttype}
        2{gsv -cn $srv -Name "$srvs*" | Out-String}
        3{Get-Service -Name "$srvs*" -ComputerName $srv | Stop-Service}
        4{Get-Service -Name "$srvs*" -ComputerName $srv | Start-Service}
        5{exit}
    }
} while ( $userMenuChoice -ne 4 )

Пожалуйста, помогите мне выяснить, как я могу получить приглашение сохранить тот же сервер и службу (или НЕ) и продолжить использовать то же самое меню. Примерно так: Прежде чем попасть в MENU $ userMenuChoice, он спросит, хочу ли я сохранить тот же сервер Y / N (по умолчанию Y) Хотите ли вы сохранить тот же сервис Y / N (Y по умолчанию) ...

Также как я могу очистить экран перед переходом к следующему меню. Спасибо!

Ответы [ 2 ]

0 голосов
/ 30 октября 2018

Это называется Scope. Variables созданный в блоке может выжить только в этой итерации блока.

$A = "Hello"
While(1 -eq 1){
    $B = Read-Host 'Type Name?'
    "$A $B"
}

$A навсегда будет Hello, потому что это было сделано за пределами $B изменится навсегда, потому что внутри Сфера Пока. (Также потому, что каждый раз, когда вы звоните, когда вы в любом случае заменяете $ B хостом чтения) *

То, что вы хотите сделать, - это указать опцию ServerName и поместить переменную вне области while.

$CurrentServer = $Null
$CurrentService = $Null
do {
    if(!($CurrentServer) -or $(Read-Host 'Change Server (Y,N)?') -eq "Y"){
        $CurrentServer = Read-Host 'What is your ServerName?'
    }

    if(!($CurrentService) -or $(Read-Host 'Change Service (Y,N)?') -eq "Y"){
        $CurrentService = Read-Host 'What is ServiceName?'
    }

    $userMenuChoice = Read-Host -Prompt @"
1. ServiceList
2. Service Status.
3. Stop Service.
4. Start Service.
5. Exit
Please Select Operation
"@
    switch($userMenuChoice){
        1{Get-Service -ComputerName $CurrentServer | select -property name,starttype}
        2{gsv -cn $CurrentServer -Name "$CurrentService*" | Out-String}
        3{Get-Service -Name "$CurrentService*" -ComputerName $CurrentServer | Stop-Service}
        4{Get-Service -Name "$CurrentService*" -ComputerName $CurrentServer | Start-Service}
        5{exit}
    }
} while ( $userMenuChoice -ne 4 )

Линия

if(!($CurrentServer) -or $(Read-Host 'Change Server (Y,N)?') -eq "Y"){}

Позволяет вам сменить сервер и службу, если вы этого хотите, но также позволяет пропустить ее при необходимости.

Это говорит о том, что $CurrentServer пусто ИЛИ, если $CurrentServer имеет значение Спросить сервер изменений, Если сервер изменений равен Y, тогда запустите if

0 голосов
/ 30 октября 2018

Это кажется слишком простым. Поместите Read-Host командлеты вне цикла.

$srv = Read-Host 'What is your ServerName?'
$srvs = Read-Host 'What is ServiceName?'

do {
  $userMenuChoice = Read-Host -Prompt "
  `n1. ServiceList
  `n2. Service Status.
  `n3. Stop Service.
  `n4. Start Service.
  `n5. Exit
  `nPlease Select Operation"
   switch($userMenuChoice){
     1{Get-Service -ComputerName $srv | select -property name,starttype}
     2{gsv -cn $srv -Name "$srvs*" | Out-String}
     3{Get-Service -Name "$srvs*" -ComputerName $srv | Stop-Service}
     4{Get-Service -Name "$srvs*" -ComputerName $srv | Start-Service}
     5{exit}
   }
 } while ( $userMenuChoice -ne 4 )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...