From: http://os.51cto.com/art/201011/232924.htm 数组
在先前关于用户自定义的Windows PowerShell的的文章中,我已经说过PowerShell中的最大特色之一是函数使用上的可扩展性强。在这篇文章中,咱们将仔细看一下专业类型的函数:产品质量函数。ide
你问有什么区别?产品质量函数花力气来测试输入并在提供信息输出的状况下为算是错误进行稳固工做。一般当在为产品运用函数时,你想知道它是否中断-- 同时你也必定很想知道为何。其它的语言须要你本身来设计参数和处理错误。咱们是幸运的,Windows PowerShell有许多相似的内置函数。函数
PowerShell的参数测试
当咱们谈论Windows PowerShell函数的时候,咱们须要考虑三件事情:输入、输出和错误。这篇文章将重点说明输入,也被称为参数。PowerShell有许多参数选项,而且能够经过如下三种方式之一来进行运用:设计
位置参数htm
PowerShell能够建立一个数值数组传递给函数的$args变量。传递给函数的每个值从0开始被添加到这个数组中。例如:对象
function foo { Write-Host $args[0] $args[1] } foo "This is parameter 1" "This is parameter 2"
名字参数ip
PowerShell输入的参数也能够命名,这就意味着它们能够经过名字传递,而且值被放置在相应的变量里。例如(注意当这个函数被调用的时候,参数颠倒,可是数值能正确的返回):ci
Example (notice the parameters are reversed when the function is called, but the values are returned correctly): function foo { Param($param1,$param2) Write-Host $param1 $param2 } foo -param2 "This is parameter 2" -param1 "This is parameter 1"
Splatting参数get
在PowerShell的参数传递中,这个或许是最经常使用的方法。它包含建立一个数组或哈希表做为传递给函数的参数组。这个让你能够动态地建立整个脚本的参数,而后当你准备好后便可调用函数。例如:
function foo { Param($param1,$param2) Write-Host $param1 $param2 } Create Hash table $blah = @{"Param1"="This is parameter 1"; "Param2"="This is parameter 2"} # Pass hash table to function foo @Blah
PowerShell 参数的属性
Mandatory – 这个属性在PowerShell参数选项里是默认的,可是若是你知道你所须要的参数类型,你能够使用这个属性来强制用户传递这种类型的参数。若是它们没有这样作,PowerShell将报错给它们,而且强迫的它们提供这种类型的值,以便函数可以正常的运行。例如:
function foo { Param( [Parameter(Mandatory=$True)] $param1 ) Write-Host $param1 }
ParameterSetName --咱们经常须要一块儿传递一组参数(一般由于一些意外所中断)。例如,你有一个函数要得到一个活动目录对象,若是它是一个用户或是一个计算机,你就须要知道账户:
function Get-ADObject { Param( [Parameter(Mandatory=$True, ParameterSetName="User")] $User, [Parameter(Mandatory=$True, ParameterSetName="Computer")] $Computer ) $PScmdlet.ParameterSetName } Get-ADObject --# This will throw an error because no parameters passed Get-ADObject –user "joe" # Will return 'User' Get-ADObject –Computer "joe" # Will return 'Computer' Get-ADObject –User "joe" –Computer "joe" # Will return an error
ValueFromPipeline -- 这个属性告诉函数某个特定的参数值能够经过管道来传递参数。例如:
function Get-ADUserObject { Param( [Parameter(ValueFromPipeline=$true)] $User, ) Process { $User } } } $ListofUsers | Get-ADUserObject
ValueFromPipelineByPropertyName -- 这个属性彷佛与ValueFromPipeline有点类似,可是并非使用“类型”,它使用的是传入对象的属性名称。例如,若是你有一个叫作UserName的用户对象的属性。
function Get-ADUserObject { Param( [Parameter(ValueFromPipeline ByPropertyName=$true)] $Username, ) Process { $UserName } } $ListofUserObjects | Get-ADUserObject
HelpMessage -- 这容许你给用户添加一个帮助信息。若是他们没有指定mandatory属性来调用你的函数,这能够给他们解释须要输入用户名:
function Get-ADComputerObject { Param( [Parameter(Mandatory=$True,HelpMessage= "Enter computer name.")] $ComputerName, ) $ComputerName }
以上这些信息应该可以帮助你开始写一些产品质量函数,可是请记住,这仅仅是冰山的一角。
--指定参数位置。
Param( [Parameter(Position=0,Mandatory=$true,HelpMessage='Specify the Serverlist path')] [string]$ServersListPath)