防止函数在位置上使用参数,但 ValueFromRemainingArguments 参数除外



我目前正在为Powershell v2.0中的Subversion命令行编写包装器。我希望能够尽可能接近命令行的工作方式。因此,例如,我想要"svn info"命令:

info: Display information about a local or remote item.
usage: info [TARGET[@REV]...]
  Print information about each TARGET (default: '.').
  TARGET may be either a working-copy path or URL.  If specified, REV
  determines in which revision the target is first looked up.
Valid options:
  -r [--revision] ARG      : ARG (some commands also take ARG1:ARG2 range)
                             A revision argument can be one of:
                                NUMBER       revision number
                                '{' DATE '}' revision at start of the date
                                'HEAD'       latest in repository
                                'BASE'       base rev of item's working copy
                                'COMMITTED'  last commit at or before BASE
                                'PREV'       revision just before COMMITTED
  -R [--recursive]         : descend recursively, same as --depth=infinity
  --depth ARG              : limit operation by depth ARG ('empty', 'files',
                             'immediates', or 'infinity')
  --targets ARG            : pass contents of file ARG as additional args
  --incremental            : give output suitable for concatenation
  --xml                    : output in XML
  --changelist [--cl] ARG  : operate only on members of changelist ARG
Global options:
  --username ARG           : specify a username ARG
  --password ARG           : specify a password ARG
  --no-auth-cache          : do not cache authentication tokens
  --non-interactive        : do no interactive prompting
  --trust-server-cert      : accept SSL server certificates from unknown
                             certificate authorities without prompting (but only
                             with '--non-interactive')
  --config-dir ARG         : read user configuration files from directory ARG
  --config-option ARG      : set user configuration option in the format:
                                 FILE:SECTION:OPTION=[VALUE]
                             For example:
                                 servers:global:http-library=serf

。映射到函数,如下所示:

function Svn-Info {
    param(
        $revision,
        $depth,
        $targets,
        $incremental,
        $changelist,
        $username,
        $password,
        $no_auth_cache,
        $non_interactive,
        $trust_server_cert,
        $config_dir,
        $config_option,
        [Parameter(Mandatory=$false,ValueFromRemainingArguments=$true)]
        [String[]]
        $targetsAtRev
    )

我想这样称呼它:

Svn-Info "D:svn"@25345 "D:svncommon"@35922 -username MyUserName -password MyPassword

不幸的是,它试图将前两个参数绑定到 $revision 和 $depth(基本上,前两个参数尚未绑定(。所以从本质上讲,我可以以某种方式阻止参数在任意数量的参数的位置绑定吗?

试试这个参数:

function Svn-Info {
    [CmdletBinding()]
    param(
        $revision,
        $depth,
        $targets,
        $incremental,
        $changelist,
        $username,
        $password,
        $no_auth_cache,
        $non_interactive,
        $trust_server_cert,
        $config_dir,
        $config_option,
        [Parameter(Mandatory=$false,ValueFromRemainingArguments=$true, Position=0)]
        [String[]]
        $targetsAtRev
    )

最新更新