本文目录
关于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
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!