2013-04-28 12 views
22

W jaki sposób sprawdzić, czy liczba znaków w zmiennej $ dbUserName jest większa niż osiem znaków?Jak mogę przetestować, czy zmienna ma więcej niż osiem znaków w PowerShell?

Nie mogę znaleźć polecenia lub serii poleceń, które pozwolą mi to zrobić. Mam tylko udało się znaleźć, jeśli zmienna ma wartość null:

if ($dbUserName) { 
    Write-Output " You left Username blank" 
    $dbUserName = read-host 
} 

Ale chciałbym Kolejny test tak:

if ($dbUserName [String] > 8) } 
    Write-Output " Please enter more than 8 characters " 
    $dbUserName=read-host " Re-enter database user name" 
} 
+2

Dziwne, nikt nie złapał logiki w tym kodzie. Sprawdzasz, czy długość nazwy użytkownika jest większa niż 8, i na True, prosisz ich o wpisanie większej liczby znaków. Tak więc, jeśli długość jest mniejsza niż lub równa 8, zostanie zaakceptowana. Myślę, że powinno to być -lt lub -le ... –

Odpowiedz

45

użyć właściwości length typu [String]:

if ($dbUserName.length -gt 8) { 
    Write-Output "Please enter more than 8 characters." 
    $dbUserName = Read-Host "Re-enter database username" 
} 

Pamiętaj, że musisz użyć -gt zamiast > w swoim stanie if. PowerShell wykorzystuje następujące porównania operatorzy porównać wartości i warunki badań:

  • eq = równa
  • -ne = nie równa
  • -lt = mniej niż
  • -gt = większa niż
  • le = mniej niż lub równa się
  • -ge = większy niż lub równy
+1

> jest operatorem przekierowania. Podejrzewam, że to może być lepszy wybór. – mjolinor

+0

@mjolinor Tak, zgadza się. Perypet pracy z wieloma językami. :) –

+0

Logika tego wpisu jest nadal wadliwa. Jeśli nazwa użytkownika ma długość WIĘCEJ niż 8 znaków, wynikiem jest: wpisać więcej niż 8 znaków? Powinno to być -lt – LPChip

0

Można również użyć opcji -match przeciwko wyrażeniu regularnemu. Ex:

if ($dbUserName -match ".{8}") 
{ 
    Write-Output " Please enter more than 8 characters " 
    $dbUserName=read-host " Re-enter database user name" 
} 

Także jeśli jesteś podobny do mnie i lubią swoje nawiasów klamrowych być w tej samej pozycji poziomej dla swoich bloków kodu, które można umieścić, że w nowej linii, gdyż spodziewa blok kodu to będzie spójrz na następną linię. W niektórych poleceniach, w których pierwszy nawias klamrowy musi być w linii z twoim poleceniem, możesz użyć znacznika akcentu grave (`), aby nakazać, aby powershell traktował następny wiersz jako kontynuację.

Powiązane problemy