簡短描述
描述變數如何儲存可在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 字元:Lu、Ll、Lt、Lm、Lo或 Nd。
- 底線 (
_) 字元。 - 問號 (
?) 字元。
以下清單包含 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-Item 或 Get-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 |
變更變數的值。 |