(23)Powershell中的首选项变量

上一节介绍了 Powershell 中的环境变量,本节介绍 Powershell 中的首选项变量,这些变量的作用与环境变量类似,都是Powershell中的内置变量,也可以对这些值进行更改。需要注意的是,首选项变量影响 PowerShell 操作环境以及在该环境中运行的所有命令。在很多情况下,cmdlet 带有的参数可用于替代特定命令的首选行为。

以下是 Powershell 中常见的首选项变量及其默认值。

首选项变量 默认值及说明
$ConfirmPreference  High
$DebugPreference SilentlyContinue
$ErrorActionPreference  Continue
$ErrorView NormalView
$FormatEnumerationLimit 4
$LogCommandHealthEvent False(不写入日志),记录命令初始化和进行处理时产生的错误和异常
$LogCommandLifecycleEvent False(不写入日志),记录命令和命令管道的启动和停止,以及命令发现过程中的安全异常。
$LogEngineHealthEvent True(写入日志),记录会话的错误和故障。
$LogEngineLifecycleEvent True(写入日志),记录会话的打开和关闭。
$LogProviderLifecycleEvent True(写入日志),记录添加和删除 Windows PowerShell 提供程序。
$LogProviderHealthEvent True(写入日志),记录提供程序错误,如读写错误、查找错误以及调用错误。
$MaximumAliasCount 4096,确定在 Windows PowerShell 会话中允许多少个别名。可以使用命令 (get-alias).count 统计别名数量。
$MaximumDriveCount 4096,确定在给定的会话中,允许多少个 Windows PowerShell 驱动器。可以使用命令 (get-psdrive).count统计数量。
$MaximumErrorCount 256,确定在会话的错误历史记录中保存多少个错误。$Error[0]是最新的错误信息。
$MaximumFunctionCount 4096,确定给定会话中允许多少个函数。可以使用

(get-childitem function:).count 统计当前会话中的函数个数。

$MaximumHistoryCount 64,确定当前会话的命令历史记录中保存多少条命令。
$MaximumVariableCount 4096,确定给定会话中允许多少个变量,包括自动变量、首选项变量以及在命令和脚本中创建的变量。
$OFS ""(空格字符),输出字段分隔符。指定在数组转换为字符串时,用来分隔数组元素的字符。
$OutputEncoding ASCIIEncoding,PowerShell 在将文本发送给其他应用程序时,所使用的字符编码方法。
$ProgressPreference Continue,显示操作执行的进度条,并继续执行。
$PSEmailServer (无)指定用于发送电子邮件的默认电子邮件服务器。
$PSSessionApplicationName WSMAN
$PSSessionConfigurationName http://schemas.microsoft.com/powershell/microsoft.powershell 指定使用 WS-Management 技术的远程命令的默认应用程序名称。
$VerbosePreference SilentlyContinue, 默认不显示命令操作的详细消息。继续执行。
$WarningPreference Continue,默认显示操作执行的警告消息,然后继续执行。
$WhatIfPreference 0,默认不自动启用 WhatIf。若要手动启用它,请使用命令的 WhatIf 参数。

以上列出的是常见的首选项及其默认值,如果要查看全部的首选项变量,输入命令 Get-Variable 进行查看。


  1. 首选项命令值的查看与更改

如果要查看某个具体的首选项的值,直接输入首选项变量的名称。例如

PS C:\> $ConfirmPreference
High

如果要更改首选项变量的值,使用赋值语句,例如:

PS C:\> $ConfirmPreference = "Medium"
PS C:\> $ConfirmPreference
Medium

需要注意的是,首选项变量与其他变量一样,在当前回话对值所做的更改,只针对当前窗口(会话)有效。如果需要使更改永久有效,需要把更改写入 Powershell 配置文件中。另外,Powershell 中的首选项往往有指定的可选值,即只能把可选值中的一个赋值给该变量,而不是可以赋值任何值。以下会对每个首选项变量做详细说明以及其所有的可选值。



2. $ConfirmPreference

