.NET 类型扩展(Type Extension)

 
如下说明是翻译 : help about_types 产生的帮助信息 .
译者 : Edengundam( 马涛 )
 
.NET Type Extension
 
SHORT DESCRIPTION
在Windows PowerShell 中对.NET type system 进行扩展
 
LONG DESCRIPTION
PowerShell安装目录中的types.ps1xml文件提供了一种对.Net类型系统进行扩展的机制. 默认的情况下, PowerShell已经添加了一些对.NET类型进行了扩展的元素. 除此之外, 你可以添加一些元素来进行自己的个性化设置.
 
添加一个属性是对类型进行扩展的一种方法. 要添加一个属性 (或者以任何方式对类型进行扩展), 你必须针对该类型修改其在types.ps1xml文件中的<type>元素. 例如, 数组类型在默认情况下不包含Count这个属性, 所以PowerShell定义了一个Count的别名属性(alias property)(译者注: 这种定义是为了使PowerShell对于不同类型的对象有一种统一的名称机制). 这个别名属性引用的是叫做Length属性(译者注: 这里就是.Net的Array中, 数组长度Length), 如下面XML所示:
 
<Type>
<Name>System.Array</Name>
<Members>
<AliasProperty>
<Name>Count</Name>
<ReferencedMemberName>
Length
</ReferencedMemberName>
</AliasProperty>
</Members>
</Type>
 
你可以使用Get-Member 命令, 取出数组中所有属性, 来验证别名属性(AliasProperty), 如下面的示例:
 
Get-Member -inputobject (1,2,3,4) -member *property*
 
命令返回如下结果:
 
TypeName: System.Object[]
 
Name              MemberType        Definition
Count             AliasProperty     Count = Length
IsFixed           SizeProperty      System.Boolean IsFixedSize {ge
IsReadOnly       Property          System.Boolean IsReadOnly {get
IsSynchronized    Property          System.Boolean IsSynchronized
Length            Property          System.Int32 Length {get;}
LongLength       Property          System.Int64 LongLength {get;}
Rank              Property          System.Int32 Rank {get;}
SyncRoot         Property          System.Object SyncRoot {get;}
 
正如你所看到, 属性中列出了Count别名属性和该属性的定义"Count = Length."
 
在types.ps1xml文件中, 你可以定义脚本属性(script property), 当执行赋值或取值时(译者注: 类似面向对象中的get和set), 该对应脚本就会被执行. 例如, types.ps1xml文件, 为.Net的DateTime对象添加了包含了一个脚本块的DataTime成员(译者注: 这里是GetScriptBlock, 此属性只能取值):
 
<Type>
<Name>System.DateTime</Name>
<Members>
<ScriptProperty>
<Name>DateTime</Name>
<GetScriptBlock>
if ($this.DisplayHint -ieq "Date")
{
"{0}" -f $this.ToLongDateString()
}
elseif ($this.DisplayHint -ieq "Time")
{
"{0}" -f  $this.ToLongTimeString()
}
else
{
"{0} {1}" -f $this.ToLongDateString(),
$this.ToLongTimeString()
}
</GetScriptBlock>
</ScriptProperty>
</Members>
</Type>
 
此脚本块用于对日期进行格式化, 使得根据不同输入值的类型(只提供日期, 只提供时间, 既提供日期也提供时间), 可以产生一致的结果. 例如, 假设你声明了变量$a如下面命令:
 
[datetime]$a = "5 march 05"
 
PowerShell将会转换该值为长日期格式(译者注:输出格式根据DisplayHint决定):
 
Saturday, March 05, 2005 12:00:00 AM
 
如果你使用"March 5, 2005"来声明该变量, 你将会得到一样的结果.
 
文件types.ps1xml还可以定义属性集(property set). 属性集就是属性的集合, 这样你就可以从逻辑上将这些属性当作一个对象进行使用. 例如, PowerShell为DirectoryEntry系统类型定义了一个属性集:
 
<Type>
<Name>System.DirectoryServices.DirectoryEntry</Name>
<Members>
<MemberSet>
<Name>PsStandardMembers</Name>
<Members>
<PropertySet>
<Name>
DefaultDisplayPropertySet
</Name>
<ReferencedProperties>
<Name>
distinguishedName
</Name>
</ReferencedProperties>
</PropertySet>
</Members>
</MemberSet>
</Members>
</Type>
 
在这个 <type> 元素中, 属性集DefaultDisplayPropertySet引用了distinguishedName属性.
 
除了修改已经存在的types.ps1xml文件(译者注: 尽量不要修改PowerShell安装目录下的类型文件, 如果PowerShell升级, 可能会覆盖系统自带的文件), 你也可创建自己的types.ps1xml文件, 添加类型, 属性的定义, 甚至覆盖默认的类型和属性定义. 你可以将新的文件存放在PowerShell命令目录(译者注: 类似于PATH环境变量, PowerShell会一个一个目录的进行搜索.)中的任意一个目录. 如果你的文件定义了一个已经存在的类型或属性, 它将覆盖命令路径中较早出现的types.ps1xml中定义的重复类型或属性.
 
您还可以参考
 
需要关于Get-Member cmdlet的信息, 输入如下命令:
 
help Get-Member
 
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值