Powershell字符串长度验证-该脚本不验证输入,但在每次执行中创建一个文件

Rez*_*aei 0 powershell cmdlets cmdlet

我创建了一个非常简单的HelloWorld.ps1Power-shell脚本,该脚本接受一个Name参数,验证其长度,然后打印一个hello消息,例如,如果您传递Johnas Name,则应该打印该消息Hello John!

但是奇怪的行为是我每次执行它时:

  • 它不执行验证,因此它接受Name长度超过10个字符的参数。
  • 每次执行它时,它都会创建并更新一个10没有任何扩展名的文件。

这是Power-shell脚本:

param (
    [parameter(Mandatory=$true)]
    [string]
    $Name
)
# Length Validation
if ($Name.Length > 10) {
    Write-Host "Parameter should have at most 10 characters."
    Break
}
Write-Host "Hello $Name!"
Run Code Online (Sandbox Code Playgroud)

这是执行它的命令:

.\HelloWorld.ps1 -Name "John"
Run Code Online (Sandbox Code Playgroud)

我的脚本有什么问题?

Rez*_*aei 5

实际上>输出重定向运算符,它将左操作数的输出发送到右操作数中的指定文件。

例如,$Name.Length > 10Name在名为的文件中输出的长度10

如何验证字符串长度?

您可以使用-gt比运营商更大的是这样的:

if($Name.Length -gt 10)
Run Code Online (Sandbox Code Playgroud)

字符串参数长度验证的更好选择

您可以通过[ValidateLength(int minLength, int maxlength)]以下方式使用属性:

param (
    [ValidateLength(1,10)]
    [parameter(Mandatory=$true)]
    [string]
    $Name
)
Write-Host "Hello $Name!"
Run Code Online (Sandbox Code Playgroud)