根据命令的名称可知,该命令与确认(Confirm)有关。Powershell 对每一个命令执行结果可能产生的影响划分了一个等级(High、Medium、Low 或 None),也就是对每一个命令都划分了风险(对当前系统可能产生的影响)等级。

如果 $ConfirmPreference 值(High、Medium、Low 或 None)大于等于命令操作的风险(High、Medium、Low 或 None)时,PowerShell 会在执行该操作之前自动请求用户确认(告诉你输入的命令可能存在风险,是否要继续执行)。

$ConfirmPreference 有以下有效可选值。

有效可选值 说明
None 不自动确认任何 cmdlet 操作。用户必须使用 Confirm 参数来请求确认特定命令。即Powershell认为你输入的每一条命令都有可能存在风险,每条命令都需要明确确认
Low 对命令风险等级为低、中或高的命令操作自动提示确认。如果要阻止特定命令提示确认,可以使用通用参数 -Confirm:$false。
Medium 对命令风险等级为中或高的命令操作自动提示确认。如果要为特定命令启用提示确认,可以使用 -confirm。如果要阻止特定命令提示确认,请使用 confirm:$false。
High 默认值。对命令等级为高风险的命令操作自动提示确认。如果要为特定命令启用提示确认,可以使用 -confirm。如果要阻止特定命令提示确认,请使用 -confirm:$false。

哪些行为在Powershell中会被认定为有风险行为?比如删除文件,停掉所有的Service,命令执行需要占用大量系统资源等。例如:

PS C:\> $ConfirmPreference
Medium
PS C:\> cd D:\MyPowerShell
PS D:\MyPowerShell> Remove-Item .\Test.ps1
确认
是否确实要执行此操作?
对目标“D:\MyPowerShell\Test.ps1”执行操作“删除文件”。
[Y] 是(Y)  [A] 全是(A)  [N] 否(N)  [L] 全否(L)  [S] 挂起(S)  [?] 帮助 (默认值为“Y”):

在上面的例子中 $ConfirmPreference 的值为"Medium"。需要注意的是,Powershell中的大部分命令的风险等级为"Medium",而$ConfirmPreference 的默认值时"High",所以在大部分的时候,并不会自动提示。如果需要要激活自动提示,可以将$ConfirmPreference的值更改为"Medium"或者"Low"。



3. $DebugPreference

从命令的名称可知,与调试(Debug)有关。Powershell 根据该值,确认如何对待调试信息(脚本、cmdlet 或提供程序生成的调试消息,或者 Write-Debug 命令在命令行上生成的调试消息)-是忽略还是继续执行。有以下可选值:

有效可选值 说明
Stop 显示调试信息并停止命令的执行,并把错误输出到控制台。
Inquire 显示调试信息,并和你确认是否要继续执行。
Continue 显示调试信息,并继续执行。
SilentlyContinue 默认值。不显示调试信息,继续执行不发生中断,相当于直接忽视调试信息。如果要强制显示调试信息,请使用 -Debug 参数。

调试信息通常是对开发人员有效,具有比较强的专业性(其他人看了也是一脸懵逼^_^),所以默认情况下不显示调试信息。例如例子说明了SilentlyContinue的作用:

PS C:\> $DebugPreference
SilentlyContinue
PS C:\> Write-Debug "This is debug message"
PS C:\> Write-Debug "This is debug message" -Debug
调试: This is debug message
确认
是否继续执行此操作?
[Y] 是(Y)  [A] 全是(A)  [H] 终止命令(H)  [S] 挂起(S)  [?] 帮助 (默认值为“Y”):

以下示例说明了其他3个参数的用法及所代表的含义:

PS C:\> $DebugPreference = "Continue"
PS C:\> $DebugPreference
Continue
PS C:\> Write-Debug "This is debug message"
调试: This is debug message
PS C:\> Write-Debug "This is debug message" -Debug:$false
PS C:\> $DebugPreference = "Stop"
PS C:\> $DebugPreference
Stop
PS C:\> Write-Debug "This is debug message"
调试: This is debug message
Write-Debug : 已停止执行命令,因为首选项变量“DebugPreference”或通用参数被设置为 Stop。
所在位置 行:1 字符: 12
+ Write-Debug <<<<  "This is debug message"
    + CategoryInfo          : OperationStopped: (:) [Write-Debug], ParentContainsErrorReco
    + FullyQualifiedErrorId : ActionPreferenceStop,Microsoft.PowerShell.Commands.WriteDebu
