0

我目前正在为 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:\svn\common\"@35922 -username MyUserName -password MyPassword

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

4

1 回答 1

1

试试这个参数声明:

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
    )
于 2013-10-10T14:06:24.173 回答