【问题标题】:Using Mandatory Parameters使用强制参数
【发布时间】:2014-09-17 06:22:57
【问题描述】:

我正在开发这个用户脚本,希望得到一些帮助。我只想知道如何设置强制参数或类似于以下变量的东西,以便我可以让用户输入一些信息,而不是在变量上设置空值。任何帮助或建议将不胜感激在此先感谢。

$username = Read-host "Enter username"
$fname = Read-Host "ENTER First Name"
$lname = Read-Host "ENTER Last Name"
$Des   = Read-Host "ENTER Description (Work Area)"
$Title = Read-Host "ENTER Job Title"`enter code here`

【问题讨论】:

  • 现在,您的意思是用户在运行脚本时必须输入参数作为参数,还是您想提示用户这样做,而不接受空响应?
  • 是的,我想提示用户提供信息并且不接受空响应。谢谢
  • @jrussellaz 不是真的,他只是用词不当。他不想要强制参数,他只想提示用户输入而不接受空响应。
  • 只是想澄清一下,以便我以后可以更有效地标记重复项。不是重复的,但答案是一样的?查看来自@keith-hill 的评论:“是的,这有点令人困惑。不过,不会忽略参数上的 HelpMessage 属性。当您在未指定强制参数的情况下调用命令时会使用它。此时会提示您输入该参数的值。如果指定 HelpMessage,则该文本将显示为该提示的一部分。"

标签: powershell


【解决方案1】:

我要做的是创建一个函数来检查 $null 或仅空白字符串,并重新提示用户输入信息。比如:

function get-NonNullString{
Param([string]$Prompt=(throw "You must provide text as a prompt"))
    $Output = Read-Host $prompt
    While([string]::IsNullOrWhiteSpace($Output)){
        write-host "`nYou must enter a response!`n" -ForegroundColor Red
        $Output = Read-Host $prompt
    }
}

那么你可以这样称呼它:

$username = Get-NonNullString "Enter username"
$fname = Get-NonNullString "ENTER First Name"
$lname = Get-NonNullString "ENTER Last Name"
$Des   = Get-NonNullString "ENTER Description (Work Area)"
$Title = Get-NonNullString "ENTER Job Title"

【讨论】:

  • 当我尝试写入主机 "$username" 和写入主机 $username 时,它​​没有任何价值。
【解决方案2】:

可以使用参数属性:

param(
    [Parameter(Mandatory=$true, HelpMessage="Enter username")]
    [ValidateNotNull()]
    $username,

    ...
)

请注意,控制台不使用 HelpMessage(默认情况下)作为强制参数的提示,但 ISE 使用。还有一个 [ValidateNotNullOrEmpty()] 属性也不允许空字符串。

顺便说一句,使用参数属性的优点是,如果函数/脚本使用参数调用,则没有提示。如果未指定参数,则 PowerShell 将提示您输入参数。一般来说,我喜欢 PowerShell 尽可能多地完成工作。 :-)

【讨论】:

  • 查看@keith-hill 对stackoverflow.com/questions/5237723/… 的评论:“是的,这有点令人困惑。但不会忽略参数上的HelpMessage 属性。当您在未指定的情况下调用命令时会使用它强制参数。此时系统会提示您输入该参数的值。如果您指定 HelpMessage,该文本将显示为该提示的一部分。"
  • 我认为!? 的可发现性是如此之低,以至于控制台未使用HelpMessage 为effectively。 ISE 和控制台会偏离这一点似乎很奇怪。
猜你喜欢
  • 1970-01-01
  • 2023-03-28
  • 1970-01-01
  • 1970-01-01
  • 2013-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多