如何在 PowerShell 中使用 @ 符號

  1. 使用 @ 符號在 PowerShell 中創建數組
  2. 使用 @ 符號在 PowerShell 中創建哈希表
  3. 使用 @ 符號定義 PowerShell 中的 Here-Strings
  4. 使用 @ 符號進行數組的 Splatting 在 PowerShell 中
  5. 使用 @ 符號進行哈希表的 Splatting 在 PowerShell 中
  6. 結論
We’ve created a detailed YouTube video to accompany this article, embedded below!
如何在 PowerShell 中使用 @ 符號

PowerShell,一種強大的腳本語言和命令行外殼,以其靈活性和廣泛的功能集而聞名。PowerShell 的一個鮮為人知但極其強大的特性是使用 @ 符號。

本文深入探討了 @ 符號在 PowerShell 腳本中的多方面應用,揭示了其在創建數組、哈希表和 here-strings 中的能力,特別是在進階技術 splatting 中。Splatting 是一種將參數傳遞給函數和命令的方式,它顯著提高了腳本的可讀性和可維護性。

通過探索 @ 符號的這些用途,本文作為一個全面的指南,為初學者和資深 PowerShell 用戶尋求充分利用這種腳本語言的潛力。

使用 @ 符號在 PowerShell 中創建數組

在 PowerShell 中,@ 符號是多功能的,但其基本角色之一是在創建和操作數組中。數組在任何編程語言中都是必不可少的,作為存儲和操作元素集合的方法。

PowerShell 的 @ 符號提供了一種清晰簡潔的方法來定義數組,確保即使是單個元素或命令的結果也被視為數組。

範例:

# Define a simple Print function
function Print($message) {
    Write-Host $message
}

# Create an array of numbers
$numbers = @(1, 2, 3, 4, 5)

# Iterate over the array and print each number
foreach ($number in $numbers) {
    Print $number
}

在這個腳本中,我們首先定義了一個接受單個參數 $message 的函數 Print,並使用 Write-Host 顯示該參數。這個函數作為我們演示的基本輸出機制。

接下來,我們使用 @ 符號創建了一個數組 $numbers。這個數組初始化了五個數字:12345

注意數字周圍使用了 @(),確保它們被視為數組。

完成數組創建後,我們使用 foreach 循環遍歷 $numbers 數組中的每個元素。在循環內部,我們調用 Print 函數,依次傳遞每個數字。

輸出:

在 PowerShell 中使用 @ 符號 - 輸出 1

使用 @ 符號在 PowerShell 中創建哈希表

哈希表是一種緊湊的數據結構,用於存儲一個或多個配對的鍵和值。它也被稱為字典或關聯數組。

在 PowerShell 中創建哈希表的語法以 @ 符號開頭。鍵和值被包含在 {} 括號內。

範例:

# Define a simple Print function
function Print($message) {
    Write-Host $message
}

# Create a hashtable of employee details
$employee = @{
    Name       = 'John Doe'
    Department = 'IT'
    Position   = 'Analyst'
}

# Iterate over the hashtable and print each detail
foreach ($key in $employee.Keys) {
    $value = $employee[$key]
    Print "Key: $key, Value: $value"
}

在這個腳本中,我們首先定義了一個 Print 函數,這是一個基本的工具,用於向主機輸出消息。

接下來,我們使用 @ 符號創建了一個哈希表 $employee。這個哈希表包含三個鍵值對,表示員工的姓名、部門和職位。

定義完哈希表後,我們使用 foreach 循環遍歷哈希表中的每個鍵。在循環內部,我們檢索每個鍵對應的值,然後使用 Print 函數輸出鍵及其值。

輸出:

在 PowerShell 中使用 @ 符號 - 輸出 2

使用 @ 符號定義 PowerShell 中的 Here-Strings

@ 符號的另一個重要用途是定義 PowerShell 中的 here-strings。在 here-string 中,雙引號被字面解釋。

here-strings 在 PowerShell 中的主要目的是簡化長字符串的處理,特別是那些需要特定格式、換行或特殊字符的字符串。使用單引號 ' 或雙引號 " 來處理多行文本時,常規字符串的處理可能會變得麻煩。

範例:

# Define a simple Print function
function Print($message) {
    Write-Host $message
}

# Define a variable
$name = "John"

# Create an expandable here-string
$multiLineText = @"
Hello, $name!
Welcome to PowerShell scripting.
This is an example of a multi-line here-string.
"@

# Print the here-string
Print $multiLineText

在這個腳本中,我們首先定義了一個 Print 函數用於顯示輸出。

然後我們定義了一個變量 $name 設置為 John。隨後,我們創建了一個可擴展的 here-string $multiLineText

注意如何使用 @" "@ 分隔符來開始和結束多行字符串。在這個 here-string 中,包含了變量 $name,該變量將被擴展為其值。

