正确使用参数

Jos*_*Jos 4 powershell function

处理参数的好习惯是什么,何时选择哪个选项?

示例:通常我写这样的函数:

function Do-Something ($variable1, $variable2, $variable3....) 
    { Do Stuff }
Run Code Online (Sandbox Code Playgroud)

现在显然这也是一个选择:

Param(
    [Parameter(Position=0,
        Mandatory=$True,
        ValueFromPipeline=$True)]
    [string]$userName,
    ...
)
Run Code Online (Sandbox Code Playgroud)

但是,我不知道为什么要使用第二个,或者使用它的优点是什么.

col*_*lsw 6

第二个Param()块允许您进行大量高级参数验证.

如果我需要用最少的输入验证来编写一个简短的函数,我将使用这样的东西:

Function Test-Port ([string]$Server,[uint16]$Port=80,[uint16]$Timeout = 3000) {
    #code here
}
Run Code Online (Sandbox Code Playgroud)

但如果我需要用这样的高级检查写一些东西:

function Get-SiteCert{
    [CmdletBinding(DefaultParameterSetName = "Return")]
    Param(
        [Parameter(Mandatory=$true,Position=0)]
        [string]$Server,
        [Parameter(Position=1)]
        [uint16]$Port=443,
        [Parameter(Mandatory=$false, ParameterSetName="RawObj")]
        [switch]$Raw,
        [Parameter(Mandatory=$false, ParameterSetName="Export")]
        [switch]$Export,
        [Parameter(Mandatory=$true, ParameterSetName="Export")]
        [string]$Path,
        [uint16]$Timeout=3000
    )
    #code here
}
Run Code Online (Sandbox Code Playgroud)

我绝对不适合顶级酒吧,即使它们是类似的脚本,第二个'做'更多.它实际上只是个案基础.

你可以查看这个链接,了解你可以用扩展参数做些什么的例子,但是如果你不需要这些,你可以随意使用你喜欢的任何一个.