about_Automatic_Variables
適用於: Windows PowerShell 2.0, Windows PowerShell 3.0
在此插入簡介。
主題
about_Automatic_Variables
簡短描述
描述用來儲存 Windows PowerShell 狀態資訊的變數。這些變數是由 Windows PowerShell 建立和維護。
詳細描述
以下是 Windows PowerShell 中的自動變數清單:
$$
包含工作階段所收到的最後一行中的最後一個權杖。
$?
包含最後一個作業的執行狀態。如果最後一個作業成功,則包含 TRUE,如果失敗,則包含 FALSE。
$^
包含工作階段所收到的最後一行中的第一個權杖。
$_
與 $PSItem 相同。包含管線物件中的目前物件。您可以在命令中使用此變數,即是在每個物件上或管線中選取的物件上執行動作的命令。
$ARGS
包含未宣告參數陣列和 (或) 傳遞至函式、指令碼或指令碼區塊的參數值陣列。當您建立一個函式時,您可以使用 param 關鍵字或將以括號括住的逗點分隔參數清單加到函式名稱之後,藉此宣告參數。
在事件動作中,$Args 變數包含的物件表示正在處理之事件的事件引數。此變數只會填入事件登錄命令的 Action 區塊內。Get-Event 所傳回之 PSEventArgs 物件 (System.Management.Automation.PSEventArgs) 的 SourceArgs 屬性中也可以找到此變數的值。
$CONSOLEFILENAME
包含最近使用於工作階段中的主控台檔案 (.psc1) 的路徑。此變數會在您使用 PSConsoleFile 參數啟動 Windows PowerShell 時,或在您使用 Export-Console Cmdlet 將嵌入式管理單元名稱匯出至主控台檔案時填入。
當您使用沒有參數的 Export-Console Cmdlet 時,它會自動更新最近用於工作階段中的主控台檔案。您可以使用此自動變數來判斷將要更新哪些檔案。
$ERROR
包含表示近期錯誤的錯誤物件陣列。最近的錯誤是陣列中的第一個錯誤物件 ($Error[0])。
若要防止錯誤加入至 $Error 陣列,請使用值為 Ignore 的 ErrorAction 一般參數。如需詳細資訊,請參閱 about_CommonParameters (https://go.microsoft.com/fwlink/?LinkID=113216)。
$EVENT
包含一個 PSEventArgs 物件,其代表正在處理的事件。此變數只會填入事件註冊命令的 Action 區塊,例如 Register-ObjectEvent。此變數的值是 Get-Event Cmdlet 傳回的相同物件。因此,您可以在 Action 指令碼區塊中使用 $Event 變數的屬性,例如 $Event.TimeGenerated。
$EVENTARGS
包含一個物件,其代表衍生自正在處理之事件的 EventArgs 的第一個事件引數。此變數只會填入事件登錄命令的 Action 區塊內。Get-Event 所傳回之 PSEventArgs (System.Management.Automation.PSEventArgs) 物件的 SourceEventArgs 屬性中也可以找到此變數的值。
$EVENTSUBSCRIBER
包含一個 PSEventSubscriber 物件,其代表正在處理之事件的事件訂閱者。此變數只會填入事件登錄命令的 Action 區塊內。此變數的值是 Get-EventSubscriber Cmdlet 傳回的相同物件。
$EXECUTIONCONTEXT
包含一個 EngineIntrinsics 物件,其代表 Windows PowerShell 主機的執行內容。您可以使用此變數來尋找 Cmdlet 可用的執行物件。
$FALSE
包含 FALSE。您可以使用此變數來表示命令和指令碼中的 FALSE,而不是使用字串 "false"。如果此字串轉換成非空白字串或非零的整數,即可解譯為 TRUE。
$FOREACH
包含 ForEach 迴圈的列舉值 (而不是結果產生的值)。您可以在 $ForEach 變數值上使用列舉值的屬性和方法。此變數只存在於 ForEach 迴圈正在執行時;迴圈完成後,就會遭到刪除。如需詳細資訊,請參閱 about_ForEach。
$HOME
包含使用者主目錄的完整路徑。此變數相當於 %homedrive%%homepath% 環境變數,通常為 C:\Users\<UserName>。
$HOST
包含一個物件,其表示 Windows PowerShell 的目前主應用程式。您可以使用此變數來表示命令中的目前主控件,或顯示或變更主控件的屬性,例如 $Host.version 或 $Host.CurrentCulture,或 $host.ui.rawui.setbackgroundcolor("Red")。
$INPUT
包含一個列舉值,其列舉傳遞至某個函式的所有輸入。$Input 變數僅適用於函式和指令碼區塊 (這是不具名的函式)。在函式的 Process 區塊中,$input 變數會列舉目前在管線中的物件。當 Process 區塊完成時,管線中沒留下任何物件,所以 $input 變數會列舉空的集合。如果函式沒有 Process 區塊,則在 End 區塊中,$input 變數會列舉此函式的所有輸入集合。
$LASTEXITCODE
包含最後執行之 Windows 型程式的結束碼。
$MATCHES
$Matches 變數可搭配 -match 和 -notmatch 運算子運作。當您將純量輸入提交至 -match 或 -notmatch 運算子,而且其中一個運算子偵測到相符項目時,它們會傳回布林值並以任何相符字串值的雜湊表填入 $Matches 自動變數。如需 -match 運算子的詳細資訊,請參閱 about_comparison_operators。
$MYINVOCATION
包含目前命令的相關資訊,例如名稱、參數、參數值以及如何啟動、呼叫或「叫用」命令的相關資訊,例如呼叫目前命令的指令碼名稱。
$MyInvocation 只會針對指令碼、函式和指令碼區塊填入。您可以使用 $MyInvocation 在目前指令碼中傳回的 System.Management.Automation.InvocationInfo 物件中的資訊,(例如指令碼 ($MyInvocation.MyCommand.Path) 的路徑和檔案名稱或函式 ($MyInvocation.MyCommand.Name) 的名稱) 來識別目前的命令。這特別適合用來尋找目前指令碼的名稱。
從 Windows PowerShell 3.0 起,$MyInvocation 具有下列新屬性。
-- PSScriptRoot: Contains the full path to the script that invoked the
current command. The value of this property is populated only when
the caller is a script.
-- PSCommandPath: Contains the full path and file name of the script that
invoked the current command. The value of this property is populated
only when the caller is a script.
不同於 $PSScriptRoot 和 $PSCommandPath 自動變數,$MyInvocation 自動變數的 PSScriptRoot 和 PSCommandPath 屬性包含啟動程式或呼叫指令碼 (而非目前指令碼) 的相關資訊。
$NESTEDPROMPTLEVEL
包含目前的提示字元層級。值為 0 表示原始提示字元層級。此值會在您輸入巢狀層級時遞增,而在您結束它時遞減。
例如,Windows PowerShell 會在您使用 $Host.EnterNestedPrompt 方法時呈現巢狀命令提示字元。Windows PowerShell 也會在您到達 Windows PowerShell 偵錯工具的中斷點時呈現巢狀命令提示字元。
當您輸入巢狀提示字元時,Windows PowerShell 會暫停目前的命令、儲存執行內容,並遞增 $NestedPromptLevel 變數的值。若要建立其他巢狀命令提示字元 (最多 128 個層級) 或回到原始命令提示字元,請完成命令,或鍵入"exit"。
$NestedPromptLevel 變數可協助您追蹤提示字元層級。您可以建立包含這個值的替代 Windows PowerShell 命令,使其一律可見。
$NULL
$null 是包含 NULL 或空值的自動變數。您可以使用此變數來表示命令和指令碼中不存在或未定義的值。
Windows PowerShell 會將 $null 視為具有值的物件,也就是明確的預留位置,因此您可以使用 $null 來表示一系列的值中的空值。
例如,當 $null 包含在集合中時,它會被視為其中一個物件。
C:\PS> $a = ".dir", $null, ".pdf"
C:\PS> $a.count
3
如果您透過管道將 $null 傳送到 Foreach-Object Cmdlet,則會產生 $null 的值,就像處理其他物件一樣。
PS C:\ps-test> ".dir", "$null, ".pdf" | Foreach {"Hello"}
Hello
Hello
Hello
如此一來,您無法使用 $null 來表示「無參數值」。$Null 參數值會覆寫預設參數值。
不過,因為 Windows PowerShell 會將 $null 變數視為預留位置,所以您可以將它使用於類似下列的指令碼,如果略過 $null,則無法運作。
$calendar = @($null, $null, “Meeting”, $null, $null, “Team Lunch”, $null)
$days = Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"
$currentDay = 0
foreach($day in $calendar)
{
if($day –ne $null)
{
"Appointment on $($days[$currentDay]): $day"
}
$currentDay++
}
Appointment on Tuesday: Meeting
Appointment on Friday: Team lunch
$OFS
$OFS 是一個特殊變數,可儲存您想要做為輸出欄位分隔符號的字串。當您將陣列轉換成字串時,請使用這個變數。根據預設,$OFS 的值是 " ",但是您可以輸入 $OFS="<value>",以在您的工作階段中變更 $OFS 的值。如果您希望預設值 " " 出現在您的指令碼、模組或組態輸出中,請留意,$OFS 預設值尚未在您的程式碼中的其他位置變更。
範例:
PS> $a="1","2","3","4"
PS> $a
1
2
3
4
PS> [string]$a
1 2 3 4
PS> $OFS="";[string]$a
1234
PS> $OFS=",";[string]$a
1,2,3,4
PS> $OFS="--PowerShellRocks--";[string]$a
1--PowerShellRocks--2--PowerShellRocks--3--PowerShellRocks--4
PS> $OFS="`n`n";[string]$a
1
2
3
4
$PID
包含主控目前 Windows PowerShell 工作階段之處理程序的處理程序識別碼 (PID)。
$PROFILE
包含目前使用者和目前主應用程式之 Windows PowerShell 設定檔的完整路徑。您可以使用此變數來表示命令中的設定檔。例如,您可以在命令中使用它來判斷是否已建立設定檔:
test-path $profile
或者,可以在命令中使用它來建立設定檔:
new-item -type file -path $pshome -force
您也可以在命令中使用它,以在 [記事本] 中開啟設定檔:
notepad $profile
$PSBOUNDPARAMETERS
包含傳遞至指令碼或函式之參數的字典以及其目前的值。此變數的值僅在宣告參數的範圍中,例如指令碼或函式。您可以使用它來顯示或變更參數的目前值,或將參數值傳遞至另一個指令碼或函式。
例如:
function Test {
param($a, $b)
# Display the parameters in dictionary format.
$PSBoundParameters
# Call the Test1 function with $a and $b.
test1 @PSBoundParameters
}
$PSCMDLET
包含一個物件,其表示正在執行的 Cmdlet 或進階函式。
您可以在 Cmdlet 或函式程式碼中使用物件的屬性和方法來回應使用的狀況。例如,ParameterSetName 屬性包含正在使用之參數集的名稱,而 ShouldProcess 方法會以動態方式將 WhatIf 和 Confirm 參數加入至 Cmdlet。
如需有關 $PSCmdlet 自動變數的詳細資訊,請參閱 about_Functions_Advanced。
$PSCOMMANDPATH
包含正在執行之指令碼的完整路徑和檔案名稱。這個變數在所有指令碼中皆有效。
$PSCULTURE
包含目前使用於作業系統中的文化特性名稱。文化特性會決定項目 (例如數字、貨幣及日期) 的顯示格式。這是系統的 System.Globalization.CultureInfo.CurrentCulture.Name 屬性值。若要取得系統的 System.Globalization.CultureInfo 物件,請使用 Get-Culture Cmdlet。
$PSDEBUGCONTEXT
偵錯時,此變數包含偵錯環境的相關資訊。否則,它會包含 NULL 值。如此一來,您可以使用它來指出偵錯工具是否有控制權。填入後,它包含具有 Breakpoints 和 InvocationInfo 屬性的 PsDebugContext 物件。InvocationInfo 屬性有幾個實用屬性,包括 Location 屬性。Location 屬性表示所偵錯之指令碼的路徑。
$PSHOME
包含 Windows PowerShell 的安裝目錄完整路徑,通常為 %windir%\System32\WindowsPowerShell\v1.0。您可以在 Windows PowerShell 檔案的路徑中使用這個變數。例如,下列命令會在概念說明主題中搜尋 "variable" 這個字:
Select-String -Pattern Variable -Path $pshome\*.txt
$PSITEM
與 $_ 相同。包含管線物件中的目前物件。您可以在命令中使用此變數,即是在每個物件上或管線中選取的物件上執行動作的命令。
$PSSCRIPTROOT
包含要從中執行指令碼的目錄。
在 Windows PowerShell 2.0 中,此變數只在指令碼模組 (.psm1) 中有效。從 Windows PowerShell 3.0 開始,此變數在所有指令碼中皆有效。
$PSSENDERINFO
包含啟動 PSSession 之使用者的相關資訊,包括使用者身分識別和原始電腦的時區。此變數是只能用於 PSSession。
$PSSenderInfo 變數包含使用者可設定的屬性 ApplicationArguments,根據預設,該屬性只包含來自原始工作階段的 $PSVersionTable。若要將資料加入至 ApplicationArguments 屬性,請使用 New-PSSessionOption Cmdlet 的 ApplicationArguments 參數。
$PSUICULTURE
包含作業系統目前使用的使用者介面 (UI) 文化特性名稱。UI 文化特性會決定要將哪些文字字串用於使用者介面元素,例如功能表和訊息。這是系統的 System.Globalization.CultureInfo.CurrentUICulture.Name 屬性值。若要取得系統的 System.Globalization.CultureInfo 物件,請使用 Get-UICulture Cmdlet。
$PSVERSIONTABLE
包含一個唯讀雜湊表,其顯示正在目前工作階段中執行之 Windows PowerShell 版本的相關詳細資訊。該表格包含下列項目:
CLRVersion: The version of the common language runtime (CLR)
BuildVersion: The build number of the current version
PSVersion: The Windows PowerShell version number
WSManStackVersion: The version number of the WS-Management stack
PSCompatibleVersions: Versions of Windows PowerShell that are
compatible with the current version
SerializationVersion The version of the serialization method
PSRemotingProtocolVersion
The version of the Windows PowerShell remote
management protocol
$PWD
包含一個路徑物件,其表示目前目錄的完整路徑。
$REPORTERRORSHOWEXCEPTIONCLASS
$REPORTERRORSHOWINNEREXCEPTION
$REPORTERRORSHOWSOURCE
$REPORTERRORSHOWSTACKTRACE
"ReportErrorShow" 變數已定義於 Windows PowerShell 中,但並未實作。Get-Variable 可取得這類變數,但不包含有效的資料。
$SENDER
包含產生此事件的物件。此變數只會填入事件登錄命令的 Action 區塊內。Get-Event 所傳回之 PSEventArgs (System.Management.Automation.PSEventArgs) 物件的 Sender 屬性中也可以找到此變數的值。
$SHELLID
包含目前殼層的識別碼。
$STACKTRACE
包含最新錯誤的堆疊追蹤。
$THIS
在可定義指令碼屬性或指令碼方法的指令碼區塊中,$This 變數是指所要擴充的物件。
$TRUE
包含 TRUE。您可以使用此變數來表示命令和指令碼中的 TRUE。
另請參閱
about_Hash_Tables
about_Preference_Variables
about_Variables