PS C:\> Write-Debug "This is debug message" -Debug:$false
PS C:\> $DebugPreference = "Inquire"
PS C:\> Write-Debug "This is debug message"
调试: This is debug message
确认
是否继续执行此操作?
[Y] 是(Y)  [A] 全是(A)  [H] 终止命令(H)  [S] 挂起(S)  [?] 帮助 (默认值为“Y”): PS C:\>
PS C:\> Write-Debug "This is debug message" -Debug:$false
PS C:\>

通过以上示例可知,对于任何调试信息都可以通过 -Debug:$false 或者 -Debug:$true 来阻止或是激活调试信息。



4. $ErrorActionPreference

    $ErrorActionPreference 与 $DebugPreference 非常类似,只是前者是用来处理错误信息,而不是调试信息。Powershell 根据 $ErrorActionPreference 的值,确定如何响应命令行、脚本、cmdlet 或提供程序中的非终止性错误(不会导致cmdlet 处理停止的错误),如 Write-Error cmdlet 生成的错误。

$ErrorActionPreference 提供了以下有效可选值:

有效值 说明
Stop 显示错误信息并停止执行
Inquire 显示错误信息,并和你确认是否要继续执行
Continue 默认值。显示错误信息并继续执行
SilentlyContinue 不显示错误信息,继续执行不发生中断

以下示例说明了不同值的不同作用。

PS C:\> $ErrorActionPreference
Continue
PS C:\> Write-Error "This is error message"
Write-Error "This is error message" : This is error message
    + CategoryInfo          : NotSpecified: (:) [Write-Error], WriteErrorException
    + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException
PS C:\> Write-Error "This is error message" -ErrorAction:SilentlyContinue
PS C:\>
PS C:\>
PS C:\> $ErrorActionPreference = "SilentlyContinue"
PS C:\> $ErrorActionPreference
SilentlyContinue
PS C:\> Write-Error "This is error message"
PS C:\> Write-Error "This is error message" -ErrorAction:continue
Write-Error "This is error message" -ErrorAction:continue : This is error message
    + CategoryInfo          : NotSpecified: (:) [Write-Error], WriteErrorException
    + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException
PS C:\>
PS C:\>
PS C:\> $ErrorActionPreference
SilentlyContinue
PS C:\> Get-ChildItem -path notExistFile.txt
PS C:\> $ErrorActionPreference = "Continue"
PS C:\> Get-ChildItem -path notExistFile.txt
Get-ChildItem : 找不到路径“C:\notExistFile.txt”,因为该路径不存在。
所在位置 行:1 字符: 14
+ Get-ChildItem <<<<  -path notExistFile.txt
    + CategoryInfo          : ObjectNotFound: (C:\notExistFile.txt:String) [Get-ChildItem], ItemNotFoundException
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand
PS C:\> Get-ChildItem -path notExistFile.txt -ErrorAction:SilentlyContinue
PS C:\>
PS C:\>
PS C:\> $ErrorActionPreference = "Inquire"
PS C:\> $ErrorActionPreference
Inquire
PS C:\> Get-ChildItem -path notExistFile.txt
确认
找不到路径“C:\notExistFile.txt”,因为该路径不存在。
[Y] 是(Y)  [A] 全是(A)  [H] 终止命令(H)  [S] 挂起(S)  [?] 帮助 (默认值为“Y”):


5. $ErrorView

Powershell 中错误信息的显示格式。有以下两个可选值:

有效可选值 说明
NormalView 默认值。错误信息的详细视图(View),包括错误描述、错误中所涉及对象的名称,以及指向命令中导致错误的词的箭头 (<<<<)。
CategoryView 错误信息的简明结构化视图。格式为:{Category}: ({TargetName}:{TargetType}):[{Activity}], {Reason}

以下例子说明了错误信息显示格式的不同:

