标签: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 对象格式
原文地址:http://beanxyz.blog.51cto.com/5570417/1772977