2013-04-28 54 views
22

如何测试$ dbUserName中的字符数是否超过8个字符?如何测试变量在PowerShell中的多于八个字符?

我一直无法找到一个命令或一系列的命令,让我这样做。我只能够找到,如果变量为空:

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

但我想下一个测试是这样的:

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

奇怪的是,没有人抓住这段代码的逻辑。您正在检查用户名长度是否大于8,如果是True,则要求他们输入更多字符。所以,如果长度小于或等于8,它将被接受。我认为它应该是-lt或者-le ... – 2017-03-13 06:49:27

回答

45

使用[String]类型的length属性:

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

请注意,您必须在您的if条件下使用-gt而不是>。 PowerShell使用以下比较运算符对值进行比较和试验条件:

  • 当量=等于
  • -ne =不等于
  • -lt =小于
  • -gt =大于
  • -le =小于或等于
  • -ge =大于或等于
+1

>是重定向操作符。我怀疑 - 可能是更好的选择。 – mjolinor 2013-04-28 12:10:56

+0

@mjolinor是的,这是正确的。使用多种语言的风险。 :) – 2013-04-28 13:10:21

+0

这篇文章的逻辑仍然有缺陷。如果用户名长度超过8个字符,则输出为:输入多于8个字符?它应该是-lt – LPChip 2017-06-12 09:56:13

0

您也可以对正则表达式使用-match。例如:

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

此外,如果你和我一样,喜欢你的花括号是在你的代码块相同的水平位置,你可以把一个新行,因为它是期待一个代码块它会看下一行。在第一个花括号必须与命令一致的某些命令中,可以使用粗体重音标记(`)来告诉powershell将下一行作为延续。

相关问题