PS C:\> $ErrorView
NormalView
PS C:\> Get-ChildItem -path notExistFile.txt
Get-ChildItem : 找不到路径“C:\notExistFile.txt”,因为该路径不存在。
所在位置 行:1 字符: 14
+ Get-ChildItem <<<<  -path notExistFile.txt
    + CategoryInfo          : ObjectNotFound: (C:\notExistFile.txt:String) [Get-ChildItem], ItemNotFoundException
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand
PS C:\> $ErrorView = "CategoryView"
PS C:\> Get-ChildItem -path notExistFile.txt
ObjectNotFound: (C:\notExistFile.txt:String) [Get-ChildItem], ItemNotFoundException

需要注意的是,ErrorView 的值只影响错误显示;它不会更改存储在 $error 自动变量中的错误对象的结构。

$error 自动变动变量是包含错误信息的数组,第一个元素(下标为0)包含的是最新的错误信息。例如在上面的语句执行后,error[0]错误信息如下:

PS C:\> $Error[0] | Format-List -Property * -Force
PSMessageDetails      :
Exception             : System.Management.Automation.ItemNotFoundException: 找不到路径“C:\notExistFile.txt”,因为该路
                        径不存在。
                           在 System.Management.Automation.SessionStateInternal.GetChildItems(String path, Boolean recu
                        rse, CmdletProviderContext context)
                           在 System.Management.Automation.ChildItemCmdletProviderIntrinsics.Get(String path, Boolean r
                        ecurse, CmdletProviderContext context)
                           在 Microsoft.PowerShell.Commands.GetChildItemCommand.ProcessRecord()
TargetObject          : C:\notExistFile.txt
CategoryInfo          : ObjectNotFound: (C:\notExistFile.txt:String) [Get-ChildItem], ItemNotFoundException
FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand
ErrorDetails          :
InvocationInfo        : System.Management.Automation.InvocationInfo
PipelineIterationInfo : {0, 1}


6. $FormatEnumerationLimit

确定一次显示中包含多少个枚举项(显示多少项)。该变量不会影响基础对象;只影响显示。当$FormatEnumerationLimit 的值小于枚举项的数量时,PowerShell  会添加一个省略号(...)来指示还有其他项未显示。有效值:整数 (Int32),默认值:4 。 例如:

PS C:\> $FormatEnumerationLimit
4
PS C:\> Get-Service | Group-Object -Property Status | Format-List
Name   : Stopped
Count  : 62
Group  : {System.ServiceProcess.ServiceController, System.ServiceProcess.ServiceController, System.ServiceProcess.Servi
         ceController, System.ServiceProcess.ServiceController...}
Values : {Stopped}
Name   : Running
Count  : 41
Group  : {System.ServiceProcess.ServiceController, System.ServiceProcess.ServiceController, System.ServiceProcess.Servi
         ceController, System.ServiceProcess.ServiceController...}
Values : {Running}
PS C:\> $FormatEnumerationLimit = 6
PS C:\> Get-Service | Group-Object -Property Status | Format-List
Name   : Stopped
Count  : 62
Group  : {System.ServiceProcess.ServiceController, System.ServiceProcess.ServiceController, System.ServiceProcess.Servi
         ceController, System.ServiceProcess.ServiceController, System.ServiceProcess.ServiceController, System.Service
         Process.ServiceController...}
Values : {Stopped}
Name   : Running
Count  : 41
Group  : {System.ServiceProcess.ServiceController, System.ServiceProcess.ServiceController, System.ServiceProcess.Servi
         ceController, System.ServiceProcess.ServiceController, System.ServiceProcess.ServiceController, System.Service
         Process.ServiceController...}
Values : {Running}


7. 总结

这节介绍了 Powershell中的首选项变量,这些变量的作用于环境变量类似,需要注意的是,更改首选项变量不只针对当前会话,对再次打开的窗体任然有效,这些首选项都提供了默认的参数值,对于刚开始不熟悉的,尽量不要去更改这些变量的默认值,了解每个变量的作用即可。

时间: 2024-10-20 14:21:36

(23)Powershell中的首选项变量的相关文章

(9)Powershell中的内置变量

