【问题标题】:How to create in Powershell Menu insight of Menu如何在 Powershell Menu 中创建 Menu 洞察力
【发布时间】:2018-10-30 17:58:01
【问题描述】:

我想出了一个有用的脚本来帮助监视和控制远程服务器上的服务:

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 默认值)...

还有如何在进入下一个菜单之前清除屏幕。 谢谢!

【问题讨论】:

    标签: powershell menu


    【解决方案1】:

    这称为Scope。 在块中创建的Variables 只能在该块的迭代中存活。

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

    $A 将永远是 Hello,因为它超出了 While 的范围 $B 将永远改变,因为它在 While 范围内。 (也因为每次你打电话时都用 read-host 替换 $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 的值为Ask Change Server,如果Change Server 为Y,则运行if

    【讨论】:

      【解决方案2】:

      这似乎太容易了。将Read-Host cmdlet 放在循环之外。

      $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 )
      

      【讨论】:

      • 好主意,谢谢!但它总是会循环同一台服务器而不选择更改服务器。以前的答案很完美!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-07
      • 2020-04-16
      • 1970-01-01
      • 2020-05-22
      • 1970-01-01
      相关资源
      最近更新 更多