PowerShell函数简明教程

PowerShell函数跟其它的编程语言的函数差不多,主要涉及输入参数、处理、输出参数、返回值、如何调用等方面的内容,下面逐一介绍。

1、PowerShell函数定义

定义函数使用function关键字,使用自定义的标识符作为函数名,使用一对大括号括起函数体。如下:

代码如下:

function <函数名>{
   <函数体>;
}

举例:

代码如下:

function Test-Fun{
   $args0 = $args[0]
   $args1 = $args[1]
   Write-Host "p1=$args[0], p2=$args[1]"
   Write-Host "p1=$args0, p2=$args1"
}

在做这个例子的时候,洪哥遇到了很悲推的一幕。感觉完全相同的两种输出方式,结果是截然不同。洪哥只能说,双引号中的$args变量,居然不管后面的中括号和下标,真TMD的太诡异了,慎用!真相如下:

代码如下:

PS > function Test-Fun{
>>     $args0 = $args[0]
>>     $args1 = $args[1]
>>     $msg = "p1=$args[0], p2=$args[1]"
>>     Write-Host "p1=$args[0], p2=$args[1]"
>>     Write-Host $msg
>>     Write-Host "p1=$args0, p2=$args1"
>> }
>>
PS > test-fun 111 222
p1=111 222[0], p2=111 222[1]
p1=111 222[0], p2=111 222[1]
p1=111, p2=222

2、PowerShell函数输入参数

在函数体中,使用Param()方法来定义函数的输入参数,如下:

代码如下:

function <函数名>{
   Param($p1,$p2,...);
   <函数体>;
}

关于PowerShell函数输入参数的更多详细介绍,比如“位置参数”、“名称参数”、“参数属性”等,请移步“PowerShell教程之PowerShell函数输入参数”。

3、PowerShell函数返回值

PowerShell会把所有函数体中的输出打包成一个System.Array对象当作返回值。虽然PowerShell也支持return语句,但是洪哥前面讲的这句话仍然有效。所以,这个return就是摆设。

4、PowerShell函数调用

函数的调用很简单,跟VB调用函数的方式差不多。如下:

代码如下:

<函数名> [[-参数名1] 参数值1[, [-参数名2] 参数值2], ...]
举例:
Test-Fun "参数值"
Test-Fun "参数值1", "参数值2", "参数值3"
Test-Fun -p1 "参数值1" -p2 "参数值2"

(0)

