2013-04-28 4 views
22

Comment tester si le nombre de caractères dans $ dbUserName est supérieur à huit caractères?Comment puis-je tester qu'une variable comporte plus de huit caractères dans PowerShell?

J'ai été incapable de trouver une commande ou une série de commandes qui me permettent de le faire. Je n'ai pu trouver si la variable est nulle:

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

Mais je voudrais prochain test comme celui-ci:

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

Bizarre, personne n'a attrapé la logique dans ce code. Vous vérifiez si la longueur du nom d'utilisateur est supérieure à 8, et sur True, vous leur demandez d'entrer plus de caractères. Donc, si la longueur est inférieure ou égale à 8, elle sera acceptée. Je pense qu'il devrait être -lt ou -le ... –

Répondre

45

Utilisez la propriété length du type [String]:

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

Veuillez noter que vous devez utiliser -gt au lieu de > dans votre condition if. PowerShell utilise les opérateurs de comparaison suivants pour comparer les valeurs et les conditions d'essai:

  • -eq = égal à
  • -ne = pas égal à
  • -lt = moins de
  • -gt = supérieur à
  • = inférieur -le ou égal
  • -ge = supérieur ou égal à
+1

> est l'opérateur de redirection. Je soupçonne -gt pourrait être un meilleur choix. – mjolinor

+0

@mjolinor Oui, c'est correct. Les dangers de travailler avec plusieurs langues. :) –

+0

La logique de ce post est toujours erronée. Si le nom d'utilisateur a une longueur de plus de 8 caractères, la sortie est: entrez plus de 8 caractères? Ça devrait être -lt – LPChip

0

Vous pouvez également utiliser -match avec une expression régulière. Ex:

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

Aussi, si vous êtes comme moi et comme vos accolades pour être dans la même position horizontale pour vos blocs de code, vous pouvez mettre cela sur une nouvelle ligne, car il attend un bloc de code, il sera regarde sur la ligne suivante. Dans certaines commandes où le premier accolade doit être en ligne avec votre commande, vous pouvez utiliser un marqueur d'accent grave (`) pour dire à powershell de traiter la ligne suivante comme une continuation.

Questions connexes