码迷,mamicode.com
首页 > 系统相关 > 详细

PowerShell 自定义输出对象格式

时间:2016-05-13 15:23:23      阅读:168      评论:0      收藏:0      [点我收藏+]

标签:powershell   对象格式   

PowerShell 的对象有很多类型,不同的类型有不同的输出格式。这些格式定义在$pshome 下面的dotnettypes.format.ps1xml里面。这个文件是有数字签名的,因此不能修改,但是我们可以依葫芦画瓢的复制粘贴内容再修改,这样子我们可以给自己定义的对象作出不同的输出效果来。

技术分享

比如说,有个function,如下所示

Function Get-SystemInfo{
[cmdletbinding()]
param(
[string[]]$ComputerName
)
begin{}
process{
$result=@()
foreach($computer in $ComputerName){
try{
write-verbose "Querying OS and Computer System"
$os=Get-WmiObject -Class win32_operatingsystem -ErrorAction Stop 
$cs=Get-WmiObject -Class win32_computersystem -ErrorAction Stop
}catch{
$computer |out-file c:\temp\error.txt -Append
}
$prop=@{ComputerName=$computer;LastBootTime=$os.ConvertToDateTime($os.LastBootUpTime);OSVersion=$os.Version;Manufacture=$cs.Manufacturer;Model=$cs.model}
$obj=New-Object -TypeName psobject -property $prop
#$obj.psobject.typenames.insert(0,‘Yuan.systeminfo‘)
write-output $obj 
}
}
end {}
}
Get-SystemInfo -ComputerName "localhost"


默认的输出类型是 pscustomobject,因此输出的结果是下面这样的

技术分享


如果添加一条语句

$obj.psobject.typenames.insert(0,‘Yuan.systeminfo‘)


这个时候如果查看 $obj | gm 的属性,可以看见他的类型变成我自定义的 yuan.systeminfo了

技术分享


接下来我们来创建一个 test.format.ps1xml 文件,在这个文件里面自定义yuan.systeminfo的格式。如下所示。下面基本上是拷贝table 的格式,只不过把对应显示的名字和属性改成我自己对象的内容。


<?xml version="1.0" encoding="utf-8" ?>
<Configuration>
<ViewDefinitions>
<View>
<Name>Yuan.SystemInfo</Name>
<ViewSelectedBy>
<TypeName>Yuan.SystemInfo</TypeName>
</ViewSelectedBy>
<TableControl>
<TableHeaders>
<TableColumnHeader/>
<TableColumnHeader>
<Label>Manufacturer</Label>
<Width>20</Width>
</TableColumnHeader>
<TableColumnHeader>
<Width>20</Width>
</TableColumnHeader>
<TableColumnHeader/>
<TableColumnHeader>
<Label>LastBootTime</Label>
</TableColumnHeader>
</TableHeaders>
<TableRowEntries>
<TableRowEntry>
<TableColumnItems>
<TableColumnItem>
<PropertyName>ComputerName</PropertyName>
</TableColumnItem>
<TableColumnItem>
<PropertyName>Manufacture</PropertyName>
</TableColumnItem>
<TableColumnItem>
<PropertyName>Model</PropertyName>
</TableColumnItem>
<TableColumnItem>
<Propertyname>OSVersion</Propertyname>
</TableColumnItem>
<TableColumnItem>
<Propertyname>LastBoottime</Propertyname>
</TableColumnItem>
</TableColumnItems>
</TableRowEntry>
</TableRowEntries>
</TableControl>
</View>
</ViewDefinitions>
</Configuration>


修改之后更新数据格式,再运行程序,发现成功更改了!

技术分享


参考资料:《Learn PowerShell Toolmaking in a month of Lunch》

本文出自 “麻婆豆腐” 博客,请务必保留此出处http://beanxyz.blog.51cto.com/5570417/1772977

PowerShell 自定义输出对象格式

标签:powershell   对象格式   

原文地址:http://beanxyz.blog.51cto.com/5570417/1772977

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!