about_Variables

簡短描述

描述變數如何儲存可在PowerShell中使用的值。

詳細描述

您可以將所有類型的值儲存在 PowerShell 變數中。 例如,儲存命令的結果,並儲存命令和表達式中使用的專案,例如名稱、路徑、設定和值。

變數是儲存值的記憶體單位。 在 PowerShell 中,變數會以以貨幣符號 ($) 開頭的文字字串表示,例如 $a$process$my_var

變數名稱不區分大小寫,而且可以包含空格和特殊字元。 但是,包含特殊字元和空格的變數名稱很難使用,因此應避免使用。 如需詳細資訊,請參閱 包含特殊字元的變數名稱。

PowerShell 中有數種不同類型的變數。

  • 使用者建立的變數:使用者建立的變數是由使用者建立和維護。 根據預設,您在 PowerShell 命令行上建立的變數只有在 PowerShell 視窗開啟時才存在。 關閉 PowerShell 視窗時,會刪除變數。 若要儲存變數,請將它新增至 PowerShell 配置檔。 您也可以在具有全域、腳本或本機範圍的腳本中建立變數。

  • 自動變數:自動變數會儲存PowerShell的狀態。 這些變數是由 PowerShell 所建立,而 PowerShell 會視需要變更其值,以維持其精確度。 用戶無法變更這些變數的值。 例如, $PSHOME 變數會儲存PowerShell安裝目錄的路徑。

    如需詳細資訊、清單和自動變數的描述,請參閱 about_Automatic_Variables

  • 喜好設定變數:喜好設定變數會儲存 PowerShell 的使用者喜好設定。 這些變數是由 PowerShell 所建立,並填入預設值。 用戶可以變更這些變數的值。 例如, $MaximumHistoryCount 變數會決定會話歷程記錄中的項目數目上限。

    如需詳細資訊、清單和喜好設定變數的描述,請參閱 about_Preference_Variables

使用變數

若要建立新的變數,請使用 assignment 語句將值指派給變數。 您不需要在使用它之前宣告變數。 所有變數的預設值為 $null

若要取得 PowerShell 工作階段中所有變數的清單,請輸入 Get-Variable。 變數名稱會顯示,而沒有用來參考變數的前一個貨幣符號($) 符號。

例如:

$MyVariable = 1, 2, 3

$Path = "C:\Windows\System32"

變數可用於儲存命令的結果。

例如:

$Processes = Get-Process

$Today = (Get-Date).DateTime

若要顯示變數的值,請輸入變數名稱,前面加上貨幣符號 ($)。

例如:

$MyVariable
1
2
3
$Today
Tuesday, September 3, 2019 09:46:46

若要變更變數的值,請將新的值指派給變數。

下列範例會顯示變數的值、變更變數的值 $MyVariable ,然後顯示新的值。

$MyVariable = 1, 2, 3
$MyVariable
1
2
3
$MyVariable = "The green cat."
$MyVariable
The green cat.

若要刪除變數的值,請使用 Clear-Variable Cmdlet 或將值變更為 $null

Clear-Variable -Name MyVariable
$MyVariable = $null

若要刪除變數,請使用 Remove-VariableRemove-Item

Remove-Variable -Name MyVariable
Remove-Item -Path Variable:\MyVariable

您也可以使用一個語句將值指派給多個變數。 下列範例會將相同的值指派給多個變數:

$a = $b = $c = 0

下一個範例會將多個值指派給多個變數。

$i,$j,$k = 10, "red", $true    # $i is 10, $j is "red", $k is True
$i,$j = 10, "red", $true       # $i is 10, $j is [object[]], Length 2

如需詳細資訊,請參閱about_Assignment_Operators指派多個變數一節。

變數類型

您可以將任何類型的物件儲存在變數中,包括整數、字串、陣列和哈希表。 而且,代表進程、服務、事件記錄檔和計算機的物件。

PowerShell 變數是鬆散類型,這表示它們不限於特定類型的物件。 單一變數甚至可以同時包含不同類型的物件集合或陣列。

