主題
    喜好設定變數

簡短描述
    可以自訂 Windows PowerShell 行為的變數

完整描述
    Windows PowerShell 包含一組可以讓您自訂 PowerShell 行為的變數。這類「喜好
    設定變數」的功能與 GUI 系統中的選項類似。

    喜好設定變數會影響 Windows PowerShell 作業環境以及在環境中執行的所有命令。
    在許多情況中,Cmdlet 都具有您可以用於覆寫特定命令之喜好設定行為的參數。

    下表列出喜好設定變數和它們的預設值。

    變數				 預設值
    --------                             -------------
    $ConfirmPreference			 High
    $DebugPreference		         SilentlyContinue
    $ErrorActionPreference	         Continue
    $ErrorView				 NormalView
    $FormatEnumerationLimit		 4
    $LogCommandHealthEvent               False (未登入)
    $LogCommandLifecycleEvent            False (未登入)
    $LogEngineHealthEvent	         True (已登入)
    $LogEngineLifecycleEvent	         True (已登入)
    $LogProviderLifecycleEvent	         True (已登入)
    $LogProviderHealthEvent	         True (已登入)
    $MaximumAliasCount			 4096
    $MaximumDriveCount			 4096
    $MaximumErrorCount			 256
    $MaximumFunctionCount		 4096
    $MaximumHistoryCount		 64
    $MaximumVariableCount  		 4096
    $OFS				 (空格字元 (" "))
    $OutputEncoding		         ASCIIEncoding 物件
    $ProgressPreference			 Continue
    $PSEmailServer			 (無)
    $PSSessionApplicationName		 WSMAN
    $PSSessionConfigurationName	 	 https://schemas.microsoft.com/powershell/microsoft.powershell
    $PSSessionOption			 (參閱下方內容)
    $VerbosePreference			 SilentlyContinue
    $WarningPreference			 Continue
    $WhatIfPreference			 0


    此外,Windows PowerShell 也包含下列可以儲存使用者喜好設定的環境變數。如需
    環境變數的詳細資訊,請參閱 about_environment_variables。

    變數
    --------                         
    PSModulePath

使用喜好設定變數
    這份文件說明每一個喜好設定變數。

    若要顯示特定喜好變數的目前值,請輸入變數名稱。Windows PowerShell 便會提供
    值表示回應。例如,以下命令會顯示 $ConfirmPreference 變數的值:

        PS> $ConfirmPreference
        High

    若要變更變數的值,請使用指派陳述式。例如,下列陳述列會將 "Medium" 值指派
    給 $ConfirmPreference 變數。

        PS> $ConfirmPreference = "Medium"

    與其他所有變數一樣,您設定的值是目前 Windows PowerShell 視窗專用的。若要讓
    這些變數在 Windows PowerShell 的所有視窗中生效,請將它們新增到 
    Windows PowerShell 設定檔。如需詳細資訊,請參閱 about_profiles。


遠端執行
   當您在遠端電腦上執行命令時,只有已於 Windows PowerShell 用戶端上完成要在遠端
   電腦上執行之喜好設定的命令,才能執行。例如,在執行遠端命令時,遠端電腦上的 
   $DebugPreference 變數值會決定 Windows PowerShell 回應偵錯訊息的方法。

   如需遠端命令的詳細資訊,請參閱 about_remote。



$ConfirmPreference
------------------
    決定哪些 Cmdlet 動作會在執行之前先自動要求使用者確認。
        
    當 $ConfirmPreference 值 (High (高)、Medium (中)、Low (低)、None (無)) 大
    於或等於 Cmdlet 動作的風險時,Windows PowerShell 會在執行動作之前,先自動
    要求使用者確認。

    您可以使用 Cmdlet 的 Confirm 參數覆寫特定命令的喜好設定。

        有效值包括:
		None(無) :   不會自動確認任何 Cmdlet 動作。使用者必須使
                              用 Confirm 參數,要求特定命令的確認。

		Low(低):     會自動確認低、中或高風險的 Cmdlet 動作。若
                              要隱藏特定命令的確認,請使用 -Confirm:$false。

		Medium (中): 會自動確認中或高風險的 Cmdlet 動作。若要啟用
                              特定命令的確認,請使用 -confirm。若要隱藏特定
                              命令的確認,請使用 confirm:$false。

		High(高):    會自動確認高風險的 Cmdlet 動作。若要啟用特定
                (預設值)      命令的確認,請使用 -confirm。若要隱藏特定命
                              令的確認,請使用 -confirm:$false。


    詳細說明
        當任一 Cmdlet 動作 (例如刪除資料或使用大量系統資源) 會對系統產生大幅影
        響時,Windows PowerShell 可以在執行動作之前,自動提示您進行確認。

        例如,

	    PS> remove-item pref2.txt

            確認
            確定要執行此動作?
            在 "C:\pref2.txt" 目標上執行 "Remove File" 作業。
            [Y] 是 [A] 全部皆是 [N] 否 [L] 全部皆否 [S] 暫停 [?] 說明 (預設值
            為 "Y"):

        風險評估是 Cmdlet 之 "ConfirmImpact" 的一部分,您無法變更。

        可能對系統造成風險的 Cmdlet 具有 Confirm 參數,您可以利用該參數要求或
	隱藏特定命令的確認。

	因為大多數的 Cmdlet 都使用預設風險值 Medium,且 $ConfirmPreference 的
        預設值為 High,所以很少出現自動確認的情況。不過,您可以將
        $ConfirmPreference 的值變更為 Medium 或 Low,藉此啟動自動確認。

    範例
      這個範例示範 $ConfirmPreference 預設值的作用。值為 High 時,只會確認高風
      險的 Cmdlet 動作。雖然您可以使用 Cmdlet 的 Confirm 參數,要求特定命令的
      確認,但是由於大部分的動作屬於中度風險,因此不會自動確認這些動作。

          PS> $confirmpreference		# 取得變數的目前值
          High         
	  PS> remove-item temp1.txt		# 刪除檔案
          PS>					# 已刪除而未確認
          PS> remove-item temp2.txt -confirm 	#使用 Confirm 參數

          確認
          確定要執行此動作?
          在 "C:\temp2.txt" 目標上執行 "Remove File" 作業。
          [Y] 是 [A] 全部皆是 [N] 否 [L] 全部皆否 [S] 暫停 [?] 說明 (預設值
          為 "Y"):


       這個範例示範將 $ConfirmPrefernce 值變更為 Medium 的效果。由於大部分的動
       作屬於中度風險,因此不會自動確認這些動作,而且您必須使用值為 $false 的
       Confirm 參數,隱藏特定命令的確認提示。

            
          PS> $confirmpreference = "Medium"
                                     # 變更 $ConfirmPreference 的值
          PS> remove-item temp2.txt
                                     # 刪除檔案觸發確認
          確認
          確定要執行此動作?
          在 "C:\temp2.txt" 目標上執行 "Remove File" 作業。
          [Y] 是 [A] 全部皆是 [N] 否 [L] 全部皆否 [S] 暫停 [?] 說明 (預設值
	  為 "Y"):
	

          PS> remove-item temp3.txt -confirm:$false # 使用 Confirm 參數隱藏確認
          PS>

