假设您有一个PowerShell脚本,它接受可变数量的参数。您希望将任何不是选项的内容视为文件名。在Bash中,这很简单:
files=() # Empty array of files
while [ $# -gt 0 ]
do
case "$1" in
-option1) do_option1=true ;;
-option2) option2_flag="$2" shift ;;
*) # Doesn't match anything else
files+=("$1") ;;
esac
shift
done
使用PowerShell Param()
的等效代码是什么?它对于消除大部分样板解析代码很有用,但我如何使用它来解析文件呢?例如,这有效:
Param(
[switch]$Option1,
[string]$Option2,
[string[]]$Files
);
但你必须调用像script.ps1 the,file,names
这样的脚本才能正确解析它。如果您致电script.ps1 the file names
,则无法识别。
我也试过$PSBoundParameters
,但这也不起作用。
为什么会发生这种情况?我该如何解决这个问题?谢谢!
答案 0 :(得分:0)
使用Mandatory=$True
作为文件名参数,使用Mandatory=$False
作为选项。
Param(
[Parameter(Mandatory=$false)]
[switch]$Option1,
[Parameter(Mandatory=$false)]
[string]$Option2,
[Parameter(Mandatory=$True)]
[string[]]$Files
);
所以当你打电话给你的功能时,你可以做到
yourFunc "filename" # only pass value for $files
yourFUnc -option1 "value" -option2 "value" -files "value" # pass value to all of your paras