从零开始学PowerShell(5) 自定义格式化信息

本文介绍如何在PowerShell中自定义格式化信息,以满足特定场景需求。通过示例展示了如何修改列标题和进行自定义计算,使输出更易理解。例如,筛选出Id值大于2000的进程,并将Id列标题改为'Custom_Id',以整数带后两位整零的格式显示,增强了信息的可读性。

我们已经基本了解了大部分在PowerShell中的格式化输出命令的使用,但是我们之前做的内容的格式化也仅仅是针对现有输出的内容做一些排版格式的输出,在某些场景需求下,这样的排版还是显得过于单调。所以今天要讲一下如何自定义格式化信息。这是个很有趣的话题,所以单独放在了一篇文章里讲。

PowerShell输出的信息内容其实默认是经过排版的,基本以表单的形式,像下面这样。
这里写图片描述
为了更好的说明自定义格式化信息的用意,我来假设一个场景需求。我需要罗列出Id值大于2000的进程信息,但一定要输出的信息给别人一看就明白,该怎么做呢?我们都知道,表单能让人一眼就看明白主要取决于行列标题,一个清晰明确的行标题名称能给阅读者一目了然的作用,所以我们就要从行列标题下手。

老样子,先放出实现的代码行如下。

Get-Process | Where-Object{$_.Id -gt 2000} | Format-Table ProcessName, @{Expression={$_.Id}; Name="Id>2000"}

我们从输出的信息结果就可以看到,ID那一栏的行标题被我修改为了了Id>2000我可以把这个输出传递给任何需要这个场景的人,他们一看就知道这一列的信息罗列的是Id值大于2000的进程信息。
这里写图片描述
现在让我们来分析下这个命令行到底做了什么,整个命令行的逻辑是一开始我们用Get-Process | Where-Object{$_.Id -gt 2000}完成最基本的条件过滤,过滤出所有Id值大于2000的进程信息。

接下去是关键,我们使用了一个小技巧来自定义格式化我们的输出内容,我们使用了Format-Table ProcessName, @{Expression={$_.Id}; Name="Id>2000"},如果不用自定义的方式我们将会这样写Format-Table ProcessName, Id,这样你可以看出区别了吧。我把Id那一列写成了@{Expression={$_.Id}; Name="Id>2000"}这一行其实是一个哈希表表达式,格式的语法基本是@{Expression={你想修改的属性列};Name="属性列更改后的名称"}

既然使用的是哈希表的方式来自定义格式化输出,我们就可以直接以自定义哈希表的方式来灵活自定义格式化输出。在PowerShell中定义哈希表的写法是@{},所以我们可以换成如下的方式去赋值。(其实这种方式在PowerShell中也有个专门的技巧说法那就是Splatting,大家如果对Splatting感兴趣可以查看我之前写的使用Splatting方传递参数来更好的了解用法。)

# 将自定义的哈希表表达式赋值给变量CustomColumn
$CustomColumn = @{Expression="Id"; Name="Id>2000"}
# 直接调用变量即可
Get-Process | Where-Object{$_.Id -gt 200} | Format-Table ProcessName, $CustomColumn

除了修改行标题名称以外,还可以对属性值做很多自定义计算操作等等,比如我把Id属性值以整数带后两位整零的格式(如:*.00)输出。

Get-Process | Format-Table Name, @{Expression={$_.Id}; Name="Custom_Id"; FormatString="N2"}

这里我增加了一个哈希键值FormatString="N2" 这个主要是告诉PowerShell这一列定义输出的内容都以整数格式输出并且保留后两位整零格式。你可以看到下面所有我们自定义的Custom_Id列都类似*.00格式输出了。
这里写图片描述
当然哈希表自定义格式化不仅仅只是在Format类型的命令格式化输出中使用哦,也可以用于Select-ObjectSort-Object等命令里,它可灵活了,你用多了就会慢慢喜欢上这个技巧了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值