$DebugPreference
------------------
	決定 Windows PowerShell 如何回應指令碼、Cmdlet 或提供者或於命令列輸入之
        Write-Debug 命令所產生的偵錯訊息。

        有些 Cmdlet 顯示的偵錯訊息通常屬於非常技術性的訊息,專門提供給程式設計
        人員與技術支援專業人員。根據預設,並不會顯示偵錯訊息,但是您可以變更 
        $DebugPreference 的值,顯示偵錯訊息。
        
        您也可以使用 Cmdlet 的 Debug 一般參數,顯示或隱藏特定命令的偵錯訊息。
        如需詳細資訊,請輸入 "get-help about_commonparameters"。

        有效值包括:
	    Stop:		 顯示偵錯訊息並且停止執行。將錯誤寫入主控台。

     	    Inquire:	  	 顯示偵錯訊息並且詢問您是否繼續。

            Continue:           顯示偵錯訊息並且繼續執行。

            SilentlyContinue:   沒有作用。不會顯示偵錯訊息且繼續執行而不中
            (預設)               斷。          
             

    範例
    
    下列範例示範於命令列輸入 Write-Debug 命令時,變更 $DebugPreference 值所產
    生的效果。該變更會影響包括 Cmdlet 與指令碼產生的所有偵錯訊息。範例也會示
    範 Debug 一般參數的使用,這個參數會顯示或隱藏與單一命令相關的偵錯訊息。

    這個範例示範 "SilentlyContinue" 預設值的作用。不會顯示偵錯訊息並且繼續作
    業。
    最後一個命令使用 Debug 參數覆寫單一命令的喜好設定。

        PS> $debugpreference			# 取得目前的值
        SilentlyContinue	 		  $DebugPreference

        PS> write-debug "Hello, World"
        PS>					# 不會顯示偵錯訊息。
        PS> write-debug "Hello, World" -Debug   # 使用 Debug 參數 
        DEBUG: Hello, World			# 要求偵錯訊息
        確認?
        繼續進行這項作業?
        [Y] 是 [A] 全部皆是 [H] 停止命令 [S] 暫停 [?] 說明 (預設值
        為 "Y"):

   
    這個範例示範 "Continue" 值的作用。最後一個命令使用值為 $false 的 Debug 參
    數,隱藏單一命令的訊息。

        PS> $debugpreference = "Continue"   # 將值變更為 "Continue"

        PS> write-debug "Hello, World"
        DEBUG: Hello, World	  	    # 顯示偵錯訊息並且繼續作業。
        PS>


        PS> write-debug "Hello, World" -Debug:$false
                                            # 使用值為 false 的 Debug 參數。
        PS>				    # 不會顯示偵錯訊息。

        
    這個範例示範 "Stop" 值的作用。最後一個命令使用值為 $false 的 Debug 參
    數,隱藏單一命令的訊息。

        PS> $debugpreference = "Stop"	    # 將值變更為 "Stop"
        PS> write-debug "Hello, World"
        DEBUG: Hello, World
        Write-Debug:命令執行已停止,因為殼層變數 "DebugPreference" 設定為
        Stop。
        位於第 1 行,第 12 個字元
        + write-debug <<<< "Hello, World"

        PS> write-debug "Hello, World" -Debug:$false
                                            # 使用值為 $false 的 Debug 參數
        PS>				    # 不會顯示偵錯訊息且不會停止作業。
      

    這個範例示範 "Inquire" 值的作用。最後一個命令使用值為 $false 的 Debug 參
    數,隱藏單一命令的訊息。

        PS> $debugpreference = "Inquire"
        PS> write-debug "Hello, World"
        DEBUG: Hello, World

        確認
        繼續進行這項作業?
        [Y] 是 [A] 全部皆是 [H] 停止命令 [S] 暫停 [?] 說明 (預設值為 "Y"):

        PS> write-debug "Hello, World" -Debug:$false
                                         # 使用值為 $false 的 Debug 參數
        PS>				 # 不會顯示偵錯訊息且繼續作業而不中斷。


