最近在兩天內經歷了記憶體死去、系統毀損、機殼碎裂等等,終於電腦重灌。一堆設定都要重弄,正好也是個機會,這篇順手記一下常用好幫手 Powershell 的美化步驟。

先放一張施工後的圖鎮樓:

可以在開始圖示上用右鍵打開選單,之後點選 Powershell;或是 Win + X 打開選單,然後按 I 或 A (後者會以系統管理員身分開啟)就能開啟了。

如果選單打開還是 CMD 而不是 Powershell 的,可以先去切換成 Powershell,真的是比較好用啦(Windows Terminal 笑而不語)

剛打開的畫面是這樣的:

抱歉,光細明體我就不太行了。所以接下來就從字型這些內建設定開始!

基本設定

在上方的標題列按下右鍵,選擇內容

首先就讓我們修改字型,我這邊還是採用習慣的 更紗黑體

另外還有一些推薦的字體,可以參閱前陣子整理的 Visual studio 環境設定 —— 字型、套件、快捷鍵

補充:還有擴充了 Nerd Fonts 的等距更紗黑體:Sarasa-Gothic-Nerd-Fonts 可以選擇,Nerd Fonts 能提供許多精美的 icon 讓我們後續改主題的時候大大加分!

除了字型以外,我個人還推薦可以修改一個設定,保證質感 UPUP,那就是透明度

我個人習慣採用 80~85% 左右的透明度,搭配黑色背景。在桌面使用的時候看起來就像這樣:

可以拉回去和一開始的預設狀況做比較,透明感=質感。

另外,背景透明還有意想不到的好處,那就是——

打指令偷看可以不用切換視窗!

基於以上兩點,推薦可以調整透明度,找個適合自己的區間。但要注意,如果太透明的話會讓字跟背景糊在一起,很容易眼花,自己斟酌一下。

以上就做完了基本設定,沒意外要做兩次(一般身分和系統管理員)

安裝 posh-git

然而我們並不打算在此停止!因緣際會之下,我拜讀了這篇 使用 oh-my-posh 美化 PowerShell 樣式,頓時驚為天人,跟預設的(請自己再拉回去比對第一張圖)實在是相當有差距,於是當時就直接安裝下來了。

畢竟這是第二次安裝了,接下來的區段就記錄一下安裝 oh-my-posh 主題的流程。oh-my-posh 是受到 Linux 上 oh-my-zsh啟發誕生的,總之就是個挺讚讚的主題載入工具。

而且安裝相當方便,只需要從 Microsoft Store 或直接打 Install-Module 指令,就能從 PowerShell Gallery 把模組安裝下來囉!

在安裝 oh-my-posh 之前,由於顯示的內容包含 Git ,因此我們還要先下載另一個套件 posh-git。讓我們用系統管理員身份開啟 Powershell,並輸入以下指令來進行安裝:

Install-Module posh-git

到這一步,會有幾種狀況:

  • 提示安裝 NuGet:安裝就行了
  • 提示不安全儲存庫:安啦,選是就對了
  • 跳出錯誤,顯示「因為這個系統上已停用指令碼執行」云云,則接著看下一段落
  • 什麼事都沒發生,很順利地裝好了,請跳過下一段落

執行原則

如果跳出「因為這個系統上已停用指令碼執行…」的情況,代表遇到執行原則的部份。因為安全性考量,預設是不能執行 Powershell 腳本的,連帶也不能使用 Install-Module 這類方法。

關於執行原則,可以參閱這篇 Windows PowerShell 基本操作 - 執行 Windows PowerShell 腳本 的說明。該系列也挺實用的,值得一看,這邊我們就節錄一段來說明執行原則的種類:

  • Restricted關閉腳本檔的執行功能,這是預設的設定值。
  • AllSigned :只允許執行受信任發行者簽署過的腳本檔。
  • RemoteSigned :在本機電腦所撰寫的腳本檔,不需要簽署就可執行;但是從網際網路(例如:email、MSN Messenger)下載的腳本檔就必須經過受信任發行者的簽署才能執行。
  • Unrestricted任何腳本檔皆可被執行,但是於執行網際網路下載的腳本檔時,會先出現警告的提示視窗。

如果要確認目前的執行原則,可以使用 Get-ExecutionPolicy

這個分類也是為了保護使用者,不要亂執行一些來路不行了奇怪腳本,整個電腦打包起來送人。不過我們身為 白目 工程師,難免會有要裝套件和自己寫腳本的時候,這邊就直接調整為 Unrestricted 全面開啟吧!

調整執行原則的語法如下(必須在系統管理員身分時才有效果呦)

Set-ExecutionPolicy Unrestricted

調整完就可以繼續下載囉!

像我重灌的狀況,提示會如下圖,如果已經安裝過 Nuget 提供者,提示應該會更少。

安裝 oh-my-posh

接著讓我們安裝 oh-my-posh:

Install-Module oh-my-posh

安裝完畢後就可以來試試看囉!

更新:Oh-my-posh 也可以從 Microsoft 搜尋並安裝囉!

Image

設定主題

