如何在 PowerShell 中要求命令行参数(不是参数)?
Posted
技术标签:
【中文标题】如何在 PowerShell 中要求命令行参数(不是参数)?【英文标题】:How to require command-line arguments (not parameters) in the PowerShell? 【发布时间】:2015-04-28 22:44:07 【问题描述】:不同于:How to handle command-line arguments in PowerShell
在 powershell 脚本中处理未命名命令行参数的最佳方法是什么?
例如,我有一个我想运行的 powershell 脚本
.\test.ps1 L3
如果未提供 L3,则会出现错误。我不想运行它:
.\test.ps1 -lab L3
我当前的脚本:
$args[0]
如果参数被省略,则不会导致错误。
这看起来很有希望,还没有尝试过: https://technet.microsoft.com/en-us/library/hh847743.aspx * 编辑:* 有希望的链接很有用——我用它来形成我所有的例子
【问题讨论】:
为什么不想要命名参数(parameters)?它们使代码更具可读性,如果您正确设置参数,我认为您可以在传递它们时不命名它们,只要您以正确的顺序执行。 命名参数很棒。但是这个脚本总是需要这个参数,每次我使用它都会节省三到四次击键。 如果它是唯一的参数,您可以将其命名并以未命名的形式传递,PowerShell 将处理它就好了。不要为了您的方便而写作 - 写作是为了让下一个必须使用它的人(而不是您)可以理解您的脚本。 此参数仅在命令行中提供,不在其他脚本中提供。我同意在脚本中,命名参数是一件好事。 我的观点仍然存在。即使是在命令行中,为了让下一个人理解,而不是为了方便。命名参数几乎总是一件好事,无论如何 - 当有人必须修改此脚本以添加另一个参数时,他们会希望它们命名。现在命名它不需要花费你任何费用,就去做吧。 【参考方案1】:这成功了:
Param
(
[parameter(Position=0, Mandatory=$true)]
[String]
$LabNumber
)
$LabNumber
第二个选项很有趣,但我更喜欢上面的 Mandatory=$true,因为如果你忘记它,它实际上会提示你输入它。
Param
(
[parameter(Position=0)]
[String]
$LabNumber=$(throw "LabNumber is required. Usage Example: .\test.ps1 L3")
)
$LabNumber
而且,正如@alroc 对所有参数的偏好,第二个参数必须命名:
Param
(
[parameter(Position=0, Mandatory=$true)]
[String]
$LabNumber,
[alias("Submissions")]
[String]
$LoginsFilename = "..\logins.txt"
)
"LabNumber:"+$LabNumber
"LoginsFilename:"+$LoginsFilename
【讨论】:
以上是关于如何在 PowerShell 中要求命令行参数(不是参数)?的主要内容,如果未能解决你的问题,请参考以下文章