相关推荐

  • PowerShell定义函数参数的2种方法和传参方法实例

    本文介绍PowerShell自定义函数定义参数的两种方法,一种是将参数列表放到函数名之后,就跟其它语言定义函数参数一样:另一种则是PowerShell独有的方式,那就是使用param关键词. 先来看看第一种定义参数的方式--将参数列表放到函数名之后 举个例子先看看: 复制代码 代码如下: function Test-Function($参数名1='默认参数值1', $参数名2='默认参数值2') {     Write-Host "参数1=$参数名1,参数2=$参数名2"; } 这种方

  • PowerShell函数参数指定数据类型实例

    本文介绍在PowerShell创建自定义函数时,为必选参数设置强类型有什么好处,应该如何设置. 为了提高必选参数的安全性,PowerShell函数定义的最佳实践告诉我们,要为必选参数设置强类型.这是为什么呢,我们来看一个例子. 复制代码 代码如下: function Test-Me {     param     (         [Parameter(Mandatory=$true, HelpMessage='Enter number of EUROs!')]         $Euro  

  • PowerShell中对函数参数的命名建议

    PowerShell自定义函数的参数没有具体的命名规则,那么怎么做才能让参数的命名更加科学可持续. 我们应该怎么来命名函数的参数名称呢?有没有一个可供参考的列表?当然微软没有给出来.但是我们可以来理一个列表出来.微软自带了大量的cmdlet,这些cmdlet使用的参数有什么规律呢?我们用下面一段命令来统计一下. 复制代码 代码如下: Get-Command -CommandType Cmdlet | ForEach-Object { $_.Parameters } | ForEach-Objec

  • PowerShell函数简明教程

    PowerShell函数跟其它的编程语言的函数差不多,主要涉及输入参数.处理.输出参数.返回值.如何调用等方面的内容,下面逐一介绍. 1.PowerShell函数定义 定义函数使用function关键字,使用自定义的标识符作为函数名,使用一对大括号括起函数体.如下: 复制代码 代码如下: function <函数名>{    <函数体>; } 举例: 复制代码 代码如下: function Test-Fun{    $args0 = $args[0]    $args1 = $ar

  • PowerShell函数中限制数组参数个数的例子

    本文介绍PowerShell自定义函数时,可以使用数组来传递多个参数.数组传递参数时,参数个数本身无法限制,PowerShell函数提供了一个方法来限制数组中参数的个数. PowerShell函数可以接受数组作为输入参数.而且不需要将数组定义好后再传给PowerShell函数,而可以直接将一个逗号分隔的字符串数组当作参数来传递,如:Add-User -UserName 'splaybow1','splaybow2','splaybow3'.这个函数的定义如下: 复制代码 代码如下: functi

  • PowerShell函数参数用星号隐藏的方法

    本文介绍在PowerShell中创建函数时,如何让函数的参数输入值的时候自动变成星号. 什么叫自动变成星号呢?举个例子,我们在登录一个邮箱时,输入用户时看到的是明文的,但我们在输入密码时,看到的是一个个增加的星号.在使用PowerShell自定义函数时,如何设置才能让输入密码之类的参数时,自己用星号掩盖呢?且往下看. 复制代码 代码如下: function Test-Password {     param     (     [Parameter(Mandatory=$true)]     $

  • PowerShell函数中接收管道参数实例

    本文介绍在自定义PowerShell函数时,如何设置函数通过管道(Pipeline)接收输入参数. 先看一个例子,用管道作为输入参数的函数: 复制代码 代码如下: function Test-Pipeline {     param(         [Parameter(ValueFromPipeline=$true)]         $InputObject     )     process     {         "Working with $InputObject"  

  • PowerShell函数中把参数传入另一个函数的函数传参例子

    本文介绍在自定义PowerShell函数时,可以使用@PSBoundParameters来将参数传递给另一函数. 下面,我们来创建一个Get-BIOS的函数, 复制代码 代码如下: function Get-BIOS {     param     (         $ComputerName,         $Path     )     Get-WmiObject -Class Win32_BIOS @PSBoundParameters } 在这个函数中,我们并没有作任何实际的操作,只是

  • PowerShell函数中的开关参数介绍和创建实例

    本文介绍什么是开关参数,在PowerShell自定义函数中,如何创建开关参数并使用开关参数的值. 什么叫开关参数呢?举个例子,技术男一般都知道有一个网络命令叫"Ping",我们可以使用"ping www.jb51.net"这样一个命令来检查本地计算机到www.jb51.net这个网站所在的服务器网络是否连通.这个命令会从本地发送4个数据包到www.jb51.net服务器,并显示每个数据包是否收到了反馈结果.如果我正在重启www.jb51.net这台服务器,那么pin

  • PowerShell函数中使用$PSBoundParameters获取输入参数列表实例

    本文介绍在自定义PowerShell函数时,有一个$PSBoundParameters的变量可以获取到输入参数列表.获取输入参入列表对我们进行功能调试有很大的帮助. 当我们在执行一个函数时,可以使用输入参数的值,但我在PowerShell中,参数有的是必选,有的是可选,那么我们怎么知道用户真实的输入了哪些参数呢? 在PowerShell函数中,有一个全局变量$PSBoundParameters,它是一个Hash表,里面保存了所有的输入参数和输入参数的值.通过输出这个变量,我们就可以看到所有的输入

  • PowerShell函数使用正则表达式验证输入参数实例

    本文介绍在自定义PowerShell函数时,输入的参数是否合法可以通过正则表达式来进行约束.正则表达式来约束输入参数,将使用ValidatePattern指令. 之前我们通过ValidateSet来作为参数的智能提示,其实它也起到了对参数输入合规性的检查.因为ValidateSet是规定了一个输入参数的范围,不在这个范围内的参数,一是不能智能提示,另外,即便是输入了,它也无法通过函数的输入参数合规性检查,从而程序无法继续执行. 那么既然ValidateSet是以一个集合的形式来检查输入参数,那么

  • PowerShell函数中使用必选参数实例

    本文介绍在PowerShell创建自定义函数时,如何添加必选参数,可以使用Mandatory关键词. 默认情况下,PowerShell自定义的函数中,参数都是可选的(optional).如果要将一个参数设置为必选参数,那么必须对其设置Mandatory声明. 复制代码 代码如下: function Test-Function {     param(         [Parameter(Mandatory=$true)]         $p1,         $p2='p2'     )

  • PowerShell函数参数设置成自动识别数据类型的例子

    本文介绍PowerShell自定义函数中使用参数集时,怎么设置系统自动识别参数的数据类型. 识别参数类型的一个好处就是,在使用参数集时,不需要每次都指定参数名称了. 请看下面这个Test-Binding函数.这个PowerShell函数在设置参数集的时候,为参数集中的第一个参数设置了数据类型,这样在调用函数时,就可以自动判断一个参数值它应该赋给哪个参数了. 复制代码 代码如下: function Test-Binding {     [CmdletBinding(DefaultParameter

随机推荐