Проверка ввода в Powershell - PullRequest
0 голосов
/ 01 апреля 2020
  1. Я хотел бы проверить, чтобы опция ввода была разрешена ТОЛЬКО для номера 1-3, а при вводе других цифр и символов появилось предупреждение, как это сделать?

  2. Могу ли я проверить входную учетную запись пользователя [значение] от пользователя AD, существует или нет на Powershell? Если запись не существует, просто верните предупреждающее сообщение.

Пожалуйста, помогите. Спасибо!

import-module ActiveDirectory
import-module C:\PS\color_menu.psm1


CreateMenu -Title "AD User Account Expire Tools" -MenuItems "View the User Account Expire Date","Set the User Account Expire Date","Exit" -TitleColor Red -LineColor Cyan -menuItemColor Yellow

do {
  [int]$userMenuChoice = 0
  while ( $userMenuChoice -lt 1 -or $userMenuChoice -gt 3) {
    Write-Host "1. View the User Account Expire Date"
    Write-Host "2. Set the User Account Expire Date"
    Write-Host "3. Exit"


    [int]$userMenuChoice = Read-Host "Please choose an option"

    switch ($userMenuChoice) {

      1{$useraccount = Read-Host -prompt "Please input an user account"
        Get-ADUser -Identity $useraccount -Properties AccountExpirationDate | Select-Object -Property SamAccountName, Name, AccountExpirationDate
        Write-Host "";
        Write-Host "";
        }

      2{$useraccount = Read-Host -prompt "Please input an user account"
          do {
          $expiredatetimeStr = Read-Host -prompt "Please input the user expiration date and time (DateFormat: MM/dd/yyyy) or just press Enter to make the account non-expiring"

          if ($expiredatetime = $expiredatetimeStr -as [datetime]) {
            Set-ADAccountExpiration -Identity $useraccount -DateTime $expiredatetime
            Get-ADUser -Identity $useraccount -Properties AccountExpirationDate | Select-Object -Property SamAccountName, Name, AccountExpirationDate
            Write-Host "";
            Write-Host "";
          } 
          elseif ($expiredatetimeStr.Trim() -eq '') {
            Clear-ADAccountExpiration -Identity $useraccount
            Get-ADUser -Identity $useraccount -Properties AccountExpirationDate | Select-Object -Property SamAccountName, Name, AccountExpirationDate
            Write-Host "";
            Write-Host "";
          }
          else { 
            Write-Warning 'Please enter a valid date.'
            continue
          }
          break
        } while ($true)
        }
      3{Write-Host "Exit";Exit
       }
      default {Write-Host "Incorrect input" -ForegroundColor Red
      Write-Host "";
      Write-Host "";

      }
    }
  }
} while ( $userMenuChoice -ne 3 )

1 Ответ

0 голосов
/ 01 апреля 2020

Проблема в том, что вы непосредственно приводите пользовательский ввод к целому числу:

$a = [int] Read-Host

Что если возвращаемое значение Read-Host не является целым числом?

Решение просто принять то, что дает Read-Host, и проверить значение после, например:

$a = Read-Host
try {
    $intVal = [Convert]::ToInt32($a, 10)
    ... etc ...
}
catch {
    ... etc ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...