PowerShell 的函数

函数定义

函数以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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容