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)
但是,我不知道为什么要使用第二个,或者使用它的优点是什么.
第二个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)
我绝对不适合顶级酒吧,即使它们是类似的脚本,第二个'做'更多.它实际上只是个案基础.
你可以查看这个链接,了解你可以用扩展参数做些什么的例子,但是如果你不需要这些,你可以随意使用你喜欢的任何一个.