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-Variable 或 Remove-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、Lt、Lm、Lo 或 Nd。
- 底線 (
_
) 字元。 - 問號 (
?
) 字元。
下列清單包含 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-Item
或 Get-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 |
變更變數的值。 |