$ErrorActionPreference
----------------------
	決定 Windows PowerShell 如何於命令列回應非終止錯誤 (不會停止 Cmdlet 
        處理作業的錯誤),或如何回應指令碼、Cmdlet 或提供者的錯誤,如 
        Write-Error Cmdlet 產生的錯誤。

        您也可以使用 Cmdlet 的 ErrorAction 一般參數覆寫特定命令的喜好設定。如
        需詳細資訊,請輸入 "get-help about_commonparameters"。


        有效值包括:
	    Stop:		顯示錯誤訊息並且停止執行。

     	    Inquire:		顯示錯誤訊息並且詢問您是否繼續。

            Continue:		顯示錯誤訊息並且繼續執行。

            SilentlyContinue : 沒有作用。不會顯示錯誤訊息且繼續執行而不中斷。
	    (預設)

       $ErrorActionPreference 或 ErrorAction 一般參數都不會影響
       Windows PowerShell 回應終止錯誤 (停止 Cmdlet 處理) 的方式。

       如需 ErrorAction 一般參數的詳細資訊,請輸入 
       "get-help about_commonparameters"。


    範例

    這些範例示範不同 $ErrorActionPreference 值的作用以及如何使用 ErrorAction
    一般參數覆寫單一命令的喜好設定。ErrorAction 參數的有效值與 
    $ErrorActionPreference 變數的相同。
    
    這個範例示範 Continue 值 (預設) 的作用。

        PS> $erroractionpreference
        Continue		# 顯示喜好設定的值。	
        PS> write-error "Hello, World"
                                # 產生非終止錯誤。

        write-error "Hello, World" : Hello, World 
                                # 顯示錯誤訊息並且繼續執行。

        PS> write-error "Hello, World" -ErrorAction:SilentlyContinue
                                # 使用值為 "SilentlyContinue" 的
                                  ErrorAction 參數。
        PS>
                                # 不會顯示錯誤訊息並且繼續執行。

    這個範例示範 SilentlyContinue 值的作用。

        PS> $ErrorActionPreference = "SilentlyContinue"
                                # 變更喜好設定的值。
        PS> write-error "Hello, World"
                                # 產生錯誤訊息。
        PS>
                                # 隱藏錯誤訊息。
        PS> write-error "Hello, World" -erroraction:continue
                                # 使用值為 "Continue" 的 
                                  ErrorAction 參數。
        write-error "Hello, World" -erroraction:continue : Hello, World 
                                # 顯示錯誤訊息且繼續執行。

       
    這個範例示範真實錯誤的作用。在這個案例中,命令取得 nofile.txt 這個並不存在
    的檔案。該範例也會使用 ErrorAction 一般參數覆寫喜好設定。

        PS> $erroractionpreference
        SilentlyContinue	# 顯示喜好設定的值。

        PS> get-childitem -path nofile.txt
        PS>			# 隱藏錯誤訊息。

        PS> $ErrorActionPreference = "Continue"
                                # 將值變更為 Continue。

        PS> get-childitem -path nofile.txt
        Get-ChildItem:找不到 'C:\nofile.txt' 路徑,因為它不存在。
        位於第 1 行,第 4 個字元
        + get-childitem <<<< nofile.txt

        PS> get-childitem -path nofile.txt -erroraction SilentlyContinue
                                # 使用 ErrorAction 參數 
                                # 隱藏錯誤訊息。
  
        PS> $ErrorActionPreference = "Inquire"
                                # 將值變更為 Inquire。
        PS> get-childitem -path nofile.txt

        確認
        找不到 'C:\nofile.txt' 路徑,因為它不存在。
        [Y] 是 [A] 全部皆是 [H] 停止命令 [S] 暫停 [?] 說明 (預設值為 "Y"):y
        Get-ChildItem:找不到 'C:\nofile.txt' 路徑,因為它不存在。
        位於第 1 行,第 4 個字元
        + get-childitem <<<< nofile.txt

        PS> $ErrorActionPreference = "Continue"
                                # 將值變更為 Continue。
        PS> Get-Childitem nofile.txt -erroraction "Inquire"
                                # 使用 ErrorAction 一般參數覆寫喜好設定值。

        確認
        找不到 'C:\nofile.txt' 路徑,因為它不存在。[Y] 是  [A] 全部皆是 
        [H] 停止命令 [S] 暫停 [?] 說明 (預設值為 "Y"):


$ErrorView
----------
        決定 Windows PowerShell 中錯誤訊息的顯示格式。

        有效值包括:
	    NormalView:   為大多數使用者所設計的詳細檢視,內容包含錯誤描述、
            (預設值)       錯誤中所包含之物件的名稱,以及指向命令中造成讓錯
                           誤之文字的箭號 (<<<<)。


     	    CategoryView: 為實際執行環境所設計之簡化、結構性的檢視。
                           格式為:
                           {Category}:({TargetName}:{TargetType}):[{Activity}],
                                       {Reason}

        如需 CategoryView 中欄位的詳細資訊,請參閱 Windows PowerShell SDK 中的
       「ErrorCategoryInfo 類別」。
        
    範例

    這些範例示範 ErrorView 值的作用。

    這個範例示範錯誤在 $ErrorView 值設為 NormalView 時的顯示方式。在這個案例
    中,Get-ChildItem 命令用於尋找並不存在的檔案。

        PS> $ErrorView			# 驗證值。
        NormalView

        PS> get-childitem nofile.txt	# 尋找不存在的檔案。
        Get-ChildItem:找不到 'C:\nofile.txt' 路徑,因為它不存在。
        位於第 1 行,第 14 個字元
        + get-childitem <<<< nofile.txt

    這個範例示範同一錯誤在 $ErrorView 值設為 CategoryView 時的顯示方式。

        PS> $ErrorView = "CategoryView"	# 變更為 CategoryView

        PS> get-childitem nofile.txt
        ObjectNotFound: (C:\nofile.txt:String) [Get-ChildItem], 
                         ItemNotFoundException

 
   這個範例示範 ErrorView 的值只會影響錯誤顯示,並不會變更錯誤物件 (儲存於
   $error 自動變數中) 的結構。如需 $error 自動變數的詳細資訊,
   請參閱 about_automatic_variables。

   這個命令使用錯誤陣列 (元素 0) 中與最近錯誤關聯的 ErrorRecord 物件,並且以清
   單顯示錯誤物件的所有屬性。
           
        PS> $error[0] | format-list -property * -force

        例外狀況 :  System.Management.Automation.ItemNotFoundException: 找不
                     到 'C:\nofile.txt' 路徑,因為它不存在。
                     位於 System.Management.Automation.SessionStateInternal.
                     GetChildItems (String path, Boolean recurse, 
                     CmdletProviderContext context) 
                     位於 System.Management.Automation.
                     ChildItemCmdletProviderIntrinsics.Get (String path, 
                     Boolean recurse, CmdletProviderContext context) 
                     位於 Microsoft.PowerShell.Commands.GetChildItemCommand.
                     ProcessRecord()
        TargetObject          : C:\nofile.txt
        CategoryInfo          : ObjectNotFound: (C:\nofile.txt:String) 
                                [Get-ChildItem], ItemNotFoundException
        FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.
                                GetChildItemCommand
        ErrorDetails          :
        InvocationInfo        : System.Management.Automation.InvocationInfo



