共用方式為


關於變數

簡短描述

描述變數如何儲存可在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-Variable Remove-Item

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

變數類型

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

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 物件的 變數。

[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\WindowsPowerShell\Microsoft.PowerShell_profile.ps1

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

notepad $PROFILE

notepad "$PROFILE"

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

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

包含特殊字元的變數名稱

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

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

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

  • 這些類別的 Unicode 字元:LuLlLtLmLoNd
  • 底線 (_) 字元。
  • 問號 (?) 字元。

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

  • Lu - UppercaseLetter
  • Ll - 小寫字母
  • 中尉 - TitlecaseLetter
  • lm - 修飾符字母
  • Lo - 其他信件
  • 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"

儲存變數

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

若要在您啟動的每個 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

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

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 變更變數的值。

另請參閱

自動變數概覽

關於環境變數

關於_偏好_變數

關於_簡介

引用規則相關

about_Scopes