變數的數據類型是由變數值的 .NET 類型所決定。 若要檢視變數的物件類型,請使用 Get-Member

例如:

$a = 12                         # System.Int32
$a = "Word"                     # System.String
$a = 12, "Word"                 # array of System.Int32, System.String
$a = Get-ChildItem C:\Windows   # FileInfo and DirectoryInfo types

您可以使用類型屬性和轉換表示法,確保變數只能包含可轉換成該類型的特定物件類型或物件。 如果您嘗試指派另一個類型的值,PowerShell 會嘗試將值轉換成其類型。 如果無法轉換類型,指派語句就會失敗。

若要使用轉換表示法,請在變數名稱之前輸入以括弧括住的類型名稱(在指派語句的左側)。 下列範例會 $number 建立只能包含整數的變數、 $words 只能包含字串的變數,以及 $dates 只能 包含 DateTime 物件的變數。

[int]$number = 8
$number = "12345"  # The string is converted to an integer.
$number = "Hello"
Cannot convert value "Hello" to type "System.Int32". Error: "Input string
was not in a correct format."
At line:1 char:1
+ $number = "Hello"
+ ~~~~~~~~~~~~~~~~~
+ CategoryInfo          : MetadataError: (:) [],
    ArgumentTransformationMetadataException
+ FullyQualifiedErrorId : RuntimeException
[string]$words = "Hello"
$words = 2       # The integer is converted to a string.
$words += 10     # The plus (+) sign concatenates the strings.
$words
210
[datetime] $dates = "09/12/91"  # The string is converted to a DateTime object.
$dates
Thursday, September 12, 1991 00:00:00
$dates = 10    # The integer is converted to a DateTime object.
$dates
Monday, January 1, 0001 00:00:00

在命令和表達式中使用變數

若要在命令或表示式中使用變數,請輸入變數名稱,前面加上 dollar ($) 符號。

如果變數名稱和貨幣符號未以引弧括住,或以雙引號括"住,變數的值會用在命令或表達式中。

