PowerShell 自定义输出对象格式

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

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

Function Get-SystemInfo{
[cmdletbinding()]
param(
[string[]]$ComputerName
)
begin{}
process{
[email protected]()
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
}
[email protected]{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》

时间: 2024-08-28 17:18:02

PowerShell 自定义输出对象格式的相关文章

PowerShell自定义对象

前面的性能高 使用[pscustomobject][ordered]强制类型转换 [pscustomobject][ordered]@{Name= 'Boe'Number = 1ID = 007} 使用[pscustomobject]强制类型转换 [pscustomobject]@{Name= 'Boe'Number = 1ID = 007} 初始化OrderedPSObject New-Object pscustomobject -Property([ordered]@{Name= 'Boe'

Powershell 自定义对象小技巧

豆子之前在脚本里面自定义对象的时候一般是这么考虑的,我需要创建一个数组,每次循环的时候把一个自定义的对象放进去,对于这个自定义的对象的结构,我需要创建一个哈希表,然后转换成自定义对象.这个思路是没错,不过具体写的时候有些小技巧. 比如说最近看的一个小挑战,其中需要把下面这个$list的值自定义一个对象保存出来. $list = @" 1 Partridge in a pear tree 2 Turtle Doves 3 French Hens 4 Calling Birds 5 Golden R

C#中如何将List&lt;自定义&gt;转为Json格式 及相关函数-DataContractJsonSerializer

对C#和.net使用List<自定义>和Json格式相互转化的方法进行总结 关于JSON的入门介绍见http://www.json.org/ ,或者百度,这里不赘述,不过通过下面的例子会有个更快捷和更直观的认识. 如Json格式[{"id":"1","name":"sara"},{"id":"2","name":"sara2"}] 自定

idea自定义数据导出格式

最近需要从数据库导出特定格式的数据,写代码导太麻烦了,试了几个mysql客户端都只能导固定格式的,最后发现idea的Database工具可以自定义导出的格式,所以就试了下. 导出功能在这个位置 当然这些是idea默认的,想自定义点击Go to Scripts Directory 可以直接修改原来的脚本,也可以新建,新建的也会在刚才的右键菜单里显示,很方便.   从原来的脚本可以看出,idea支持三种脚本语言:js.groovy和clojure,可以用自己熟悉的语言写,这里我选的是js.   最终

自定义动态对象

1,自定义动态对象需要继承DynamicObject类 2,可根据需要,重写不同的DynamicObject方法 -----------------------------------------------------DynamicClass.cs  using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using S

在JavaScript中生成自定义的对象

使用对象便于组织信息.下面我们介绍如何在JavaScript中生成自定义的对象. ---------------------- JavaScript 对象 在前面几章中我们学到JavaScript中有些内置的对象,比如String, Date, Array等等.除此之外,你还可以定义自己的对象. 对象是一种特殊的数据,含有属性和函数. 下面让我们用一个例子来说明:比如一个人是一个对象.属性是与对象有联系的值,比如人的属性包括姓名,身高,体重,年龄,肤色,眼睛的颜色等等.所有人都有这些属性,但是每

QT: QByteArray储存二进制数据(包括结构体,自定义QT对象)

因为利用QByteArray可以很方便的利用其API对内存数据进行访问和修改, 构建数据库blob字段时必不可少; 那如何向blob内写入自定义的结构体和类 1. 利用memcpy拷贝内存数据 //自定义person结构体 Cpp代码   typedef struct { int age; char name[20]; }Person; //向QByteArray写入多个结构体 void writeStruct() { QByteArray ba; ba.resize(2*sizeof(Pers

Asp.net动态页面静态化之输出对象属性(实体关联)

Asp.net动态页面静态化之输出对象属性(实体关联) 模板引擎不单单可以输出单一的数据,还能直接输出对象的属性 using System; using System.Collections.Generic; using System.Linq; using System.Web; using NVelocity.Runtime; using NVelocity; using NVelocity.App; namespace czbk { /// <summary> /// Handler2

SAP中自定义输出字段的ALV实例

这是运行的结果.对于我们的数据表我们需要字段可以自定义以ALV的格式输出. 特别注意点:wa_alv_field-fieldname = 'EMPID'.这个地方 EMPID一定要大写否则会在运行时报错. *&---------------------------------------------------------------------* *& Report  ZTBALV1 *& *&---------------------------------------