共用方式為


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