這是我開發 PowerShell 小工具的常用技巧 - 將複雜的執行結果以 HTML 形式呈現,遠比用 Write-Output 輸出單調文字容易理解閱讀。例如:之前介紹的資料夾權限清單產生工具,用表格呈現結構化內容絕對比純文字強十倍,甚至還可寫幾行 JavaScript 動態展開收合支援互動操作,讓你的工具馬上升到另一個檔次。

除了將結果轉成 HTML 檔,我還有另一種用網頁顯示結果的方式:呼叫一串 WebAPI 更新資料後,將使用者引導到該網站的指定網頁介面檢視執行結果。

以上兩種應用,都需要用到一個小技巧:從 PowerShell 啟動瀏覽器開啟指定本機 HTML 檔或連上指定 URL。

最直覺的做法是找到 Chrome、Edge、Firefox 或 IE 的執行檔,傳入網址或檔案路徑當參數啟動,但要這樣做得偵測使用者裝了哪些瀏覽器,找到瀏覽器執行檔所在路徑,考量客戶端環境千奇百怪,想做到絕不出錯程式免不了複雜化。其實,Windows 一定會設定預設瀏覽器,將網址交給 Windows Shell,請 Windows 自己看著辦才是最不沾手的省力做法。

在 PowerShell 呼叫 Windows 以預設瀏覽器(管它是 Chrome 還是 Edge)開啟指定網頁的方法蠻簡單的,本機 HTML 檔跟遠端 URL 略有不同,講了大半天,重點只有範例的最後兩行:

$filePath = ".\demo.html"
$url = "https://blog.darkthread.net"

'<html><body>Hello, World!</body></html>' | Out-File $filePath

# Invoke-Expression 可用來執行外部程式
# 這個技巧是讓 Windows 用該檔案型別的預設應用程式開啟指定路徑的檔案
Invoke-Expression $filePath

# Start-Process 以預設瀏覽器連上該網址
Start-Process $url

同場加映,.NET Core 起 Process.Start(url) 這招會失效,連帶會影響 PowerShell 6+,這裡有一篇跨平台(Windows、Linux、MacOS)的做法 - Process.Start for URLs on .NET Core

Tips of how to launch default browser to show specific HTML file or URL from PowerShell.


Comments

Be the first to post a comment

Post a comment