从零开始学PowerShell(5)自定义格式化信息
我們已經基本了解了大部分在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(5)自定义格式化信息的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: rabbitmq简单收发服务搭建
- 下一篇: pop3常用命令记录