PowerShell-WindowsPowershell中的函数参数
在先前关于⽤户⾃定义的Windows PowerShell的的⽂章中,我已经说过PowerShell中的最⼤特点之⼀是函数使⽤上的可扩展性强。在这篇⽂章中,我们将仔细看⼀下专业类型的函数:产品质量函数。
你问有什么区别?产品质量函数花⼒⽓来测试输⼊并在提供信息输出的情况下为算是错误进⾏稳固⼯作。通常当在为产品运⽤函数时,你想知道它是否中断-- 同时你也⼀定很想知道为什么。其它的语⾔需要你⾃⼰来设计参数和处理错误。我们是幸运的,Windows PowerShell有许多类似的内置函数。
PowerShell的参数
当我们谈论Windows PowerShell函数的时候,我们需要考虑三件事情:输⼊、输出和错误。这篇⽂章将重点说明输⼊,也被称为参数。PowerShell有许多参数选项,并且可以通过以下三种⽅式之⼀来进⾏运⽤:
位置参数
PowerShell可以创建⼀个数值数组传递给函数的$args变量。传递给函数的每⼀个值从0开始被添加到这个数组中。例如:
function foo
{
Write-Host $args[0] $args[1]
}
foo "This is parameter 1" "This is parameter 2"
名字参数
PowerShell输⼊的参数也可以命名,这就意味着它们可以通过名字传递,并且值被放置在相应的变量⾥。例如(注意当这个函数被调⽤的时候,参数颠倒,但是数值能正确的返回):
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参数
在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
powershell创建目录
{
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
)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。