更新:由於 Oh-my-posh 設定主題的語法已經改變,因此移除 2020 時的內容,改為 2023 重灌電腦時找到的指令。

因為 Oh-my-posh 還蠻頻繁更新的,建議後續的操作可以開著 Oh My Posh 的官方文檔來排查一下

要更改主題的話,我們會需要使用 oh-my-posh init pwsh 這個指令,並且將該主題的 Json 檔案傳遞給 --config,例如:

oh-my-posh init pwsh --config "$env:POSH_THEMES_PATH/powerlevel10k_rainbow.omp.json" | Invoke-Expression

我們丟了一個 powerlevel10k_rainbow 這個主題的 Json 檔案路徑給 oh-my-posh,然後呼叫 Invoke-Expression 執行它,這時候主題就會變啦~

補充:這邊用到一組環境變數 $env:POSH_THEMES_PATH 實際上是一個資料夾路徑,Oh-my-posh 安裝的主題都會放在這個資料夾裡:

Image

如果你有自己下載的主題,可以也丟到 POSH_THEMES_PATH 的位置,或是直接更改 --config 的路徑就可以了。

每個主題的樣式都不大一樣,可以翻一下 Oh-my-posh 的 Themes 頁面挑個喜歡的。

撰寫腳本

聰明的你一定發現了,每次重開都要重輸入一次 init 實在是很麻煩。因此我們接著要設定讓它能一打開就載入主題。

當 Powershell 開啟時,預設會去讀取使用者的設定檔(Profile),我們就是要把這些指定加到設定檔裡,讓 Powershell 一打開就能美美的。

在 Powershell 裡輸入 $PROFILE 就能取得當前的設定檔位置,通常來說會在 我的文件\WindowsPowerShell 底下。

補充:Powershell 啟動時會依序檢查四個位置來載入設定檔,分別為

  • 所有使用者及所有 Shell: $PSHOME\profile.ps1
  • 所有使用者的 Powershell: $PSHOME\Microsoft.PowerShell_profile.ps1
  • 目前登入者的所有 Shell: $Home\My Documents\WindowsPowerShell\profile.ps1
  • 目前使用者的 Powershell: $Home\My Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1

其中的變數

  • $PSHOME 是指 Powershell 的安裝目錄,通常在 system32 的 WindowsPowerShell 底下
  • $Home 則是使用者的主目錄,也就是大家熟悉的 users/{你的名稱}
  • 而前面提到的 $PROFILE 就是指「目前使用者的 Powershell」這組

對設定檔有興趣的朋友可以參照保哥的文章及官方文檔:

接著我們就前往此處去修改 Powershell 的腳本,如果發現並沒有這個檔案,那還請自己建立一個,檔名和路徑請和 $PROFILE 一致,像我就取 Microsoft.PowerShell_profile.ps1

之後開啟檔案,貼上我們引入套件和設定主題的指令:

oh-my-posh init pwsh --config "$env:POSH_THEMES_PATH/powerlevel10k_rainbow.omp.json" | Invoke-Expression

再次補充:oh-my-posh 改版之後一些語法有改變,如果有在 Set-Theme 這步的時候遇到「無法辨識…」問題的朋友,可以嘗試改成用 Set-PoshPrompt -Theme Paradox 試試看。

接著讓我們重開 Powershell

Image

可以看見它已經順利載入主題囉!

因為我覺得切主題前跑那些 Powershell 提示之類的有點醜,所以我會回去 Profile 補一行 Clear:

oh-my-posh init pwsh --config "$env:POSH_THEMES_PATH/powerlevel10k_rainbow.omp.json" | Invoke-Expression
clear

也可以在這裡寫一些 function 來使用,像我個人之前做 我要訂便當 因為懶得每次都 cd 到腳本所在的位置還要 Pyhton 執行,所以就直接包成 Get-Bandon 的方法直接叫,真的舒服,推薦嘗試

如果有想要自己試試新增主題,或是想像我一樣做小修改的,可以到 $env:POSH_THEMES_PATH 這個路徑的資料夾,找到 .omp.json 檔案來動手

例如說把 powerlevel10k_rainbow.omp.json 開啟後,就可以看見組出那一串資訊的過程,也就可以隨意更改囉。我就特愛把一些 icon 都改成 °д°,感覺活潑多了(?)

補充:該路徑會根據安裝 oh-my-posh 的位置而變動,基本上開 Powershell 直接從環境變數的路徑下去找比較快。真的找不到的話也可以下載別人的主題改一改,再修改 `–config`` 的路徑指到自己改好的 json 就好囉

順便提一下,載入使用者設定對用到 Powershell 的地方都有效喲!

例如 Visual Studio Code 的 Powershell

或是 Visual Studio 的開發人員用 Powershell

都是會吃到個人使用者的設定的。

那麼今天就到這裡,最後再把完成品跟預設狀況比對一次吧~

2023 回來更新文章,順便附個現況:

Image

同場加映:

跟朋友志得意滿地說明了 Powershell 美化作戰後,對方只說了淡淡的一句

「哦,我都直接 Cmder

那又是另一個故事了……

參考資料