利用簡單的 HTTP api 來執行 PowerShell 腳本

在某些情境下您可能不需要使用到 PSRP  (PowerShell Remoting Protocol),或是您希望將一些 PowerShell 腳本執行於 Windows 之外的作業系統,在這邊我們提供一個簡單的方式來遠端呼叫 PowerShell 腳本,自從現代化程式語言使 REST api 能更簡易地展現 HTTP GET 的運行,REST api 成為一個非常好的選擇。

在此 PowerShell 腳本中的 HTTP Listener 是使用 .NET HttpListener class。首先先簡單開啟一個 instance of the listener,即可開始執行任何 PowerShell command-line,一旦您安裝好 module (只需複製 HttpListener 資料夾到 Documents\WindowsPowerShell\Modules 資料夾) 並完成匯入動作,就可以利用 Start-HTTPListener Commandlet 來啟動 instance。

 image

程式預設是將 listen 設在 port 8888 並使用 Integrated Windows Authentication,但這些都是參數,在這邊,我們開啟另個 PowerShell 視窗並執行 “get-process powershell”。

image

請注意我們使用 –UseDefaultCredentials 來確保我們授權現在的資料,否則您會收到 Access Denied 的訊息。

程式預設 return output 是 JSON,但因 JSON 物件太龐大被截掉了, HTTP 回應的 body 將在 Conten Property 中,但是是 byte array,我們使用 UTF8 .NET class 來解碼。

image

在這邊我們利用 ConvertFrom-Json 來讓內容能在 PowerShell 中整齊呈現。

image

當然,若您使用不同的語言,像是 Python, Perl 或 Ruby,那麼您可以使用這些語言的 script libraries 來使用 JSON 版本。

image

至於其他的格式選項都是可使用的,若您呼叫 HTTP 不給任何參數,那麼您將會得到基本的 usage information。

image

這份程式碼您可以在這裡下載,並取得更多說明,謝謝。