如果變數名稱和貨幣符號以單引號 (') 標記括住,則會在表達式中使用變數名稱。

如需在PowerShell中使用引號的詳細資訊,請參閱 about_Quoting_Rules

這個範例會取得 變數的值 $PROFILE ,這是 PowerShell 控制台中 PowerShell 使用者配置檔檔案的路徑。

$PROFILE
C:\Users\User01\Documents\PowerShell\Microsoft.PowerShell_profile.ps1

在此範例中,會顯示兩個命令,可在 notepad.exe開啟 PowerShell 配置檔。 具有雙引號 (") 標記的範例會使用變數的值。

notepad $PROFILE

notepad "$PROFILE"

下列範例使用將變數視為常值文字的單引號 (') 標記。

'$PROFILE'
$PROFILE
'Use the $PROFILE variable.'
Use the $PROFILE variable.

包含特殊字元的變數名稱

變數名稱以貨幣 ($) 符號開頭,可以包含英數位元和特殊字元。 變數名稱長度只受限於可用的記憶體。

最佳做法是變數名稱只包含英數位元和底線 (_) 字元。 包含空格和其他特殊字元的變數名稱難以使用,因此應避免使用。

英數位元變數名稱可以包含下列字元:

  • 這些類別的 Unicode 字元:Lu、Ll、LtLmLoNd
  • 底線 (_) 字元。
  • 問號 (?) 字元。

下列清單包含 Unicode 類別描述。 如需詳細資訊,請參閱 UnicodeCategory

  • Lu - UppercaseLetter
  • Ll - LowercaseLetter
  • Lt - TitlecaseLetter
  • Lm - ModifierLetter
  • Lo - OtherLetter
  • Nd - DecimalDigitNumber

若要建立或顯示包含空格或特殊字元的變數名稱,請使用大括號 ({}) 字元括住變數名稱。 大括弧會指示PowerShell將變數名稱的字元解譯為常值。

特殊字元變數名稱可以包含下列字元:

  • 任何 Unicode 字元,但有下列例外狀況:
    • 右大括弧 (}) 字元 (U+007D)。
    • 反引號字元` (U+0060) 。 反引號用來逸出 Unicode 字元,使其被視為常值。

PowerShell 具有包含英數位元和特殊字元的保留變數,例如$$$?$^$_ 和 。 如需詳細資訊,請參閱 about_Automatic_Variables

例如,下列命令會建立名為的 save-items變數。 因為變數名稱包含連字元 () 特殊字元,因此需要大括號{}-) 。

${save-items} = "a", "b", "c"
${save-items}
a
b
c

下列命令會取得環境變數所 ProgramFiles(x86) 表示之目錄中的子專案。

Get-ChildItem ${env:ProgramFiles(x86)}

若要參考包含大括號的變數名稱,請以大括弧括住變數名稱,並使用反引號字元逸出大括弧。 例如,若要建立名為 this{value}is 類型的變數:

${this`{value`}is} = "This variable name uses braces and backticks."
${this`{value`}is}
This variable name uses braces and backticks.

變數和範圍

根據預設,變數只能在建立變數的範圍中使用。

例如,您在函式中建立的變數只能在函式內使用。 您在文稿中建立的變數只能在腳本中使用。 如果您以點來源撰寫腳本,變數就會新增至目前的範圍。 如需詳細資訊,請參閱 about_Scopes

您可以使用範圍修飾詞來變更變數的預設範圍。 下列表達式會建立名為的 Computers變數。 變數具有全域範圍,即使在腳本或函式中建立變數也一樣。

$Global:Computers = "Server01"

針對任何在會話外執行的腳本或命令,您需要 Using 範圍修飾詞來內嵌來自呼叫會話範圍的變數值,讓會話程序代碼可以存取它們。

如需詳細資訊,請參閱 about_Remote_Variables

儲存變數

您建立的變數只能在您建立它們的會話中使用。 當您關閉工作階段時,它們就會遺失。

若要在您啟動的每個 PowerShell 工作階段中建立變數,請將變數新增至 PowerShell 配置檔。

例如,若要變更每個 PowerShell 工作階段中的變數值 $VerbosePreference ,請將下列命令新增至 PowerShell 配置檔。

$VerbosePreference = "Continue"

您可以在文字編輯器中開啟 $PROFILE 檔案,例如 notepad.exe,將此命令新增至 PowerShell 配置檔。 如需 PowerShell 配置檔的詳細資訊,請參閱 about_Profiles

變數:磁碟驅動器

PowerShell 變數提供者會建立看起來像 Variable: 文件系統磁碟驅動器的磁碟驅動器,但它包含會話中的變數及其值。

若要變更為 Variable: 磁碟驅動器,請使用下列命令:

Set-Location Variable:

若要列出磁碟驅動器中的 Variable: 專案和變數,請使用 Get-ItemGet-ChildItem Cmdlet。

Get-ChildItem Variable:

若要取得特定變數的值,請使用檔案系統表示法來指定磁碟驅動器的名稱和變數的名稱。 例如,若要取得 $PSCulture 自動變數,請使用下列命令。

Get-Item Variable:\PSCulture
Name                           Value
----                           -----
PSCulture                      en-US

若要顯示磁碟驅動器和 PowerShell 變數提供者的詳細資訊 Variable: ,請輸入:

Get-Help Variable

具有提供者路徑的變數語法

您可以在提供者路徑前面加上貨幣 ($) 符號,並存取任何實 作 IContentCmdletProvider 介面的提供者內容。

下列內建 PowerShell 提供者支援此表示法:

變數 Cmdlet

PowerShell 包含一組設計用來管理變數的 Cmdlet。

若要列出 Cmdlet,請輸入:

Get-Command -Noun Variable

若要取得特定 Cmdlet 的說明,請輸入:

Get-Help <cmdlet-name>
Cmdlet 名稱 描述
Clear-Variable 刪除變數的值。
Get-Variable 取得目前控制台中的變數。
New-Variable 建立新變數。
Remove-Variable 刪除變數及其值。
Set-Variable 變更變數的值。

另請參閱