上一节主要介绍了Powershell中变量的定义和使用,以及在变量中包含特殊字符,或是变量在输出时的一些技巧,详细内容参考这里. 本节介绍Powershell中的内置变量,或是称为自动变量. 在Powershell命令行中,可以输入 Get-Variable 命令查看Powershell中的所有内置变量 PS C:\> Get-Variable Name                           Value ----                           ----- $ 

android 设置中添加首选项 通过Intent调第三方应用

<PreferenceScreen android:key="button_hmt_setting" android:title="@string/hmt_setting_title" android:persistent="false"> <intent android:action="android.intent.action.MAIN" android:targetPackage="com.s

(8)Powershell中变量的定义和使用

上一节介绍了Powershell中的算术运算符,详细内容参考这里,这些运算符主要用于字符串的连接,组成bool表达式等用于对管道中的命令执行结果进行筛选,我们将会后续的文章中讲到. 这一节主要介绍Powershell中变量的定义和使用,以及使用变量时应该注意的事项. 和所有编程语言中的变量一样,Powershell中的变量也是存于存储值的内存单元,需要注意的是,Powershell中的变量是以美元符号($)开头的单字节(一般是英文字符,虽然ISE中支持双字节的字符,但是像任何编程语言,我们不鼓励

转:Android preference首选项框架

详解Android首选项框架ListPreference 探索首选项框架 在 深入探讨Android的首选项框架之前,首先构想一个需要使用首选项的场景,然后分析如何实现这一场景.假设你正在编写一个应用程序,它提供了一个搜索 飞机航班的工具.而且,假设该应用程序的默认设置是根据机票价格由低到高的顺序显示航班,但用户可以将首选项设置为始终根据最少停站数或特定航线来航班. 如何实现这一场景? ListPreference 显 然,必须为用户提供UI 来查看排序选项列表.该列表将包含每个选项的单选按钮,

android学习十三 首选项

1,首选项可用用来持久保存用户设置,游戏最高分等 2,首选项有,列表首选项,复选框首选项,对话框首选项.. 3,通过xml文件和代码创建首选项 addPreferencesFromResource(R.xml.main) 4.从首选项中获取值 Resources resources = this.getResources(); SharedPreferences spf= PreferenceManager.getDefaultSharedPreferences( this); String o

(12)Powershell中变量的类型

Window Powershell中变量的类型与Java,C#等高级语言中变量的类型不一样,可以不用显示指定Powershell中变量的类型,即Powershell中的变量具有更大的灵活性.Powershell中的变量采用 .Net Framework类型. 默认情况下,当变量只有一个值时,变量的数据类型由赋予变量的值决定.例如,下面的语句创建一个整数 (System.Int32) 类型的变量: PS C:\> $a=3 如果需要确定变量的 .NET Framework 类型,可以使用 GetT

Eclipse RCP 中创建自定义首选项,并能读取首选项中的值

Eclipse RCP的插件中若想自己定义首选项需要扩展扩展点: org.eclipse.core.runtime.preferences //该扩展点用于初始化首选项中的值 org.eclipse.ui.preferencePages//该扩展点用于定义自己的首选项页面 plugin.xml中内容如: Database Preferences挂在WorkFlowBase下,需要在category中填写workFlowBase的ID WorkFlowPreferenceInitializer类,

关于虚拟机在启用串行端口时出现“必须在首选项中启用虚拟打印机”的解决办法!

解决办法 编辑-首选项-设备-更改设置-启用虚拟打印机

(18)Powershell中的字符串拆分运算符

Powershell中提供了对字符串的拆分操作运算符.-split 运算符将一个字符串拆分成多个字符串. 拆分运算符 拆分运算符用于将一个或多个字符串拆分为多个子字符串.可更改拆分操作的以下元素: (1)定界符.默认为空白,但是可指定字符.字符串.模式或用于设置定界符的脚本块. (2)子字符串的最大数目.默认设置为返回所有子字符串.如果指定的数字小于子字符串数,则其余子字符串将合并到最后一个子字符串中. (3)用于指定定界符匹配条件的选项,如 SimpleMatch 和 Multiline. 拆