如何在PowerShell中要求命令行参数(而不是参数)?

3

与以下内容不同:如何在PowerShell中处理命令行参数

在powershell脚本中,处理一个未命名的命令行参数的最佳方法是什么?

例如,我有一个powershell脚本,我想以以下方式运行:

.\test.ps1 L3

如果L3未提供,则会出现错误。我不想像这样运行它:

.\test.ps1 -lab L3

我的当前脚本:

$args[0] 

如果省略参数不会导致错误。

这看起来很有希望,但我还没有尝试过: https://technet.microsoft.com/en-us/library/hh847743.aspx * 编辑:* 这个有希望的链接很有用——我用它来列举所有的例子。


为什么你不想使用命名参数?它们可以让代码更易读,如果设置参数正确,即使在没有命名的情况下按正确顺序传递参数也是可行的。 - alroc
3
如果它是唯一的参数,你可以将其命名并传递未命名的参数,PowerShell 将会很好地处理。不要为了方便自己编写代码-编写代码时应该考虑到下一个使用它而不是你的人可以理解它。 - alroc
此参数仅在命令行中提供,无法在其他脚本中使用。我同意在脚本中使用有名称的参数是个好习惯。 - Josiah Yoder
1
我的观点仍然存在。即使在命令行中,编写代码也应该是为了让下一个人能够理解,而不是为了方便自己。无论何时,命名参数几乎总是一件好事 - 当有人需要修改此脚本以添加另一个参数时,他们会希望它们被命名。现在将其命名不会花费你任何代价,就这么做吧。 - alroc
让我们在聊天中继续这个讨论 - Josiah Yoder
显示剩余2条评论
1个回答

3

这个方法起了作用:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接