PowerShell 临时更改扩展类型系统


关于PowerShell 扩展类型系统,我们已经做过两篇介绍,可以参考:

扩展类型系统介绍

今天我们介绍如何在不更改已有扩展类型系统文件的基础上,在当前PowerShell 控制台会话中更改扩展类型系统。那就从update-TypeData讲起吧。在PowerShell的根目录$pshome下有许多后缀名为types.ps1xml的文件,这些文件定义了一个具体的类型在PowerShell 控制台中应当显示那些属性,应当隐藏那些属性,以及以怎么的格式和宽度显示等配置信息。这些配置信息自然会在控制台首次打开时自动加载,直到该会话结束。

Update-Typedata命令介绍

那如果用户更改了其中某个types.ps1xml,或者添加了某个types.ps1xml文件,已经打开的PowerShell控制台不会自动检测识别到。此时Update-Typedata就会派上用场,用来刷新Powershell 扩展类型系统的缓存。

从PowerShell 3.0以后,Update-Typedata还可以在不使用types.ps1xml文件的基础上来临时更改扩展类型系统,请看下面的例子。

Update-Typedata 实战

隐藏DateTime的默认属性

.NET 类型DateTime默认显示很多属性:

PS> Get-Date | Format-List

DisplayHint : DateTime
Date        : 2014/1/6 0:00:00
Day         : 6
DayOfWeek   : Monday
DayOfYear   : 6
Hour        : 14
Kind        : Local
Millisecond : 213
Minute      : 14
Month       : 1
Second      : 35
Ticks       : 635246144752139040
TimeOfDay   : 14:14:35.2139040
Year        : 2014
DateTime    : 2014年1月6日 14:14:35

使用Update-Typedata后,让它默认只显示”年月日时分秒“这几个属性:

Update-TypeData -TypeName System.DateTime  -DefaultDisplayPropertySet Year,Month,Day,Hour,Minute,Second

使用Format-List来测试:

PS> Get-Date | Format-List

Year   : 2014
Month  : 1
Day    : 6
Hour   : 14
Minute : 16
Second : 34

给String类型添加扩展方法:判断中文字符

前一段时间”判断中文字符”这个问题在QQ群中被炒作的比较火,今天就拿它来下酒吧。(相传:汉字Unicode编码的区间为:0x4E00→0x9FA5)

Update-TypeData -TypeName System.String -MemberType ScriptMethod -MemberName 'HasChineseLeter' -Value {
$this -match '[\u4e00-\u9FA5]' 
}

见证奇迹的时候到了:

PS> "PowerShell Chinese Blog".HasChineseLeter()
False
PS> "PowerShell 中文博客".HasChineseLeter()
True

写在最后

再次印证了我的结论:PowerShell 的强大源于其方便。

本文链接: https://www.pstips.net/modify-ets-temporary-in-current-session.html
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!

关于 Mooser Lee

我是一个Powershell的爱好者,创建了PowerShell中文博客,热衷于Powershell技术的搜集和分享。本站部分内容来源于互联网,不足之处敬请谅解,并欢迎您批评指正。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注