在 Windows PowerShell 中執行指令碼並設定執行原則

已完成

您必須先知道如何執行 Windows PowerShell 指令碼,才能開始修改 Windows PowerShell 指令碼或建立自己的指令碼。 您可能已熟悉以下概念:按兩下可執行檔或選取可執行檔,然後選取 Enter 來加以執行,但該程序不適用於 Windows PowerShell 指令碼。

許多指令碼語言的其中一個問題是很容易意外執行指令碼。 使用者不小心按兩下指令碼或選取指令碼,然後選取 Enter。 當副檔名隱藏時,此動作特別有問題,而會以電子郵件附件的形式將惡意程式碼包含在內。 例如,名為 receipt.txt.vbs 的 附加檔案會顯示為 receipt.txt ,使用者會不小心執行它,認為這是簡單的文本檔。 對 Windows PowerShell 指令碼來說,此設定不是問題,因為執行指令碼需要進行一些動作。

與檔案總管整合

若要讓 Windows PowerShell 指令碼更安全,.ps1 副檔名會與記事本相關聯。 因此,當您按兩下 .ps1 檔案或加以選取,然後選取 Enter,其會在記事本中開啟。 此設定表示使用者無法按兩下或選取 Windows PowerShell 指令碼,然後選取 Enter 來執行 Windows PowerShell 指令碼。

當您以滑鼠右鍵按一下 Windows PowerShell 指令碼或啟動其捷徑功能表時,您有三個選項:

  • 開啟。 此選項會在記事本中開啟指令碼。
  • 使用 PowerShell 執行。 此選項會執行指令碼,但指令碼完成時,Windows PowerShell 提示不會保持開啟狀態。
  • 編輯。 此選項會在 Windows PowerShell ISE 中開啟指令碼。

在大部分案例下,您希望在執行指令碼時,Windows PowerShell 提示保持開啟狀態。 若要執行這項工作,請從已開啟的 Windows PowerShell 提示執行指令碼。

在 PowerShell 提示中執行指令碼

在命令提示字元中執行可執行檔時,您可以輸入其名稱以在現行目錄中加以執行。 例如,當目前目錄為 C:\app 時,您可以輸入 app.exe 來執行 C:\app\app.exe。 您無法使用此程序來執行 Windows PowerShell 指令碼,因為其不會搜尋目前的目錄。

若要在 Windows PowerShell 提示中執行 Windows PowerShell 指令碼,您可以使用下列方法:

  • 輸入文本的完整路徑;例如, C:\Scripts\MyScript.ps1
  • 輸入文本的相對路徑;例如, \Scripts\MyScript.ps1
  • 參考目前目錄;例如, \MyScript.ps1

指令碼執行原則

您可以控制是否可以在 Windows 電腦上執行 Windows PowerShell 指令碼。 您可以在電腦上設定執行原則來執行這項工作。 電腦上的預設執行原則會根據作業系統版本而有所不同。 若要確定目前的組態,您可以使用 Get-ExecutionPolicy Cmdlet。

執行原則的選項如下:

  • 受限制。 不允許執行任何指令碼。
  • AllSigned。 只有當指令碼經過數位簽署時,才能執行。
  • RemoteSigned。 下載的指令碼只在經過數位簽署後才能執行。
  • 不受限制。 您可以執行所有指令碼,但執行下載的未簽署指令碼時會顯示確認提示。
  • 略過。 所有指令碼都會在沒有提示的情況下執行。

注意

設定指令碼執行原則可提供安全網路,以防止不受信任的指令碼意外執行。 不過,一律可以覆寫執行原則。

您可以使用 Set-ExecutionPolicy Cmdlet 在電腦上設定執行原則。 不過,您難以跨多部電腦管理此設定。 當您設定許多電腦的執行原則時,您可以使用 電腦設定\原則\系統管理範本\Windows 元件\Windows PowerShell\開啟腳本執行 組策略設定來覆寫本機設定。

您可以覆寫個別 Windows PowerShell 執行個體的執行原則。 如果公司原則需要將執行原則設定為 [受限制],但您仍必須偶爾執行腳本,此設定會很有用。 若要覆寫執行原則,請使用 -ExecutionPolicy 參數執行 PowerShell.exe

Powershell.exe -ExecutionPolicy ByPass

如果您已修改從網際網路下載的指令碼,指令碼仍具有屬性,可將其識別為已下載的檔案。 若要從腳本中移除該狀態,請使用 Unblock-File Cmdlet。