如何在PowerShell中获取其余参数?

时间:2015-12-25 01:49:45

标签: windows bash powershell scripting windows-10

假设您有一个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,但这也不起作用。

为什么会发生这种情况?我该如何解决这个问题?谢谢!

1 个答案:

答案 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