重用powershell cmdlet参数

时间:2014-05-30 14:51:31

标签: powershell

我想知道是否可以在cmdlet中调用两次参数,例如:

cmdlet-test -myCommand input1, input2 -myCommand input3, input 4

myCommand两次是同一个命令。这是可能的还是用户只需要在一个以逗号分隔的列表中写下它?

2 个答案:

答案 0 :(得分:1)

如果用户尝试两次使用相同的参数,则会收到错误。

get-process | select -first 2

Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName
-------  ------    -----      ----- -----   ------     -- -----------
    201      16     3324       3456   109     0.17   9972 acrotray
    409      16     3904       4948   101     0.97  10520 AdobeARM

让我们以传统的方式尝试:

get-process -pid 9972,10520

Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName
-------  ------    -----      ----- -----   ------     -- -----------
    201      16     3324       3456   109     0.17   9972 acrotray
    409      16     3904       4948   101     0.97  10520 AdobeARM

你建议的方法:

get-process -pid 9972 -pid 10520
Get-Process : Cannot bind parameter because parameter 'Id' is specified more than once. To provide multiple values to
parameters that can accept multiple values, use the array syntax. For example, "-parameter value1,value2,value3".
At line:1 char:23
+ get-process -pid 9972 -pid 10520
+                       ~~~~
    + CategoryInfo          : InvalidArgument: (:) [Get-Process], ParameterBindingException
    + FullyQualifiedErrorId : ParameterAlreadyBound,Microsoft.PowerShell.Commands.GetProcessCommand

答案 1 :(得分:0)

对于那些想将一个很长的函数参数分成几行的人,我建议采用这种方法:

# Just an example function
function PrintFileName {
  param (
    [Parameter(Mandatory = $true)] [System.String[]] $Files = @()
  )

  foreach ($File in $Files) {
     Write-Host "${File}"
  }
}

然后,函数调用如下:

PrintFileName -Files C:\SomeDirectory\SomeFile.txt1,C:\SomeDirectory\SomeFile2.txt,`
C:\SomeDirectory\SomeFile2.txt,C:\SomeDirectory\SomeFile3.txt,`
C:\SomeDirectory\SomeFile4.txt,C:\SomeDirectory\SomeFile5.txt

将输出:

C:\SomeDirectory\SomeFile1.txt
C:\SomeDirectory\SomeFile2.txt
C:\SomeDirectory\SomeFile2.txt
C:\SomeDirectory\SomeFile3.txt
C:\SomeDirectory\SomeFile4.txt
C:\SomeDirectory\SomeFile5.txt