About_Preference_Variables
主题
首选项变量
简短说明
用于自定义 Windows PowerShell 行为的变量
详细说明
Windows 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。
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
确认
是否确认要执行此操作?
对目标“C:\pref2.txt”执行“删除文件”操作。
[Y] 是 [A] 全是 [N] 否 [L] 全否 [S] 暂停 [?] 帮助(默认值为“Y”):
风险估计是该 cmdlet 的称为“ConfirmImpact”的部分。该项不可更改。
可能对系统产生风险的 cmdlet 有一个 Confirm 参数,可以使用该参数来请求或阻止对特定命令的确认。
由于大多数 cmdlet 使用默认风险值 Medium,并且 $ConfirmPreference 的默认值为 High,因此自动提
示确认极少发生。但是,可通过将 $ConfirmPreference 值更改为 Medium 或 Low 来激活自动提示确认。
示例
下面的示例演示 $ConfirmPreference 默认值的作用。High 值只要求确认高风险 cmdlet 操作。大多数操
作是中等风险,因此它们不会自动提示确认(但可以使用 cmdlet 的 Confirm 参数来请求确认某个特定命令)。
PS> $confirmpreference # 获取变量的当前值
PS> remove-item temp1.txt # 删除文件
PS> # 删除,不确认
PS> remove-item temp2.txt -confirm # 使用 Confirm 参数
确定
是否确认要执行此操作?
对目标“C:\temp2.txt”执行“删除文件”操作。
[Y] 是 [A] 全是 [N] 否 [L] 全否 [S] 暂停 [?] 帮助(默认值为“Y”):
下面的示例演示将 $ConfirmPreference 的值更改为 Medium 的作用。由于大多数 cmdlet 操作都是中
等风险,因此它们自动提示确认,并且您必须使用值为 $false 的 Confirm 参数才能阻止某个特定
命令的确认提示。
PS> $confirmpreference = "Medium"
# 更改 $ConfirmPreference 的值
PS> remove-item temp2.txt
# 删除文件会触发确认
确认
是否确认要执行此操作?
对目标“C:\temp2.txt”执行“删除文件”操作。
[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 # 获取 $DebugPreference
SilentlyContinue 的当前值
PS> write-debug "Hello, World"
PS> # 不显示调试消息。
PS> write-debug "Hello, World" -Debug # 使用 Debug 参数
DEBUG: Hello, World # 请求调试消息。 displayed and confirmation
确认
是否继续此操作?
[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
# 使用 Debug 参数(值为 false)。
PS> # 不显示调试消息。
下面的示例演示“Stop”值的作用。最后一条命令使用值为 $false 的 Debug 参数阻止单个命令的消息。
PS> $debugpreference = "Stop" # 将值更改为“Stop”
PS> write-debug "Hello, World"
DEBUG: Hello, World
Write-Debug : 命令执行已停止,因为 shell 变量“DebugPreference”已设置为 Stop。
At line:1 char:12
+ write-debug <<<< "Hello, World"
PS> write-debug "Hello, World" -Debug:$false
# 使用 Debug 参数(值为 false)。
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
# 使用 Debug 参数(值为 false)。
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
# 使用 ErrorAction 参数,值为“SilentlyContinue”。
PS>
# 不显示错误信息且继续执行。
下面的示例演示 SilentlyContinue 值的作用。
PS> $ErrorActionPreference = "SilentlyContinue"
# 更改首选项的值。
PS> write-error "Hello, World"
# 生成错误信息。
PS>
# 隐藏错误信息。
PS> write-error "Hello, World" -erroraction:continue
# 使用 ErrorAction 参数,值为“Continue”。
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>
# 隐藏错误信息。
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
Exception : System.Management.Automation.ItemNotFoundException: 找不到路径“C:\nofile.txt”,因为它不存在。
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 # 查找当前值
4
PS> get-service | group-object -property status
# 按状态列出所有服务
Count Name Group
----- ---- -----
60 Running {AdtAgent, ALG, Ati HotKey Poller, AudioSrv...}
41 Stopped {Alerter, AppMgmt, aspnet_state, ATI Smart...}
# 列表在 4 项之后被截断。
PS> $formatenumerationlimit = 1000
# 将限制增加到 1000。
PS> get-service | group-object -property status
# 重复命令。
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
# 添加 Wrap 参数。
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 # 存储整数数组。
PS> [string]$array # 将数组强制转换为字符串。
1 2 3 # 空格分隔元素
若要更改分隔符,请添加 $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 文本(而不是 Unicode 文本)发送给 FINDSTR。
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
---------------------------
指定用于在当前会话中创建的 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 # 查找当前值。
SilentlyContinue
PS> Write-Verbose "Verbose message test."
PS> # 编写详细消息。
# 不显示消息。
PS> Write-Verbose "Verbose message test."-verbose
VERBOSE: Verbose message test.
# 使用 Verbose 参数。
下面的示例演示 Continue 值的作用。
PS> $VerbosePreference = "Continue"
# 将值更改为 Continue。
PS> Write-Verbose "Verbose message test."
# 编写详细消息。
VERBOSE: Verbose message test.
# 显示消息。
PS> Write-Verbose "Verbose message test." -verbose:$false
# 使用 Verbose 参数,值为 $false。
PS>
# 不显示消息。
下面的示例演示 Stop 值的作用。
PS> $VerbosePreference = "Stop"
# 将值更改为 Stop。
PS> Write-Verbose "Verbose message test."
# 编写详细消息。
VERBOSE: Verbose message test.
Write-Verbose : 命令执行已停止,因为 shell 变量“VerbosePreference”已设置为 Stop。
位于行:1 字符:14
+ Write-Verbose <<<< "Verbose message test."
PS> Write-Verbose "Verbose message test." -verbose:$false
# 使用 Verbose 参数,值为 $false
PS>
# 不显示消息。
下面的示例演示 Inquire 值的作用。
PS> $VerbosePreference = "Inquire"
# 将值更改为 Inquire.
PS> Write-Verbose "Verbose message test."
VERBOSE: Verbose message test.
# 编写详细消息。
确认
是否继续此操作?
[Y] 是 [A] 全是 [H] 终止命令 [S] 暂停 [?] 帮助(默认值为“Y”):y
PS>
PS> Write-Verbose "Verbose message test." -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 "This action can delete data."
WARNING: This action can delete data.
# 使用 WarningAction 参数以
# 隐藏该命令的警告
PS> Write-Warning "This action can delete data." -warningaction silentlycontinue
下面的示例演示 SilentlyContinue 值的作用。
PS> $WarningPreference = "SilentlyContinue"
# 将值更改为 SilentlyContinue。
PS> Write-Warning "This action can delete data."
PS> # 编写警告信息。
PS> Write-Warning "This action can delete data." -warningaction stop
# 当此命令生成警告时使用 WarningAction
# 参数以停止处理。
WARNING: This action can delete data.
Write-Warning : 命令执行已停止,因为 shell 变量“WarningPreference”已设置为 Stop。
位于行:1 字符:14
+ Write-Warning <<<< "This action can delete data." -warningaction stop
下面的示例演示 Inquire 值的作用。
PS> $WarningPreference = "Inquire"
# 将值更改为 Inquire。
PS> Write-Warning "This action can delete data."
# 编写警告信息。
WARNING: This action can delete data.
确认
是否继续此操作?
[Y] 是 [A] 全是 [H] 终止命令 [S] 暂停 [?] 帮助(默认值为“Y”):y
PS>
PS> Write-Warning "This action can delete data." -warningaction silentlycontinue
PS> # 使用 WarningAction 参数将
# 响应更改为当前命令的警告。
下面的示例演示 Stop 值的作用。
PS> $WarningPreference = "Stop"
# 将值更改为 Stop。
PS> Write-Warning "This action can delete data."
# 编写警告信息。
WARNING: This action can delete data.
Write-Warning : 命令执行已停止,因为 shell 变量“WarningPreference”已设置为 Stop。
位于:1 字符:14
+ Write-Warning <<<< "This action can delete data."
PS> Write-Warning "This action can delete data." -warningaction inquire
WARNING: This action can delete data.
确认
是否继续此操作?
[Y] 是 [A] 全是 [H] 终止命令 [S] 暂停 [?] 帮助(默认值为“Y”):
# 使用 WarningAction 参数将
# 响应更改为当前命令的警告。
$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 # 检查当前值。
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: Performing operation "Remove File" on Target "C:\test2.txt".
# 使用 WhatIf 参数
PS> get-childitem test2.txt | format-list -property FullName
FullName : C:\test2.txt
# 验证未删除文件
下面的示例演示 1(启用 WhatIf)值的作用。在使用 Remove-Item 删除
文件时,Remove-Item 显示该命令将删除的文件的路径,但是不会删除该文件。
PS> $whatifpreference = 1
PS> $whatifpreference
1 # 更改值。
PS> remove-item test.txt
What if: Performing operation "Remove File" on Target "C:\test.txt".
# 尝试删除文件。
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 行为,而其他 cmdlet 不支持这些行为。此例中,
$WhatIfPreference 的值为 1(启用),并且执行了 Get-Process 命令(该命令不支持 WhatIf),
但是 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: Performing operation "Stop-Process" on Target "WINWORD (2312)".
# 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