PowerShell 函数(Function)

函数基本操作:

#创建函数
Function GetSQLService
{
Get-Service -DisplayName "*SQL*"
}

#调用函数,直接写函数名
GetSQLService 


#查看函数定义
$Function:GetSQLService


#导出函数定义到文本
$Function:GetSQLService | Out-File E:\GetSQLService.ps1


#删除函数
del Function:GetSQLService

#查看内部自定义函数:
dir function: | ft -AutoSize


创建带参数的函数,三种方法(会覆盖同名函数):

#创建带参数的函数,三种方法(会覆盖同名函数)
Function GetSQLService($ServiceName)
{
Get-Service -DisplayName "*$ServiceName*"
}


Function GetSQLService
{
param($ServiceName)
Get-Service -DisplayName "*$ServiceName*"
}


#有默认值的参数
Function GetSQLService
{
param($ServiceName='SQL')
Get-Service -DisplayName "*$ServiceName*"
}


#多个参数
Function GetSQLService
{
param($ServiceName,$KeyWord)
Get-Service -DisplayName "*$ServiceName*$KeyWord*" | Format-Table -AutoSize
}

调用函数:

GetSQLService
GetSQLService SQL
GetSQLService -ServiceName SQL
GetSQLService -KeyWord MSSQLSERVER
GetSQLService -ServiceName SQL -KeyWord MSSQLSERVER



万能参数,无需声明参数,直接使用内部参数:

Function GetSQLService
{
Get-Service -DisplayName "*$args*"
}


#这里用其他参数名,调用时函数将无法识别参数,不可这样使用。只能用$args
Function GetSQLService
{
Get-Service -DisplayName "*$ServiceName*"
}



求和函数示例:

#求和函数,调用函数时参数 $args 可以同时输入多个值。
Function Add
{
$sum=0
$args | foreach {$sum=$sum+$_}
$sum
}


Add 1 2 3 4 5 6 7 8 9 10



返回多值的函数,也可使用 return 返回,使用 return 后函数将结束返回,后面语句不会执行

Function Test { "Zero", "One", "Two", "Three" }


Function Test 
{
"Zero"
"One"
"Two"
"Three" 
}


Function Test { "Zero" "One" "Two" "Three" } #这样写错误!



Function Test 
{
"Zero"
"One"
return "Two"
"Three" 
}



输出注释,不会作为结果:

Function Test 
{
Write-Host "此处为注释不作为结果,但同样会输出"
"Zero"
"One"
return "Two"
"Three" 
}



Test
$Test = Test



隐藏函数内部的错误:

#函数内部有错误,调用时也返回错误!
Function Test { Stop-Process -Name "kk123456" }


#使用参数 $ErrorActionPreference 可隐藏错误
Function Test 
{ 
$ErrorActionPreference="SilentlyContinue"
Stop-Process -Name "kk123456" 
$ErrorActionPreference="Continue"
}



管道应用:函数内部处理上一个的结果集:

Function Test { $input }

2,0,1,2 | Test



Function Test
{ 
Foreach ($element in $input)
{
"value: "+$element
}
}

2,0,1,2 | Test



使用过滤器 Filter(特殊函数)的流模式处理管道数据,避免结果集太大占用过多内存或进程等待太久

Filter Test
{ 
Foreach ($element in $input)
{
"value: "+$element
}
}

2,0,1,2 | Test


使用Filter时, $input 每次传递一个元素,不再是整个结果集,因此不必要了,用变量 $_ 替代

Filter Test{ $_.name }

Get-Service -DisplayName "*MSSQLSERVER*" | Test



函数在内部 process 也可以处理多结果集:

Function Test{  
begin{ $i=1 }  
 
process{  
     $_.name
     $i++  
}  
 
end{}  
}  

Get-Service -DisplayName "*MSSQLSERVER*" | Test




### PowerShell 函数概述 PowerShell 函数是一组可重复使用的命令,用于执行特定的任务。函数可以使脚本更加模块化和易于维护。定义函数时可以包含参数、逻辑处理以及返回值。 #### 定义简单函数 创建一个简单的函数只需要使用 `function` 关键字加上函数名即可: ```powershell function Say-Hi { param ( [string]$Name ) "Hello $Name" } ``` 此代码片段展示了如何声明带有单个字符串类型参数 `$Name` 的函数,并打印问候语句[^3]。 #### 返回值 在PowerShell中,可以通过两种方式让函数具有返回值:一是利用自动输出机制;二是显式地使用 `return` 语句。当不使用 `return` 时,默认会把最后一条表达式的计算结果作为整个函数的结果传出。 下面的例子演示了这两种情况下的不同行为: ```powershell # 自动输出 function Get-SumAutoOutput { param( [int]$a, [int]$b ) $sum = $a + $b } # 显式Return function Get-SumWithReturn { param( [int]$a, [int]$b ) return ($a + $b) } ``` 上述两个版本都会得到相同的效果——求两数之和并将其传回给调用者。但是采用 `return` 可以使意图更为清晰明了。 #### 参数验证与默认值设置 为了增强健壮性和用户体验,可以在定义阶段加入对输入数据类型的限定及提供缺省选项: ```powershell function Test-ParameterValidation { param( [ValidateNotNullOrEmpty()] [string]$InputString="Default Value", [ValidateRange(0,10)] [int]$Number=5 ) "$InputString and number is $Number." } ``` 这段代码设置了对于字符串型参数不能为空的要求(`ValidateNotNullOrEmpty`),同时也限定了整数范围必须介于0到10之间(`ValidateRange`). 如果未给出具体数值,则分别取预设好的初始状态["Default Value", 5][^2].
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值