我们已经基本了解了大部分在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-Object、Sort-Object等命令里,它可灵活了,你用多了就会慢慢喜欢上这个技巧了。
本文介绍如何在PowerShell中自定义格式化信息,以满足特定场景需求。通过示例展示了如何修改列标题和进行自定义计算,使输出更易理解。例如,筛选出Id值大于2000的进程,并将Id列标题改为'Custom_Id',以整数带后两位整零的格式显示,增强了信息的可读性。
1万+

被折叠的 条评论
为什么被折叠?



