函数定义
函数以function关键字开始,后接遵循动词-名词命名规范的函数名,代码逻辑置于花括号内。以下代码展示了最基本的函数定义:
function Backup-File {
Write-Host "Backup files..."
}
参数
函数通过参数来实现其灵活性。可以通过param块向函数添加参数。
function Backup-File {
param(
[string]$SourcePath,
[string]$DestinationPath
)
Write-Host "Backup from $SourcePath to $DestinationPath"
}
参数属性
强制参数
为确保函数可靠运行,某些参数必须提供。Mandatory属性可将参数标记为必需项,当调用者未提供时,PowerShell会主动提示输入。以下代码将源路径和目标路径设为必需参数:
function Backup-File {
param(
[Parameter(Mandatory)]
[string]$SourcePath,
[Parameter(Mandatory)]
[string]$DestinationPath
)
Write-Host "Backup from $SourcePath to $DestinationPath"
}
默认值
某些参数在多数情况下具有常用值,为避免重复输入,可设置默认值。默认值在参数定义时通过等号赋值。以下代码为备份类型参数设置默认值:
function Backup-File {
param(
[string]$SourcePath,
[string]$DestinationPath,
[string]$BackupType = "Full"
)
Write-Host "Perform $BackupType backup from $SourcePath to $DestinationPath"
}
参数验证
用户输入需要约束以确保有效性。使用ValidateSet可以确保参数值来自预定义集合,限制参数取值范围。ValidateScript属性可以执行自定义验证逻辑,返回$true时参数才被接受。
function Backup-File {
param(
[ValidateScript({Test-Path $_})]
[string]$SourcePath,
[ValidateScript({Test-Path $_})]
[string]$DestinationPath,
[ValidateSet("Full", "Incremental", "Differential")]
[string]$BackupType = "Full"
)
Write-Host "Perform $BackupType backup from $SourcePath to $DestinationPath"
}
高级函数
基础函数功能有限,高级函数提供更多特性。CmdletBinding属性将函数标记为高级函数,启用如-Verbose、-WhatIf等标准参数。以下代码展示了高级函数的声明方式:
function Backup-File {
[CmdletBinding()]
param(
[string]$SourcePath,
[string]$DestinationPath
)
Write-Host "Backup from $SourcePath to $DestinationPath"
}
管道支持
为高效处理多个文件备份,需要支持管道输入。ValueFromPipeline属性使参数能够接收管道传递的值,类似的属性还有ValueFromPipelineByPropertyName。
此外,管道支持需要配套的处理机制。process块定义了对管道中每个输入项执行的操作,确保每个输入都被独立处理。复杂操作还需要初始化和清理阶段。begin块在管道处理开始前执行,适合初始化操作;end块在处理完成后执行,适合资源清理。以下代码展示了三个块的完整结构:
function Backup-File {
param(
[Parameter(ValueFromPipeline)]
[string]$SourcePath,
[string]$DestinationPath
)
begin {
Write-Host "Backup session starting"
}
process {
Write-Host "Perform Backup from $SourcePath to $DestinationPath"
}
end {
Write-Host "Backup session completed"
}
}
完整函数示例
将所有语法元素整合,形成完整的文件备份函数。以下代码展示了参数定义、验证、管道支持和高级特性的综合应用:
function Backup-File {
[CmdletBinding()]
param(
[Parameter(Mandatory, ValueFromPipeline)]
[ValidateScript({Test-Path $_})]
[string]$SourcePath,
[Parameter(Mandatory)]
[ValidateScript({Test-Path $_})]
[string]$DestinationPath,
[ValidateSet("Full", "Incremental")]
[string]$BackupType = "Full"
)
begin {
Write-Verbose "Initializing backup process"
}
process {
Write-Host "Perform $BackupType Backup from $SourcePath to $DestinationPath"
}
end {
Write-Verbose "Backup process finalized"
}
}
调用演示
直接参数传递
Backup-File -SourcePath "C:\data\file.txt" -DestinationPath "D:\backup"
使用管道处理多个文件
"file1.txt", "file2.txt", "file3.txt" | Backup-File -DestinationPath "D:\backup"
启用详细日志输出
Backup-File -SourcePath "C:\data\file.txt" -DestinationPath "D:\backup" -Verbose