Windows Powershell扩展类型系统
Powershell一个最吸引人的功能是它能够将任何对象转换成文本,我们已经使用过将对象属性以不同的版式转换成文本,并且输出。更令人惊奇的是Powershell会把最重要最能代表这个对象本质的信息输出。一个对象有很多属性,为什么它单单就输出那几个属性呢?
如果使用:
Dir|Format-Table*-wrap PSPPSPPSCPSDPSPPSIBasModNamParExiRooFulExtCreCreLasLaLaLaAt atharehilrivrovsCoeNae e entstst lNaensatiatitAcstststtr ntPdNae identame me iononTonTcesAcWrWrib athme r ine imeimesTiceititut r Utcme sseTeTes Tiimim mee eU Ut tc c ----------------------------------------------------------- MicMicABCC MicTruABCd--ABCPowTruC:C: 201201201202020Di rosros ros e -- ers e Pow 1/11/11/1111111re oftoft oft hel ers 2/12/12/1/1/1/1ct .Po.Po .Po l hel 9199912/2/2/or werwer wer lA 7:0:057:0191919 y SheShe She BC 5:5:555:5 9 1 9 ll.ll. ll. 5 5 :07::0 CorCor Cor 5:055: eFeF eF 55:555 ileile ile 5 SysSys Sys temtem tem ::C::C oweowe rshrsh ellell AB C
Powershell会最大限度的输出每个属性,但是这样的输出基本上没有意义,不利于用户阅读。那到底是什么让Powershell默认只显示此属性不显示彼属性呢?是“扩展类型系统”ExtendedTypeSystem(ETS),ETS会对管道中对象转换成文本的机制进行宏观调控。
ETS由两部分组成,一部分控制对象的版式,一部分控制对象的属性,今天主要关心第一部分。
文本转换不可逆
在管道中将对象结果转换成文本后,不能再将文本转换成对象,因为ETS不能处理文本。
如果通过ConvertTo-String将目录列表的转换成String后,使用Format-Table和Format-List这些命令就会无效。
PSC:Powershell>$text=dir|Out-String PSC:Powershell>$text
目录:C:Powershell
Mode LastWriteTime LengthName ---- ------------- ---------- d---- 2011/12/19 17:05 ABC d---- 2011/12/19 17:06 ABD d---- 2011/12/19 17:06 ABE
PSC:Powershell>$text|Format-Table
目录:C:Powershell
Mode LastWriteTime LengthName ---- ------------- ---------- d---- 2011/12/19 17:05 ABC d---- 2011/12/19 17:06 ABD d---- 2011/12/19 17:06 ABE
PSC:Powershell>$text|Format-List
目录:C:Powershell
Mode LastWriteTime LengthName ---- ------------- ---------- d---- 2011/12/19 17:05 ABC d---- 2011/12/19 17:06 ABD d---- 2011/12/19 17:06 ABE