主题 首选项变量 简短说明 用于自定义 Windows PowerShell 行为的变量 详细说明 Windows PowerShell 包含一组可用于自定义其行为的变量。这些“首选项变量” 的作用与基于 GUI 的系统中选项的作用相似。 首选项变量影响 Windows PowerShell 操作环境以及在该环境中运行的所有命令。 很多情况下,cmdlet 带有的参数可用于替代特定命令的首选行为。 下表列出了首选项变量及其默认值。 Variable 默认值 -------- ------------- $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。 Variable -------- 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 操作的风险(High、 Medium、Low 或 None)时,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 Confirm Are you sure you want to perform this action? Performing operation "Remove File" on Target "C:\pref2.txt". [Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Y"): 风险估计是该 cmdlet 的称为“ConfirmImpact”的部分。该项不可更改。 可能对系统产生风险的 cmdlet 有一个 Confirm 参数,可以使用该参数来请求或阻止对特定命令的确认。 由于大多数 cmdlet 使用默认风险值 Medium,并且 $ConfirmPreference 的默认值为 High,因此自动提 示确认极少发生。但是,可通过将 $ConfirmPreference 值更改为 Medium 或 Low 来激活自动提示确认。 示例 下面的示例演示 $ConfirmPreference 默认值的作用。High 值只要求确认高风险 cmdlet 操作。大多数操 作是中等风险,因此它们不会自动提示确认(但可以使用 cmdlet 的 Confirm 参数来请求确认某个特定命令)。 PS> $confirmpreference #Get the current value of the High variable PS> remove-item temp1.txt #Delete a file PS> #Deleted without confirmation PS> remove-item temp2.txt -confirm #Use the Confirm parameter Confirm Are you sure you want to perform this action? Performing operation "Remove File" on Target "C:\temp2.txt". [Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Y"): 下面的示例演示将 $ConfirmPreference 的值更改为 Medium 的作用。由于大多数 cmdlet 操作都是中 等风险,因此它们自动提示确认,并且您必须使用值为 $false 的 Confirm 参数才能阻止某个特定 命令的确认提示。 PS> $confirmpreference = "Medium" #Change the value of $ConfirmPreference PS> remove-item temp2.txt #Deleting a file triggers confirmation Confirm Are you sure you want to perform this action? Performing operation "Remove File" on Target "C:\temp2.txt". [Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Y"): PS> remove-item temp3.txt -confirm:$false #Use Confirm parameter to suppress confirmation 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 # Get the current value of SilentlyContinue $DebugPreference PS> write-debug "Hello, World" PS> # The debug message is not displayed. PS> write-debug "Hello, World" -Debug # Use the Debug parameter DEBUG: Hello, World # The debug message is is requested. displayed and confirmation Confirm Continue with this operation? [Y] Yes [A] Yes to All [H] Halt Command [S] Suspend [?] Help (default is "Y"): 下面的示例演示“Continue”值的作用。最后一条命令使用值为 $false 的 Debug 参数阻止单个命令的消息。 PS> $debugpreference = "Continue" # Change the value to "Continue" PS> write-debug "Hello, World" DEBUG: Hello, World # The debug message is displayed PS> and processing continues. PS> write-debug "Hello, World" -Debug:$false # Use the Debug parameter with false. PS> # The debug message is not displayed. 下面的示例演示“Stop”值的作用。最后一条命令使用值为 $false 的 Debug 参数阻止单个命令的消息。 PS> $debugpreference = "Stop" #Change the value to "Stop" PS> write-debug "Hello, World" DEBUG: Hello, World Write-Debug : Command execution stopped because the shell variable "DebugPreference" is set to Stop. At line:1 char:12 + write-debug <<<< "Hello, World" PS> write-debug "Hello, World" -Debug:$false # Use the Debug parameter with $false PS> # The debug message is not displayed and processing is not stopped. 下面的示例演示“Inquire”值的作用。最后一条命令使用值为 $false 的 Debug 参数阻止单个命令的消息。 PS> $debugpreference = "Inquire" PS> write-debug "Hello, World" DEBUG: Hello, World Confirm Continue with this operation? [Y] Yes [A] Yes to All [H] Halt Command [S] Suspend [?] Help (default is "Y"): PS> write-debug "Hello, World" -Debug:$false # Use the Debug parameter with $false PS> # The debug message is not displayed and processing continues without interruption. $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 # Display the value of the preference. PS> write-error "Hello, World" # Generate a non-terminating error. write-error "Hello, World" : Hello, World # The error message is displayed and execution continues. PS> write-error "Hello, World" -ErrorAction:SilentlyContinue # Use the ErrorAction parameter with a value of "SilentlyContinue". PS> # The error message is not displayed and execution continues. 下面的示例演示 SilentlyContinue 值的作用。 PS> $ErrorActionPreference = "SilentlyContinue" # Change the value of the preference. PS> write-error "Hello, World" # Generate an error message. PS> # Error message is suppressed. PS> write-error "Hello, World" -erroraction:continue # Use the ErrorAction parameter with a value of "Continue". write-error "Hello, World" -erroraction:continue : Hello, World # The error message is displayed and execution continues. 下面的示例演示真实错误生成的结果。此例中,命令获取一个不存在的文件 nofile.txt。 该示例还使用 ErrorAction 通用参数来替代首选项。 PS> $erroractionpreference SilentlyContinue # Display the value of the preference. PS> get-childitem -path nofile.txt PS> # Error message is suppressed. PS> $ErrorActionPreference = "Continue" # Change the value to Continue. PS> get-childitem -path nofile.txt Get-ChildItem : Cannot find path 'C:\nofile.txt' because it does not exist. At line:1 char:4 + get-childitem <<<< nofile.txt PS> get-childitem -path nofile.txt -erroraction SilentlyContinue # Use the ErrorAction parameter PS> # Error message is suppressed. PS> $ErrorActionPreference = "Inquire" # Change the value to Inquire. PS> get-childitem -path nofile.txt Confirm Cannot find path 'C:\nofile.txt' because it does not exist. [Y] Yes [A] Yes to All [H] Halt Command [S] Suspend [?] Help (default is "Y"): y Get-ChildItem : Cannot find path 'C:\nofile.txt' because it does not exist. At line:1 char:4 + get-childitem <<<< nofile.txt PS> $ErrorActionPreference = "Continue" # Change the value to Continue. PS> Get-Childitem nofile.txt -erroraction "Inquire" # Use the ErrorAction parameter to override the preference value. Confirm Cannot find path 'C:\nofile.txt' because it does not exist. [Y] Yes [A] Yes to All [H] Halt Command [S] Suspend [?] Help (default is "Y"): $ErrorView ---------- 确定 Windows PowerShell 中错误消息的显示格式。 有效值: NormalView: 面向大多数用户的详细视图。由以下内容组成:错误描述、 (默认) 错误中所涉及对象的名称,以及指向命令中导致错误的词的箭头 (<<<<)。 CategoryView: 针对生产环境设计的简明结构化视图。格式为:{Category}: ({TargetName}:{TargetType}):[{Activity}], {Reason} 有关 CategoryView 中字段的详细信息,请参阅 Windows PowerShell SDK 中的 “ErrorCategoryInfo 类”。 示例 下面的几个示例演示 ErrorView 值的作用。 下面的示例演示当 $ErrorView 值为 NormalView 时错误是如何显示的。此例中,Get-ChildItem 命令用于 查找不存在的文件。 PS> $ErrorView # Verify the value. NormalView PS> get-childitem nofile.txt # Find a non-existent file. Get-ChildItem : Cannot find path 'C:\nofile.txt' because it does not exist. At line:1 char:14 + get-childitem <<<< nofile.txt 下面的示例演示当 $ErrorView 的值为 CategoryView 时,如何显示与上面相同的错误。 PS> $ErrorView = "CategoryView" # Change the value to 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 Exception : System.Management.Automation.ItemNotFoundException: Cannot find path 'C:\nofile.txt' because it does not exist. at System.Management.Automation.SessionStateInternal.GetChildItems(String path, Boolean recurse, CmdletProviderContext context) at System.Management.Automation.ChildItemCmdletProviderIntrinsics.Get(String path, Boolean recurse, CmdletProviderContext context) at 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 添加一个省略号 (...) 来指示还有其他项未显示。 有效值:整数 (Int32) 默认值:4 示例 下面的示例演示如何使用 $FormatEnumerationLimit 变量来改善枚举项的显示。 此示例中的命令生成一个表,该表分两组列出计算机上运行的所有服务;一组表示正在运行的服务,另一组表 示已停止的服务。此例中使用 Get-Service 命令获取所有服务,然后将结果通过管道发送给 Group-Object cmdlet,后者按服务状态将结果分组。 得到的显示结果是一个表,表中在 Name 列中列出状态,在 Group 列中列出处于该状态的进程。(若要更改 列标签,请使用哈希表。有关详细信息,请参阅"get-help format-table - 示例"中的示例。) Group 列中对应每种状态最多列出 4 个服务。为了增加列出的项数,示例中将 $FormatEnumerationLimit 的值增加到 1000。 在得到的显示结果中,Group 列中的列表受到行长度的限制。示例的最后一条命令使用 Format-Table 的 Wrap 参数显示每个 Status 组中的所有进程。 PS> $formatenumerationlimit # Find the current value 4 PS> get-service | group-object -property status # List all services grouped by status Count Name Group ----- ---- ----- 60 Running {AdtAgent, ALG, Ati HotKey Poller, AudioSrv...} 41 Stopped {Alerter, AppMgmt, aspnet_state, ATI Smart...} # The list is truncated after 4 items. PS> $formatenumerationlimit = 1000 # Increase the limit to 1000. PS> get-service | group-object -property status # Repeat the command. Count Name Group ----- ---- ----- 60 Running {AdtAgent, ALG, Ati HotKey Poller, AudioSrv, BITS, CcmExec... 41 Stopped {Alerter, AppMgmt, aspnet_state, ATI Smart, Browser, CiSvc... PS> get-service | group-object -property status | format-table -wrap # Add the Wrap parameter. Count Name Group ----- ---- ----- 60 Running {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 Stopped {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 - 或 - $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 Function 提供程序公开的 Windows PowerShell Function: 驱动器。有关 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 Variable 提供程序的功能。有关 Variable 提供程序的信息,请键入"get-help variable"。 若要获取系统上变量的当前数量,请键入: (get-variable).count $OFS ---- 输出字段分隔符。指定在数组转换为字符串时,用来分隔数组元素的字符。 有效值:任何字符串。 默认值:空格 默认情况下,$OFS 变量不存在,并且输出文件分隔符是空格, 但是您可以添加此变量,并将其设置为任何字符串。 示例 下面的示例演示在将数组转换为字符串时使用空格来分隔值。此例中, 一个整数数组存储在变量中,然后该变量被强制转型为字符串。 PS> $array = 1,2,3 # Store an array of integers. PS> [string]$array # Cast the array to a string. 1 2 3 # Spaces separate the elements 若要更改分隔符,请添加 $OFS 变量,方法是为该变量赋值。该变量必须命名为 $OFS 才能起到正确的作用。 PS> $OFS = "+" # Create $OFS and assign a "+" PS> [string]$array # Repeat the command 1+2+3 # Plus signs separate the elements 若要恢复默认行为,可以将空格 (" ") 赋给 $OFS 的值或者删除该变量。 下面的命令删除该变量,然后验证分隔符是否为空格。 PS> Remove-Variable OFS # Delete $OFS PS> PS> [string]$array # Repeat the command 1 2 3 # Spaces separate the elements $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 # Find the current value US-ASCII 在下面的示例中,FINDSTR 命令用于搜索 Test.txt 文件中存在的两个中文字符。当此 FINDSTR 命令在 Windows 命令提示符 (Cmd.exe) 下运行时,FINDSTR 在该文本文件中找到了这两个字符。但是,当在 Windows PowerShell 中运行同样的 FINDSTR 命令时,未找到这两个字符,这是因为 Windows PowerShell 将它们作为 ASCII 文本(而不是 Unicode 文本)发送给 FINDSTR。 PS> findstr <Unicode-characters> # Use findstr to search. PS> # None found. 为了使该命令在 Windows PowerShell 中也能使用,需要将 $OutputEncoding 的值设置为控制台的 OutputEncoding 属性的值,该值基于为 Windows 选择的区域设置。因为 OutputEncoding 是控制台的 静态属性,所以在命令中使用双冒号 (::)。 PS> $OutputEncoding = [console]::outputencoding PS> # Set the value equal to the OutputEncoding property of the console. PS> $OutputEncoding.EncodingName OEM United States # Find the resulting value. 如此更改后,FINDSTR 命令就能找到这两个字符。 PS> findstr <Unicode-characters> test.txt: <Unicode-characters> # Use findstr to search.It find the characters in the text file. $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 --------------------------- 指定用于在当前会话中创建的 PSSession 的默认会话配置。 此首选项变量是在本地计算机上设置的,但是它指定位于远程计算机上的会话配置。 $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 首选项变量,请将创建 $PSSessionOption 变量的 New-PSSessionOption 命令添加到 Windows PowerShell 配置文件中。 有关 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 # Find the current value. SilentlyContinue PS> Write-Verbose "Verbose message test." PS> # Write a verbose message. # Message is not displayed. PS> Write-Verbose "Verbose message test."-verbose VERBOSE: Verbose message test. # Use the Verbose parameter. 下面的示例演示 Continue 值的作用。 PS> $VerbosePreference = "Continue" # Change the value to Continue. PS> Write-Verbose "Verbose message test." # Write a verbose message. VERBOSE: Verbose message test. # Message is displayed. PS> Write-Verbose "Verbose message test." -verbose:$false # Use the Verbose parameter with a value of $false. PS> # Message is not displayed. 下面的示例演示 Stop 值的作用。 PS> $VerbosePreference = "Stop" # Change the value to Stop. PS> Write-Verbose "Verbose message test." # Write a verbose message. VERBOSE: Verbose message test. Write-Verbose : Command execution stopped because the shell variable "VerbosePreference" is set to Stop. At line:1 char:14 + Write-Verbose <<<< "Verbose message test." PS> Write-Verbose "Verbose message test." -verbose:$false # Use the Verbose parameter with a value of $false PS> # Message is not displayed. 下面的示例演示 Inquire 值的作用。 PS> $VerbosePreference = "Inquire" # Change the value to Inquire. PS> Write-Verbose "Verbose message test." VERBOSE: Verbose message test. # Write a verbose message. Confirm Continue with this operation? [Y] Yes [A] Yes to All [H] Halt Command [S] Suspend [?] Help (default is "Y"): y PS> PS> Write-Verbose "Verbose message test." -verbose:$false # Use the Verbose parameter. PS> # Message is not displayed. $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 # Find the current value. Continue # Write a warning message. PS> Write-Warning "This action can delete data." WARNING: This action can delete data. # Use the WarningAction parameter to # suppress the warning for this command PS> Write-Warning "This action can delete data." -warningaction silentlycontinue 下面的示例演示 SilentlyContinue 值的作用。 PS> $WarningPreference = "SilentlyContinue" # Change the value to SilentlyContinue. PS> Write-Warning "This action can delete data." PS> # Write a warning message. PS> Write-Warning "This action can delete data." -warningaction stop # Use the WarningAction parameter to stop # processing when this command generates a # warning. WARNING: This action can delete data. Write-Warning : Command execution stopped because the shell variable "WarningPreference" is set to Stop. At line:1 char:14 + Write-Warning <<<< "This action can delete data." -warningaction stop 下面的示例演示 Inquire 值的作用。 PS> $WarningPreference = "Inquire" # Change the value to Inquire. PS> Write-Warning "This action can delete data." # Write a warning message. WARNING: This action can delete data. Confirm Continue with this operation? [Y] Yes [A] Yes to All [H] Halt Command [S] Suspend [?] Help (default is "Y"): y PS> PS> Write-Warning "This action can delete data." -warningaction silentlycontinue PS> # Use the WarningAction parameter to change the # response to a warning for the current command. 下面的示例演示 Stop 值的作用。 PS> $WarningPreference = "Stop" # Change the value to Stop. PS> Write-Warning "This action can delete data." # Write a warning message. WARNING: This action can delete data. Write-Warning : Command execution stopped because the shell variable "WarningPreference" is set to Stop. At line:1 char:14 + Write-Warning <<<< "This action can delete data." PS> Write-Warning "This action can delete data." -warningaction inquire WARNING: This action can delete data. Confirm Continue with this operation? [Y] Yes [A] Yes to All [H] Halt Command [S] Suspend [?] Help (default is "Y"): # Use the WarningAction parameter to change the # response to a warning for the current command. $WhatIfPreference ------------------ 确定对于支持 WhatIf 的每一条命令是否自动启用 WhatIf。 当启用 WhatIf 时 cmdlet 将报告预期的命令结果,但不会执行命令。 有效值: 0:(默认值) 不自动启用 WhatIf。若要手动启用它,请使用命令的 WhatIf 参数。 1: WhatIf 对支持它的所有命令自动启用。用户可使用带 False 值 的 WhatIf 命令 (WhatIf:$false) 来手动将其禁用。 详细说明 如果某 cmdlet 支持 WhatIf,则该 cmdlet 将报告命令的预期结果而不会执行该命令。 例如,在响应 Remove-Item 命令时,Windows PowerShell 不会删除 test.txt 文件, 而是报告该命令将删除什么。随后执行 Get-Childitem 命令可确认并未删除该文件。 PS> remove-item test.txt What if: Performing operation "Remove-Item" on Target "Item: C:\test.txt PS> get-childitem test.txt Directory: Microsoft.PowerShell.Core\FileSystem::C: Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 7/29/2006 7:15 PM 84 test.txt 示例 下面的这些示例演示 $WhatIfPreference 不同值的作用。它们还演示了如何 使用 WhatIf cmdlet 参数来替代特定命令的首选项变量。 下面的示例演示 0(不启用)值的作用,该值是默认值。 PS> $whatifpreference 0 # Check the current value. PS> get-childitem test.txt | format-list FullName FullName : C:\test.txt # Verify that the file exists. PS> remove-item test.txt PS> # Delete the file. PS> get-childitem test.txt | format-list -property FullName # Verify that the file is deleted. Get-ChildItem : Cannot find path 'C:\test.txt' because it does not exist. At line:1 char:14 + get-childitem <<<< test.txt | format-list fullname 下面的示例演示在 $WhatIfPreference 的值为 0 时,使用 WhatIf 参数的作用。 PS> get-childitem test2.txt | format-list -property FullName FullName : C:\test2.txt # Verify that the file exists. PS> remove-item test2.txt -whatif What if: Performing operation "Remove File" on Target "C:\test2.txt". # Use the WhatIf parameter PS> get-childitem test2.txt | format-list -property FullName FullName : C:\test2.txt # Verify that the file was not deleted 下面的示例演示 1(启用 WhatIf)值的作用。在使用 Remove-Item 删除 文件时,Remove-Item 显示该命令将删除的文件的路径,但是不会删除该文件。 PS> $whatifpreference = 1 PS> $whatifpreference 1 # Change the value. PS> remove-item test.txt What if: Performing operation "Remove File" on Target "C:\test.txt". # Try to delete a file. PS> get-childitem test.txt | format-list FullName FullName : C:\test.txt # Verify that the file exists. 下面的示例演示在 $WhatIfPreference 值为 1 时,如何删除文件。该例中使用值为 $false 的 WhatIf 参数。 PS> remove-item test.txt -whatif:$false # Use the WhatIf parameter with $false. 下面的示例表明某些 cmdlet 支持 WhatIf 行为,而其他 cmdlet 不支持这些行为。此例中, $WhatIfPreference 的值为 1(启用),并且执行了 Get-Process 命令(该命令不支持 WhatIf), 但是 Stop-Process 命令执行 WhatIf 行为。 可以使用值为 $false 的 WhatIf 参数来替代 Stop-Process 命令的 WhatIf 行为。 PS> $whatifpreference = 1 # Change the value to 1. PS> get-process winword # A Get-Process command completes. 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: Performing operation "Stop-Process" on Target "WINWORD (2312)". # A Stop-Process command uses WhatIf. PS> stop-process -name winword -whatif:$false PS> # WhatIf:$false overrides the preference. PS> get-process winword Get-Process : Cannot find a process with the name 'winword'. Verify the process name and call the cmdlet again. At line:1 char:12 + get-process <<<< winword # Verify that the process is stopped. 另请参阅 about_Automatic_Variables about_CommonParameters about_Environment_Variables about_Profiles about_Remote about_Scopes about_Variables