首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

PowerShell 深度探索(十一):函數完整指南——參數、管線、進階結構

     編輯:關於.NET

函數基礎語法

function 函數名稱 (參數) { 程式碼區塊 }
# 或
function 函數名稱 {
    param (參數清單)
    程式碼區塊
}

最簡單範例

function Time { Get-Date }
Time  # 輸出目前日期時間

函數呼叫示範

參數宣告與型別限制

基本參數

function Add ($x, $y) {
    $n = $x + $y
    "$x + $y = $n"
}
Add 3 5  # 輸出:3 + 5 = 8

參數傳遞示範

強型別與預設值(推薦寫法)

function Add {
    param (
        [int]$x = 0,
        [int]$y = 0
    )
    $n = $x + $y
    "$x + $y = $n"
}

優點:防止型別錯誤、參數缺失時有預設行為、提升腳本健壯度。

管線支援:$input 自動變數

讓函數接收管線輸入:

function Find-WindowsFolder {
    $input | Where-Object { $_.Name -eq "Windows" }
}
Get-ChildItem C:\ | Find-WindowsFolder

管線輸入示範

$input 代表管線傳入的完整物件集合(列舉器)。

進階函數結構:Begin / Process / End

針對管線處理提供三個階段區塊:

區塊執行時機典型用途
Begin函數首次啟動,僅執行一次初始化變數、開啟連線、建立暫存資源
Process每個管線物件傳入時各執行一次核心轉換邏輯、逐項處理、累加計算
End管線結束,僅執行一次清理資源、輸出彙總結果、關閉連線

完整範例

function Process-Files {
    begin {
        "=== 開始處理 ==="
        $count = 0
        $totalSize = 0
    }
    process {
        $count++
        $totalSize += $_.Length
        "[$count] $($_.Name) - $($_.Length) bytes"
    }
    end {
        "=== 處理完成 ==="
        "總計:$count 個檔案,總大小:$totalSize bytes"
    }
}
Get-ChildItem | Process-Files

進階函數執行結果

重要規則

  • 若使用 Begin/Process/End 結構,區塊外不得有其他程式碼
  • 每個區塊只能出現一次
  • Process 區塊內 $_ 代表目前管線物件
  • 若無 Process 區塊,管線物件會整批存入 $input

變數作用域

函數內定義的變數(如範例中的 $n、$count)為區域變數,函數結束後自動銷毀,不會污染全域環境。

最佳實務建議

  1. 一律使用 param() 區塊 宣告參數,加上型別與預設值
  2. 支援管線時務必實作 Process 區塊
  3. 命名遵循 Verb-Noun 慣例(如 Get-Service、Set-Config)
  4. 加入註解式說明(.SYNOPSIS、.PARAMETER 等)支援 Get-Help
  5. 輸出物而非文字,保持物件管線特性

掌握函數進階特性,能編寫出專業級、可重用、支援管線的 PowerShell 模組與腳本。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved