Проверьте, является ли Read-Host номером для Коммутатора - PullRequest
0 голосов
/ 24 августа 2018

Я только учусь switch, чтобы сделать мою логику немного чище, и, похоже, она работает, за исключением того, что у меня возникают проблемы с определением, является ли мое значение Read-Host числом (для выбора номера точки доступа).

     ## Give option to reset all aps on site
    $continueVal = Read-Host "`nSpecify AP # to see more details or type 'Reset' to reset all APs in Store $Store"

## Стартовый переключатель

$event = switch ($continueVal) {
    [int]{
        $apNumber = $continueVal
        Query-AP($apNumber)
    }
    'Reset' {
        Manage-Prelim($e = 2)
    }
    default {
        Repeat
    }
}

Когда я использовал If/Else/ElseIf, я использовал бы if($continueVal -gt 0), который работал бы, но все еще грязно.С switch кажется, что -gt 0 является неправильным синтаксисом и дает сбой.Как бы я эффективно проверил, является ли значение $continueVal числом для передачи его следующей функции как $apNumber?

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

Ответы [ 2 ]

0 голосов
/ 24 августа 2018

Вот еще один подход, который использует параметры и наборы параметров:

# testscript.ps1
[CmdletBinding(DefaultParameterSetName = "APNumber")]
param(
  [Parameter(Mandatory = $true,ParameterSetName = "APNumber")]
  [Int] $APNumber,

  [Parameter(Mandatory = $true,ParameterSetName = "Controller")]
  [String] $Controller,

  [Parameter(Mandatory = $true,ParameterSetName = "Reset")]
  [Switch] $Reset
)

switch ( $PSCmdlet.ParameterSetName ) {
  "APNumber" {
    "You specified -APNumber with value '$APNumber'"
    break
  }
  "Controller" {
    "You specified -Controller with value '$Controller'"
    break
  }
  "Reset" {
    "You specified -Reset"
    break
  }
}

Этот скрипт прост в использовании. Пример использования:

testscript -APNumber 3
testscript -Controller "foo"
testscript -Reset

Если вы пропустите какие-либо параметры, будет предложено указать параметр -APNumber (поскольку он указывает его как набор параметров по умолчанию).

0 голосов
/ 24 августа 2018

Теперь, когда я понимаю ваш вопрос больше, это можно сделать с помощью switch -regex и анализа.Вот краткий пример:

do {
  $response = Read-Host "Enter a response"
  $valid = $true
  switch -regex ( $response ) {
    '^AP Number \d+$' {
      $arg = [Regex]::Match($_,'\d+$').Value -as [Int]
      Write-Host "You entered 'AP Number $arg'"
      break
    }
    '^Controller \S+$' {
      $arg = [Regex]::Match($_,'\S+$').Value
      Write-Host "You entered 'Controller $arg'"
      break
    }
    '^Reset$' {
      Write-Host "You entered 'Reset'"
      break
    }
    default {
      $valid = $false
      Write-Host "Invalid entry"
    }
  }
}
until ( $valid )

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...