The Will Will Web | 如何在 Powershell 開啟時自動引入常用的 ps1 指令檔腳本

The Will Will Web

記載著 Will 在網路世界的學習心得與技術分享

如何在 Powershell 開啟時自動引入常用的 ps1 指令檔腳本

最近公司內負責 IT 的同事希望能透過 Powershell 測試遠端主機的 HTTP ( Port 80 ) 是否斷線,在以前,大家可能都會安裝 telnet 工具程式來做 TCP 測試,但在伺服器安裝 telnet 工具程式不是個好習慣,因為早期經常有許多駭客程式會利用系統內建的 telnet 程式發動一些攻擊或測試,所以近幾代的 Windows 也都變成預設不安裝 telnet 程式,如果你希���在沒有安裝 telnet 程式的情況下完成 HTTP 連線偵測,就可以利用 Powershell 達成這個目標。不過,每次開啟 Powershell 都要輸入長長的指令或每次都要手動載入 ps1 指令檔不是很麻煩嗎?今天我就來說說怎樣讓這些常用的 ps1 指令檔腳本在你開啟 Powershell 的同時就自動載入完成。

微軟有個 Script Center 網站,收納了許多各式各樣的 Powershell 指令檔腳本與 VBScript 指令檔,對於系統管理者來說是個大寶庫,只要你會搜尋、會使用,基本上各式各樣的管理指令檔都可以在這裡找到,不但能找到適用的指令檔,也能從中學習到很多,稍加修改就能用在自己日常的管理工作上。

對於「測試遠端主機的 HTTP ( Port 80 ) 是否有正常連線」這個需求,我就找到一個 Test-Port 指令檔,可以方便用來完成這個任務(此腳本除了能測試 TCP 連線外,還可以測試 UDP 連線喔)。如下圖示,點選 Test-Port.ps1 即可下載該指令檔腳本:

 

開啟這個 Test-Port.ps1 腳本的原始碼來看,可以發現作者已經把這個 Test-Port 寫成了程式庫(function),也就是只要將 Test-Port.ps1 載入執行環境後,就能直接使用 Test-Port cmdlet 執行:

 

※ 載入 ps1 程式庫的方法

在 Powershell 裡,載入程式庫的方式是用一個 小數點 ( dot ) 開頭,然後接著一個 *.ps1 的檔名路徑,這種載入方式又稱為 dot sourcing 方法。如下圖示:

接著,就可以順利使用這個程式庫裡提供的 function 來用,如下圖示:

由於 Powershell 中所有的變數都是「物件」,所以輸出的格式還能用「表格」的方式呈現,如果你一次檢測多台電腦或網站的話,可以搭配 Format-Table 來呈現,如下圖示:

 

※ 開啟 Powershell 時自動載入 ps1 程式庫的方法

由於用 dot sourcing 方法載入 ps1 腳本,只會影響或套用到目前登入或開啟的這個 Powershell Console 工作階段,如果你在日常的管理工作上經常需要載入這支 Test-Port.ps1 腳本,每次都要載入程式庫還挺煩人的,這時你必須瞭解 Windows PowerShell Profiles 的觀念。

Windows PowerShell Profiles 是指一個 Windows PowerShell 的設定檔(Profiles),也就是說,如果你有正確設定一個 Windows PowerShell 設定檔,每次開啟 Windows PowerShell 的同時,就會預設載入這個設定檔,而這個設定檔的內容,其實就是 PowerShell 的指令檔。

在 Windows PowerShell 裡,設定檔可以放在以下這 4 個檔名路徑,而且會依序載入,如果找不到檔案也會自動跳過,不會引發錯誤:

  1. %windir%\system32\WindowsPowerShell\v1.0\profile.ps1
    這個設定檔 ( profile.ps1 ) 會載入到所有使用者與所有 shell 執行環境。
  2. %windir%\system32\WindowsPowerShell\v1.0\Microsoft.PowerShell_profile.ps1
    這個設定檔 ( Microsoft.PowerShell_profile.ps1 ) 會載入到所有使用者,但僅限於使用 Microsoft.PowerShell 的 shell 執行環境。
  3. %UserProfile%\My Documents\WindowsPowerShell\profile.ps1
    這個設定檔 ( profile.ps1 ) 會載入到目前登入的使用者,且會套用到該使用者所有 shell 執行環境。
  4. %UserProfile%\My Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
    這個設定檔 ( Microsoft.PowerShell_profile.ps1 ) 會載入到目前登入的使用者,但僅限於使用 Microsoft.PowerShell 的 shell 執行環境。

這 4 個設定檔,預設並沒有自動被建立,如果你要建立設定檔的話,自行建立相對應的目錄與 ps1 檔案即可,以自動載入 Test-Port.ps1 來說,你可以有兩種設定方法:

  1. 建立一個設定檔,假設位於 我的文件\WindowsPowerShell\profile.ps1
    假設你的 Test-Port.ps1 置於 G:\ 目錄下,你就可以將 profile.ps1 輸入以下內容:
    . G:\Test-Port.ps1
  2. 建立一個設定檔,假設位於 我的文件\WindowsPowerShell\profile.ps1
    將你下載的 Test-Port.ps1 腳本內容,完整複製到 profile.ps1 檔案裡。

 

當然,這個 Windows PowerShell 設定檔(Profiles) 可以放置的不僅僅是載入程式庫而已,你要設定預設變數、設定 alias 指令別名、加入額外的 Windows PowerShell snap-in (匯入模組)、其他自訂的 function 等等,通通都可以,是不是非常方便呢! :-)

 

相關連結