最後,我們調用 Print 函數來輸出我們的 here-string 的內容。

輸出:

在 PowerShell 中使用 @ 符號 - 輸出 3

here-string 包含 @" "@ 之間的所有文本。

單引號的 here-string:

# Define a simple Print function
function Print($message) {
    Write-Host $message
}

# Create a single-quoted here-string
$literalText = @'
This is an example of a single-quoted here-string.
Special characters like $ or ` won't be processed.
Everything here is treated as literal text.
'@

# Print the here-string
Print $literalText

在我們的腳本中,我們首先定義了一個 Print 函數,用於將給定消息輸出到主機。

接下來,我們創建了一個名為 $literalText 的單引號 here-string。@' '@ 分隔符指示 here-string 的開始和結束。

在這些分隔符內,我們包括了提到特殊字符如 $ 和反引號 ` 的文本,這些字符在 PowerShell 中通常具有特殊含義。

最後,我們調用 Print 函數以顯示我們的 here-string 的內容。

輸出:

在 PowerShell 中使用 @ 符號 - 輸出 4

在單引號的 here-strings 中,變量是字面解釋的,並在輸出中打印,但在雙引號的 here-strings 中則不是。

使用 @ 符號進行數組的 Splatting 在 PowerShell 中

Splatting 主要用於提高腳本的可讀性和可維護性,特別是在處理需要大量參數的命令時。與其在命令中直接列出每個參數及其值,不如使用 splatting 來定義它們為數組或哈希表,然後使用 @ 符號一次性傳遞它們。

您可以在命令中使用 @ 符號進行數組的 splatting。@ 符號可以使用數組來 splat 不需要參數名稱的位置參數的值。

範例:

# Define a simple Print function
function Print-Message($part1, $part2, $part3) {
    Write-Host "$part1 - $part2 - $part3"
}

# Define an array of parameters
$paramArray = @('Hello', 'PowerShell', 'Splatting')

# Call the function using splatting
Print-Message @paramArray

在這個例子中,我們首先定義了一個 Print-Message 函數,該函數接受三個參數,並以格式化的字符串輸出它們。

然後我們創建了一個包含三個字符串值的數組 $paramArrayHelloPowerShellSplatting。這些值對應於我們函數的參數 $part1$part2$part3

在調用 Print-Message 函數時,我們使用 splatting 來傳遞參數數組。在 $paramArray 前面的 @ 符號表示數組的元素應按其各自順序映射到函數的參數。

輸出:

在 PowerShell 中使用 @ 符號 - 輸出 5

使用 @ 符號進行哈希表的 Splatting 在 PowerShell 中

同樣,您可以使用 @ 符號進行哈希表 splatting。

使用哈希表進行 splatting 的主要目的是簡化將參數傳遞給 PowerShell 中的函數和命令的過程。這在管理具有多個參數的復雜命令時特別有價值,增強了代碼的可讀性和可維護性。

Splatting 允許以更結構化和清晰的方式指定參數,這對於腳本調試和編輯是有益的。

範例:

# Define a simple function
function Get-Greeting {
    param (
        [string]$Name,
        [string]$TimeOfDay
    )
    "Good $TimeOfDay, $Name!"
}

# Define a hash table of parameters
$greetingParams = @{
    Name      = 'Alice'
    TimeOfDay = 'Morning'
}

# Call the function using splatting
$greeting = Get-Greeting @greetingParams
Write-Host $greeting

在我們的腳本中,我們首先定義了一個接受兩個參數的函數 Get-GreetingNameTimeOfDay

接下來,我們創建了一個哈希表 $greetingParams,並用鍵 NameTimeOfDay 填充它,分別分配值 'Alice''Morning'。這些鍵對應於 Get-Greeting 函數的參數名。

在調用 Get-Greeting 時,我們使用 splatting,通過在哈希表變量 $greetingParams 前加上 @ 符號。此操作將哈希表的鍵映射到函數的相應參數。

輸出:

在 PowerShell 中使用 @ 符號 - 輸出 6

結論

在整篇文章中,我們探討了 @ 符號在 PowerShell 中的多種應用,這是一個常常被忽視但在腳本中具有巨大潛力的方面。從創建數組和哈希表到定義 here-strings 和實施 splatting,@ 符號是 PowerShell 編程人員工具箱中一個小但強大的工具。

它簡化複雜參數傳遞並增強代碼可讀性的能力在使用數組和哈希表進行 splatting 的背景下尤其值得注意。正如我們所見,@ 符號在 PowerShell 中的使用不僅是一種語法問題,更是進入更高效、可讀和可維護的腳本實踐的入口。

作者: Rohan Timalsina
Rohan Timalsina avatar Rohan Timalsina avatar

Rohan is a learner, problem solver, and web developer. He loves to write and share his understanding.

LinkedIn Website