PowerShell 的对象有很多类型,不同的类型有不同的输出格式。这些格式定义在$pshome 下面的dotnettypes.format.ps1xml里面。这个文件是有数字签名的,因此不能修改,但是我们可以依葫芦画瓢的复制粘贴内容再修改,这样子我们可以给自己定义的对象作出不同的输出效果来。
比如说,有个function,如下所示
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
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,因此输出的结果是下面这样的
如果添加一条语句
1
|
$obj
.psobject.typenames.insert(0,
'Yuan.systeminfo'
)
|
这个时候如果查看 $obj | gm 的属性,可以看见他的类型变成我自定义的 yuan.systeminfo了
接下来我们来创建一个 test.format.ps1xml 文件,在这个文件里面自定义yuan.systeminfo的格式。如下所示。下面基本上是拷贝table 的格式,只不过把对应显示的名字和属性改成我自己对象的内容。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
<?
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》
本文转自 beanxyz 51CTO博客,原文链接:http://blog.51cto.com/beanxyz/1772977,如需转载请自行联系原作者