$FormatEnumerationLimit
-----------------------
        決定每一個顯示中要包含的列舉項目數量。這個變數不會影響基礎物件,作用只
        是顯示而已。
        當 $FormatEnumerationLimit 的值小於列舉項目的數量時,Windows PowerShell
        會加入一個省略符號 (...),表示其他尚未顯示的項目。

        有效值:Integers (Int32)
        預設值:4

    範例

        這個範例示範如何使用 $FormatEnumerationLimit 變數改善列舉項目的顯示。

        本範例中的命令會產生列出所有於電腦上執行之服務的清單,以兩個群組顯示,
        分別為執行中的服務和已停止的服務。範例使用 Get-Service 命令取得所有服
        務,然後透過管線將結果傳送給 Group-Object Cmdlet,該 Cmdlet 會依服務狀
        態將結果分群。

        產生的顯示為一份表格,其中 [名稱] 欄位列出狀態而 [群組] 欄位列出具有該
        狀態的處理序 (若要變更欄位標籤,請使用雜湊表。如需詳細資訊,請使用
        "get-help format-table -examples" 中的範例)。

        [群組] 欄位中,針對每一個狀態最多會列出 4 項服務。若要增加列出項目的數
        量,請將 $FormatEnumerationLimit 的值增加到 1000。

        在產生的顯示中,[群組] 欄位中的清單目前設有命令列長度限制。在本範例的
        最後一個命令中,使用 Format-Table 的 Wrap 參數顯示每一個 [狀態] 群組中
        的所有處理序。
         

        PS> $formatenumerationlimit	    # 尋找目前的值
        4
        
        PS> get-service | group-object -property status<ch='32' Tm='11'>
                                            # 列出按群組分類的所有服務

        計數  名稱              群組
        ----- ----              -----
           60 執行中            {AdtAgent, ALG, Ati HotKey Poller, AudioSrv...}
           41 已停止            {Alerter, AppMgmt, aspnet_state, ATI Smart...}

                                            # 清單在 4 個項目之後即會截斷。


        PS> $formatenumerationlimit = 1000
                                            # 將上限增加到 1000。
        
        PS> get-service | group-object -property status<ch='32' Tm='11'>
                                            # 重複命令。

        計數  名稱              群組
        ----- ----              -----
           60 執行中            {AdtAgent, ALG, Ati HotKey Poller, AudioSrv, 
				 BITS, CcmExec...
           41 已停止            {Alerter, AppMgmt, aspnet_state, ATI Smart, 
                                 Browser, CiSvc...


        PS> get-service | group-object -property status | format-table -wrap
                                            # 加入 Wrap 參數。

        計數  名稱              群組
        ----- ----              -----
           60 執行中            {AdtAgent, ALG, Ati HotKey Poller, AudioSrv, 
                                 BITS, CcmExec, Client for NFS, CryptSvc,
                                 DcomLaunch, Dhcp, dmserver, Dnscache, ERSvc,
                                 Eventlog, EventSystem, FwcAgent, helpsvc,
                                 HidServ, IISADMIN, InoRPC, InoRT, InoTask,
                                 lanmanserver,lanmanworkstation, LmHosts, MDM,
                                 Netlogon, Netman, Nla, NtLmSsp, PlugPlay,
                                 PolicyAgent,  ProtectedStorage, RasMan,
                                 RemoteRegistry, RpcSs, SamSs, Schedule,
                                 seclogon, SENS, SharedAccess, ShellHWDetection, 
                                 SMT PSVC, Spooler, srservice, SSDPSRV, stisvc,
                                 TapiSrv, TermService, Themes, TrkWks, UMWdf,
				 W32Time, W3SVC, WebClient, winmgmt, wscsvc, 
                                 wuauserv, WZCSVC, zzInterix}

           41 已停止             {Alerter, AppMgmt, aspnet_state, ATI Smart,
                                  Browser, CiSvc, ClipSrv, 
                                  clr_optimization_v2.0.50727_32, COMSysApp,
                                  CronService, dmadmin, 
                                  FastUserSwitchingCompatibility, HTTPFilter,
                                  ImapiService, Mapsvc, Messenger, mnmsrvc, 
                                  MSDTC, MSIServer, msvsmon80, NetDDE,
                                  NetDDEdsdm, NtmsSvc, NVSvc, ose, RasAuto,
                                  RDSessMgr, RemoteAccess, RpcLocator, RSVP,
                                  SCardSvr, SwPrv, SysmonLog, TlntSvr, upnphost,
                                  UPS, VSS, WmdmPmSN, Wmi, WmiApSrv, xmlprov}


$Log*Event
----------
        Log*Event 喜好設定變數決定哪些事件類型會寫入 [事件檢視器] 中的 
        Windows PowerShell 事件記錄檔。根據預設,只會登錄引擎和提供者事件,但是
        您可以使用 Log*Event 喜好設定變數自訂記錄,例如記錄命令相關的事件。

        Log*Event 喜好設定變數如下:

            $LogCommandHealthEvent:記錄命令初始化和處理中的事件和例外狀況。預
                設值 = $false (未記錄)。

            $LogCommandLifecycleEvent:
                記錄命令管線的開始與結束和命令搜索中的安全性例外狀況。
                預設值 = $false (未記錄)。

            $LogEngineHealthEvent:記錄工作階段的錯誤和失敗。
                預設值 = $true (已記錄)。

            $LogEngineLifecycleEvent:記錄工作階段的開頭和結尾。 
                預設值 = $true (已記錄)。

            $LogProviderHealthEvent:記錄提供者錯誤,例如讀取和寫入錯誤、查詢
                錯誤與呼叫錯誤。預設值 = $true (已記錄)。

            $LogProviderLifecycleEvent:記錄 Windows PowerShell 提供者的新增和
                移除。預設值 = $true (已記錄)。(如需 Windows PowerShell 提供者
                的相關資訊,請輸入:"get-help about_provider"。


        若要啟用 Log*Event,請輸入值為 $true 的變數,例如:

            $LogCommandLifeCycleEvent

            <Bu-> 或-

            $LogCommandLifeCycleEvent = $true


        若要停用任一事件類別,請輸入值為 $false 的變數,例如:

            $LogCommandLifeCycleEvent = $false

        所啟用的事件只在目前的 Windows PowerShell 主控台中有效。若要將設定套用
        於所有主控台,請將變數儲存在您的 Windows PowerShell 設定檔。


$MaximumAliasCount
------------------
        決定一個 Windows PowerShell 工作階段中所允許的別名數量。預設值 4096 應
        該適用於大多數的使用者,不過您仍然可以視需要調整這個值。

        有效值:1024 - 32768 (Int32)
        預設值:4096
      
        若要計數系統上的別名數量,請輸入:

		(get-alias).count

$MaximumDriveCount
------------------
        決定任一特定工作階段中所允許的 Windows PowerShell 磁碟機數量。這包含檔
        案系統磁碟機以及 Windows PowerShell 提供者公開且顯示為磁碟機的資料存放
        區,例如 Alias: 與 HKLM: 磁碟機。

        有效值:1024 - 32768 (Int32)
        預設值:4096
      
        若要計數系統上的別名數量,請輸入:

		(get-psdrive).count



$MaximumErrorCount
------------------
        決定儲存於工作階段的錯誤歷程記錄中的錯誤數量。

        有效值:256 - 32768 (Int32)
        預設值:256

        表示每一個保留錯誤的物件會儲存在 $Error 自動變數中。這個變數包含錯誤記
        錄物件的陣列,一個陣列表示一個錯誤。最近的錯誤為陣列中的第一個物件
        ($Error[0])。
      
        若要計算系統上的錯誤,請使用 $Error 陣列的 Count 屬性。請輸入:
		
		$Error.count

        若要顯示特定錯誤,請使用陣列標記法顯示錯誤。例如,若要查看最近的錯誤,
        請輸入:

                $Error[0]

        若要顯示最早的保留錯誤,請輸入:

                $Error[($Error.Count -1]

        若要顯示 ErrorRecord 物件的屬性,請輸入:

                $Error[0] | format-list -property * -force

        在這個命令中,Force 參數覆寫 ErrorRecord 物件的特殊格式並回復慣用格式。

        若要刪除錯誤歷程記錄中的所有錯誤,請使用錯誤陣列的 Clear 方法。

               PS> $Error.count
               17
               PS> $Error.clear()
               PS>
               PS> $Error.count
               0

       若要尋找任一錯誤陣列的所有屬性和方法,請搭配 InputObject 參數使用
       Get-Member Cmdlet。透過管線將物件集合傳送給 Get-Member 時,Get-Member 
       顯示集合中物件的屬性與方法。當您使用 Get-Member 的 InputObject 參數
       時,Get-Member 會顯示集合的屬性與方法。


$MaximumFunctionCount
------------------

        決定任一特定工作階段中所允許的函數數量。

        有效值:1024 - 32768 (Int32)
        預設值:4096

        若要查看工作階段中的函數,請使用 Windows PowerShell 函數提供者公開的
        Windows PowerShell Function: 磁碟機 (如需函數提供者的詳細資訊,
        請輸入 "get-help function")。

        若要列出目前工作階段中的函數,請輸入:

            get-childitem function:

        若要計算目前工作階段中的函數,請輸入:

            (get-childitem function:).count


$MaximumHistoryCount
------------------
        決定儲存於目前工作階段的命令歷程記錄中的命令數量。

        有效值:1 - 32768 (Int32)
        預設值:64

        若要決定儲存於目前命令歷程記錄中的命令數量,請輸入:
 
            (get-history).count

        若要查看儲存於工作階段歷程記錄的命令,請使用 Get-History Cmdlet。如需
        詳細資訊,請輸入 "get-help about_history"。



$MaximumVariableCount
------------------
        決定任一特定工作階段中所允許的變數數量,包括自動變數、偏好設定變數以及
        您於命令和指令碼中建立的變數。

        有效值:1024 - 32768 (Int32)
        預設值:4096

        若要查看工作階段中的變數,請使用 Get-Variable Cmdlet 和 
        Windows PowerShell Variable: 磁碟機與的 Windows PowerShell 變數提供者
        的功能。如需變數提供者的詳細資訊,請輸入 "get-help variable"。

        若要尋找系統上的目前變數,請輸入:

            (get-variable).count



$OFS
----
        輸出欄位分隔符號。指定當陣列轉換為字串時所使用之分隔陣列元素的字元。

        有效值:任何字串。
        預設值:空白

        根據預設,$OFS 變數並不存在,而輸出欄位分隔符號為空格,不過您可以新增
        這個變數並將其設為任何字串。

    範例

    這個範例示範當陣列轉換為字串時,會使用空格分隔值。在這個案例中,整數陣列會
    儲存在變數中,然後該變數會轉型為字串。

       PS> $array = 1,2,3	# 儲存整數陣列。

       PS> [string]$array	# 將陣列轉型為字串。
       1 2 3<ch='32' Tm='30'>   # 空格分隔元素


    若要變更分隔符號,請指派值給 $OFS 變數藉此新增 $OFS 變數。為了能夠正確執
    行,該變數必須命名為 $OFS。

       PS> $OFS = "+"		# 建立 $OFS 並指派 "+"

       PS> [string]$array	# 重複命令
       1+2+3			# 加號分隔元素


    若要復原預設行為,您可以指派空格 (" ") 給 $OFS 值或刪除變數。這個命令會刪
    除變數然後確認分隔符號為空格。
        
       PS> Remove-Variable OFS	# 刪除 $OFS
       PS>

       PS> [string]$array	# 重複命令
       1 2 3			# 空格分隔元素

$OutputEncoding
---------------
       決定 Windows PowerShell 傳送文字給其他應用程式時所使用的字元編碼方式。例
       如,如果應用程式傳回 Unicode 字串給 Windows PowerShell,可能需要變更值才
       能正確傳送字元。

        有效值:衍生自編碼類別的物件,例如 ASCIIEncoding、
                SBCSCodePageEncoding、UTF7Encoding、UTF8Encoding、
                UTF32Encoding 與 UnicodeEncoding。

        預設值:ASCIIEncoding 物件 (System.Text.ASCIIEncoding)

    範例

       這個範例示範在已當地語系化為使用 Unicode 字元 (如中文) 的電腦上,如何讓
       Windows 中的 FINDSTR 命令也能在 Windows PowerShell 中正確執行。

       第一個命令尋找 $OutputEncoding 的值,因為該值為編碼物件,所以只會顯示它
       的 EncodingName 屬性。
         
          PS> $OutputEncoding.EncodingName # 尋找目前的值
          US-ASCII

       在這個範例中,FINDSTR 命令用於搜尋出現在 Test.txt 檔案中的兩個中文字元。
       當這個 FINDSTR 命令於 Windows 命令提示 (Cmd.exe) 中執行時,FINDSTR 會搜
       尋文字檔的字元。然而,當您在 Windows PowerShell 中執行相同的 FINDSTR 命
       令時,則找不到字元,因為 Windows PowerShell 將這些字元傳送到 ASCII 文字
       中的 FINDSTR,而不是 Unicode 文字。

          PS> findstr <Unicode-characters> # 使用 findstr 進行搜尋。
          PS>				   # 找不到。

        
       為了讓命令可以在 Windows PowerShell 中順利執行,請將 $OutputEncoding 的
       值設為主控台中 OutputEncoding 屬性的值,該值會以為 Windows 所選的區域設
       定為根據。因為 OutputEncoding 是主控台的靜態屬性,所以請在命令中使用雙
       冒號 (::)。

          PS> $OutputEncoding = [console]::outputencoding
          PS>				   # 將值設為主控台的 OutputEncoding 
                                             屬性。
          PS> $OutputEncoding.EncodingName
          OEM United States
                                           # 尋找產生的值。
     
       這項變更的結果會是 FINDSTR 命令尋找字元。

          PS> findstr <Unicode-characters>
          test.txt:	    <Unicode-characters>

				        # 使用 findstr 進行搜尋。它會尋找文字
                                          檔中的字元。



$ProgressPreference
-------------------
	決定 Windows PowerShell 要如何回應指令碼、Cmdlet 或提供者產生的進度更
        新,例如 Write-Progress Cmdlet 產生的進度列。Write-Progress Cmdlet 建
        立描繪命令狀態的進度列。

        有效值包括:
	    Stop:		不顯示進度列。但是會顯示錯誤訊息並且停止執行。

	    Inquire:		不顯示進度列。提示要求繼續執行的權限。如果回覆
                                Y 或 A,則會顯示進度列。

            Continue:   	顯示進度列並且繼續執行。
             (預設)

            SilentlyContinue:  執行命令,但不顯示進度列。


$PSEmailServer
--------------
       指定用於傳送電子郵件訊息的預設電子郵件伺服器。這個喜好設定變數是由傳送
       電子郵件的 Cmdlet (例如 Send-MailMessage Cmdlet) 所使用。


$PSSessionApplicationName
---------------------------

       指定使用 WS-Management 技術之遠端命令的預設應用程式名稱。

       系統預設應用程式名稱為 WSMAN,但是您可以使用這個喜好設定變數變更該預設
       值。

       應用程式名稱為連線 URI 中的最後一個節點。例如,下列範例 URI 中的應用程
       式名稱為 WSMAN。

           http://Server01:8080/WSMAN


       當遠端命令沒有指定連線 URI 或應用程式名稱時,便會使用預設應用程式名稱。

       WinRM 服務使用應用程式名稱選取要服務連線要求的接聽程式。這個參數的值必
       須符合遠端電腦上接聽程式的 URLPrefix 屬性值。

       若要覆寫系統預設值與這個變數的值並且選取特定工作階段的不同應用程式名
       稱,請使用 New-PSSession、Enter-PSSession 或 Invoke-Command Cmdlet 的
       ConnectionURI 或 ApplicationName 參數。

       這個喜好設定變數會在本機電腦上設定,但是該變數會指定遠端電腦上的接聽程
       式。如果遠端電腦上沒有您所指定的應用程式名稱,則建立工作階段的命令會失
       敗。



$PSSessionConfigurationName
---------------------------

       指定做為目前工作階段中所建立之 PSSessions 的預設工作階段設定。

       這個喜好設定變數會在本機電腦上設定,但是該變數會指定位於遠端電腦上的工
       作階段設定。

       $PSSessionConfigurationName 變數的值為完整的 URI。

       預設值:

         https://schemas.microsoft.com/powershell/microsoft.powershell

       表示遠端電腦上的 Microsoft.PowerShell 工作階段設定。

       如果只有指定設定名稱,則會在前面加上下列結構描述 URI:

           https://schemas.microsoft.com/powershell/

             
       您可以使用 New-PSSession、Enter-PSSession 或 Invoke-Command Cmdlet 的 
       ConfigurationName,藉此覆寫預設值並且選取該特定工作階段的不同工作階段設
       定。

       您可以隨時變更這個變數的值。變更變數值的時候,請務必記得遠端電腦上一定
       要有您選取工作階段設定。否則,建立使用該工作階段設定之工作階段的命令會
       失敗。

       這個喜好設定變數並不會決定當遠端使用者建立連線到本電腦的工作階段時,要
       使用哪些本機工作階段設定。但是,您可以使用本機工作階段設定的權限,決定
       哪些使用者可以使用這些設定。


$PSSessionOption
----------------
        建立遠端工作階段中進階使用者選項的預設值。這些選項的喜好設定會覆寫工作
        階段選項的系統預設值。

        您也可以在建立工作階段的 Cmdlet (例如 New-PSSession、Enter-PSSession 與
        Invoke-Command ) 中使用 SessionOption 參數,設定特定遠端工作階段的自訂
        選項。SessionOption 參數值的優先順序高於系統預設值以及此變數中所設定的
        預設值。

        $PSSessionOption 變數包含 PSSessionOption 物件
        (System.Management.Automation.Remoting.PSSessionObject)。
        物件的每一個屬性表示工作階段選項。例如,NoCompression 屬性會關閉工作階
        段期間的資料壓縮功能。

        若要建立 $PSSessionOption 喜好設定變數,請使用 New-PSSessionOption
        Cmdlet。
        將輸出儲存於名為 $PSSessionOption 的變數中。

        例如,

            $PSSessionOption = New-PSSessionOption -NoCompression

        若要在每一個 Windows PowerShell 工作階段中使用 $PSSessionOption 喜好設
        定變數,請在您的 Windows PowerShell 設定檔中加入會建立 $PSSessionOption
        變數的 New-PSSessionOption 命令。

        如需 New-PSSessionOption Cmdlet 的詳細資訊,請參閱 New-PSSessionOption
        的說明主題。如需遠端命令和工作階段的詳細資訊,請參閱 about_Remote 以及 
        about_PSSessions。如需使用設定檔的詳細資訊,請參閱 about_Profiles。




$VerbosePreference
------------------
       	決定 Windows PowerShell 如何回應指令碼、Cmdlet 或提供者所產生的詳細
        訊息,例如 Write-Verbose Cmdlet 所產生的訊息。通常,詳細訊息會描述為
        執行命令所執行的動作。
        根據預設,並不會顯示詳細訊息,但是您可以變更 $VerbosePreference 的值,
        改變這個行為。

        您也可以使用 Cmdlet 的 Verbose 一般參數,顯示或隱藏特定命令的詳細訊息。
        如需詳細資訊,請輸入 "get-help about_commonparameters"。


        有效值包括:
	    Stop:	       顯示詳細訊息與錯誤訊息,然後停止執行。

     	    Inquire:	       顯示詳細訊息,然後顯示詢問您是否繼續的提示。

            Continue:	       顯示詳細訊息,然後繼續執行。

            SilentlyContinue: 不顯示詳細訊息。繼續執行。
            (預設值)

    範例

    這些範例示範不同 $VerbosePreference 值的作用以及如何使用 Verbose 一般參數
    覆寫喜好設定值。
    
    這個範例示範 SilentlyContinue 值 (預設) 的作用。

        PS> $VerbosePreference	           # 尋找目前的值。
        SilentlyContinue

        PS> Write-Verbose "詳細訊息測試。"
        PS>		                   # 寫入詳細訊息。
                               		   # 不會顯示訊息。

        PS> Write-Verbose "詳細訊息測試。"-verbose
        VERBOSE:詳細訊息測試。
	                                   # 使用 Verbose 參數。


    這個範例示範 Continue 值的作用。

        PS> $VerbosePreference = "Continue"
                                           # 將值變更為 Continue。
        PS> Write-Verbose "詳細訊息測試。"
                                           # 寫入詳細訊息。
        VERBOSE:詳細訊息測試。		   # 顯示訊息。

        PS> Write-Verbose "詳細訊息測試。"-verbose:$false
                                           # 使用值為 $false 的 Verbose 參數。
        PS>	
                                           # 不會顯示訊息。


    這個範例示範 Stop 值的作用。

        PS> $VerbosePreference = "Stop"
                                           # 將值變更為 Stop。
        PS> Write-Verbose "詳細訊息測試。"
                                           # 寫入詳細訊息。
        VERBOSE:詳細訊息測試。
        Write-Verbose:命令執行已停止,因為殼層變數 "VerbosePreference" 設定
        為 Stop。
        位於第 1 行,第 14 個字元
        + Write-Verbose <<<< "詳細訊息測試。"

        PS> Write-Verbose "詳細訊息測試。"-verbose:$false
                                           # 使用值為 $false 的 Verbose 參數
                                           # 不會顯示訊息。

    這個範例示範 Inquire 值的作用。

       PS> $VerbosePreference = "Inquire"
                                         # 將值變更為 Inquire。
       PS> Write-Verbose "詳細訊息測試。"
       VERBOSE:詳細訊息測試。
                                         # 寫入詳細訊息。
       確認
       繼續進行這項作業?
       [Y] 是 [A] 全部皆是 [H] 停止命令 [S] 暫停 [?] 說明 (預設值為 "Y"):y

       PS> Write-Verbose "詳細訊息測試。"-verbose:$false
                                        # 使用 Verbose 參數。
       PS>
                                        # 不會顯示訊息。


    
$WarningPreference
------------------
        決定 Windows PowerShell 如何回應指令碼、Cmdlet 或提供者所產生的警告訊
        息,例如 Write-Warning Cmdlet 所產生的訊息。

        根據預設,並不會顯示警告訊息且會繼續執行,但是您可以變更 
        $WarningPreference 的值,改變這個行為。

        您也可以使用 Cmdlet 的 WarningAction 一般參數,決定 Windows PowerShell
        如何回應來自特定命令的警告。如需詳細資訊,請輸入 
        "get-help about_commonparameters"。


        有效值包括:
	    Stop:	顯示警告訊息與錯誤訊息,然後停止執行。

	    Inquire:	顯示警告訊息,然後顯示要求繼續執行之權限的提示。

            Continue:	顯示警告訊息,然後繼續執行。
	    (預設)
            SilentlyContinue:不顯示警告訊息。繼續執行。

    範例

    這些範例示範不同 $WarningPreference 值的作用以及如何使用 WarningAction 一
    般參數覆寫喜好設定值。

    
    這個範例示範 Continue 值 (預設) 的作用。

            PS> $WarningPreference 	# 尋找目前的值。
            Continue

                                 	# 寫入警告訊息。
            PS> Write-Warning "這個動作可以刪除資料。"
            警告:這個動作可以刪除資料。
	
                                        # 使用 WarningAction 參數隱藏
                                        # 這個命令的警告

            PS> Write-Warning "這個動作可以刪除資料。"-warningaction silentlycontinue



   這個範例示範 SilentlyContinue 值的作用。

            PS> $WarningPreference = "SilentlyContinue"
                                        # 將值變更為 SilentlyContinue。
 
            PS> Write-Warning "這個動作可以刪除資料。"
            PS>				# 寫入警告訊息。

       
            PS> Write-Warning "這個動作可以刪除資料。"-warningaction stop
                                        # 使用 WarningAction 參數,於這個命
                                        # 令產生「警告:這個動作可以刪除資料。」
                                        # 時停止處理。
            Write-Warning:命令執行已停止,因為殼層變數 "WarningPreference" 設
            定為 Stop。
            位於第 1 行,第 14 個字元
            + Write-Warning <<<< "這個動作可以刪除資料。"-warningaction stop


    這個範例示範 Inquire 值的作用。

           PS> $WarningPreference = "Inquire"<ch='32' Tm='20'>
                                        # 將值變更為 Inquire。
           PS> Write-Warning "這個動作可以刪除資料。"
                                        # 寫入警告訊息。
           警告:這個動作可以刪除資料。

           確認
           繼續進行這項作業?
           [Y] 是 [A] 全部皆是 [H] 停止命令 [S] 暫停 [?] 說明 (預設值為 "Y"):y

           PS> Write-Warning "這個動作可以刪除資料。"
               -warningaction silentlycontinue
           PS>                          # 使用 WarningAction 參數變更
                                        # 對目前命令警告的回應。



     這個範例示範 Stop 值的作用。

           PS> $WarningPreference = "Stop"
                                        # 將值變更為 Stop。

           PS> Write-Warning "這個動作可以刪除資料。"
                                        # 寫入警告訊息。
           警告:這個動作可以刪除資料。
           Write-Warning:命令執行已停止,因為殼層變數 "WarningPreference" 設
           定為 Stop。
           位於第 1 行,第 14 個字元
           + Write-Warning <<<< "這個動作可以刪除資料。"


           PS> Write-Warning "這個動作可以刪除資料。"-warningaction inquire
           警告:這個動作可以刪除資料。

           確認
           繼續進行這項作業?
           [Y] 是 [A] 全部皆是 [H] 停止命令 [S] 暫停 [?] 說明 (預設值為 "Y"):y
                                       # 使用 WarningAction 參數變更對目前
                                       # 命令警告的回應。


$WhatIfPreference
------------------
       	決定是否會為每一個其所支援的命令自動啟動 WhatIf。啟動 WhatIf 時,該
        Cmdlet 會回報命令的預期作用,但是不會執行命令。

        有效值包括:
	    0:			不會自動啟動 WhatIf。若要手動啟動,
            (預設值)            請使用命令的 WhatIf 參數。
            

            1:                  會在其所支援的任一命令上自動啟動 WhatIf。
                                使用者可以使用值設為 False 的 WhatIf 命令
                                 (WhatIf:$false),手動停用。

    詳細說明

        Cmdlet 支援 WhatIf 時,該 Cmdlet 會回報命令的預期作用,但是不會執行命
        令。例如,Windows PowerShell 回應 Remove-Item 命令時,會回報其將要刪除
        的內容,而不會刪除 test.txt 檔案。而後續的 Get-Childitem 命令會確認檔
        案並未刪除。

              PS> remove-item test.txt
              What if:在目標 "Item: C:\test.txt" 上執行 "Remove-Item" 作業
              PS> get-childitem test.txt

              目錄:Microsoft.PowerShell.Core\FileSystem::C:


              模式                LastWriteTime     長度      名稱
              ----                -------------     ------     ----
              -a---         7/29/2006   7:15 PM         84     test.txt



    範例

    這些範例示範不同 $WhatIfPreference 值的作用。這些範例也會示範如何使用.
    WhatIf Cmdlet 參數覆寫特定命令的喜好設定值。
    
    這個範例示範 0 (未啟用) 值的作用。

             PS> $whatifpreference
             0                         # 檢查目前的值。

             PS> get-childitem test.txt | format-list FullName
             FullName : C:\test.txt
                                       # 確認檔案確實存在。

             PS> remove-item test.txt
             PS>	               # 刪除檔案。

             PS> get-childitem test.txt | format-list -property FullName
                                       # 確認檔案已刪除。

             Get-ChildItem : 找不到 'C:\test.txt' 路徑,因為它不存在。
             位於第 1 行,第 14 個字元
             + get-childitem <<<< test.txt | format-list fullname


     這個範例示範當 $WhatIfPreference 的值設為 0 時,使用 WhatIf 參數的作用。

             PS> get-childitem test2.txt | format-list -property FullName
             FullName : C:\test2.txt
                                      # 確認檔案確實存在。

             PS> remove-item test2.txt -whatif
             What if:在 "C:\test2.txt" 目標上執行 "Remove File" 作業。
                                      # 使用 WhatIf 參數。

             PS> get-childitem test2.txt | format-list -property FullName
             FullName : C:\test2.txt
                                      # 確認檔案並未刪除。
    這個範例示範值為 1 (已啟用 WhatIf) 時的作用。當您使用 Remove-Item 刪除任一
    Cmdlet 時,Remove-Item 會顯示待刪除之檔案的路徑,但並不會刪除檔案。

             PS> $whatifpreference = 1
             PS> $whatifpreference
             1                         # 變更值。
                                      
             PS> remove-item test.txt
             What if:在 "C:\test.txt" 目標上執行 "Remove File" 作業。
                                      # 嘗試刪除檔案。

             PS> get-childitem test.txt | format-list FullName
             FullName : C:\test.txt
                                      # 確認檔案確實存在。

     這個範例示範當 $WhatIfPreference 的值為 1 時如何刪除檔案。範例會使用值為
     $false 的 WhatIf 參數。

             PS> remove-item test.txt -whatif:$false
                                      # 使用值為 $false 的 WhatIf 參數。

     這個範例示範有些 Cmdlet 能夠支援 WhatIf 行為,而有些則不行。在這個範例中,
     $WhatIfPreference 的值為 1 (已啟用),執行了不支援 WhatIf 的 Get-Process 
     命令,但是 Stop-Process 命令執行 WhatIf 行為。
     您可以使用值為 $false 的 WhatIf 參數,覆寫 Stop-Process 命令的 WhatIf 行
     為。

            PS> $whatifpreference = 1
                                     # 將值變更為 1。
                                                      
            PS> get-process winword
                                     # Get-Process 命令完成。

          Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName
          -------  ------    -----      ----- -----   ------     -- -----------
              234       8     6324      15060   154     0.36   2312 WINWORD


           PS> stop-process -name winword
           What if:在目標 "WINWORD (2312)" 上執行 "Stop-Process" 作業。
                                     # Stop-Process 命令使用 WhatIf。

           PS> stop-process -name winword -whatif:$false
           PS>			     # WhatIf:$false 覆寫喜好設定。
           
           PS> get-process winword
           Get-Process:找不到名稱為 'winword' 的處理序。請確認該處理序名稱,
           然後再呼叫一次 Cmdlet。
           位於第 1 行,第 12 個字元
           + get-process <<<< winword
                                     # 確認處理序已停止。





請參閱
    about_Automatic_Variables
    about_CommonParameters
    about_Environment_Variables
    about_Profiles
    about_Remote
    about_Scopes
    about_Variables




目錄