PowerShell中的函数参数

Mik*_*ard 14 parameters powershell function

有没有理由在函数定义中使用"Param(...)"结构?

我的理解是你应该使用它来指定脚本(和脚本块)的参数.我在网上看到很多带有参数的例子,而不是仅仅列出函数名后面的参数.

例:

function Foo([string]$Bar){
   #Body of function
}
Run Code Online (Sandbox Code Playgroud)

要么,

function Foo{
     Param([string]$Bar)

}
Run Code Online (Sandbox Code Playgroud)

And*_*der 19

在V1中,它只是一个偏好.param传统上使用该语句更为正式,但在功能上它是相同的.

您可能会在PowerShell V2中看到更多PARAM的使用,因为它能够向参数添加属性,类似于C#中的属性.

param
(
[Parameter( Mandatory=$true,
            Position=0,
            ValueFromPipeline = $true,
            ValueFromPipelineByPropertyName = $true)]
[Alias("name")]
[String]
$path
)
Run Code Online (Sandbox Code Playgroud)

在这里,您可以指定参数属性和该属性的一组参数.您还可以指定别名和许多其他验证要求.

基思也提出了几点好处.您可以使用param语句将参数传递给匿名脚本块(lambda表达式)或PS1脚本.


Kei*_*ill 6

需要param()来指定脚本文件和scriptblocks的参数:

PS> $sb = {param($x,$y) $x + $y}
PS> &$sb 1 3
4
Run Code Online (Sandbox Code Playgroud)

让它也可用于传统功能只是IMO的一致性.对于每个参数往往有很多行李,元数据的高级功能来说,它更好.