Powershell一个最吸引人的功能是它能够将任何对象转换成文本,我们已经使用过将对象属性以不同的版式转换成文本,并且输出。更令人惊奇的是Powershell会把最重要最能代表这个对象本质的信息输出。一个对象有很多属性,为什么它单单就输出那几个属性呢?
如果使用:
Dir | Format-Table * -wrap
PSP PSP PSC PSD PSP PSI Bas Mod Nam Par Exi Roo Ful Ext Cre Cre Las La La La At
ath are hil riv rov sCo eNa e e ent sts t lNa ens ati ati tAc st st st tr
ntP dNa e ide nta me me ion onT onT ces Ac Wr Wr ib
ath me r ine ime ime sTi ce it it ut
r Utc me ss eT eT es
Ti im im
me e eU
Ut tc
c
--- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- -- -- -- --
Mic Mic ABC C Mic Tru ABC d-- ABC Pow Tru C: C: 201 201 201 20 20 20 Di
ros ros ros e -- ers e Pow 1/1 1/1 1/1 11 11 11 re
oft oft oft hel ers 2/1 2/1 2/1 /1 /1 /1 ct
.Po .Po .Po l hel 9 1 9 9 9 1 2/ 2/ 2/ or
wer wer wer lA 7:0 :05 7:0 19 19 19 y
She She She BC 5:5 :55 5:5 9 1 9
ll. ll. ll. 5 5 :0 7: :0
Cor Cor Cor 5: 05 5:
eF eF eF 55 :5 55
ile ile ile 5
Sys Sys Sys
tem tem tem
::C ::C
owe owe
rsh rsh
ell ell
AB
C
</div>
Powershell会最大限度的输出每个属性,但是这样的输出基本上没有意义,不利于用户阅读。那到底是什么让Powershell默认只显示此属性不显示彼属性呢?是“扩展类型系统”Extended Type System (ETS),ETS会对管道中对象转换成文本的机制进行宏观调控。
ETS由两部分组成,一部分控制对象的版式,一部分控制对象的属性,今天主要关心第一部分。
文本转换不可逆
在管道中将对象结果转换成文本后,不能再将文本转换成对象,因为ETS不能处理文本。
如果通过ConvertTo-String将目录列表的转换成String后,使用Format-Table和Format-List这些命令就会无效。
PS C:Powershell> $text= dir | Out-String
PS C:Powershell> $text
目录: C:Powershell
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 2011/12/19 17:05 ABC
d---- &n

