第 1 章 - 開始使用 PowerShell

我經常發現演示者在會議和使用者群組會議開始進入層級簡報時,已經執行PowerShell。 這本書從回答我聽過的出席者在那些課程中尚未使用PowerShell詢問的問題開始。

具體來說,本章著重於尋找和啟動PowerShell,並解決新使用者使用PowerShell的一些初始痛點。 請務必遵循並逐步解說您 Windows 10 實驗室環境計算機上本章所示的範例。

我需要如何開始使用PowerShell?

已安裝PowerShell的所有新式 Windows 作業系統版本。 如果您執行的版本早於 5.1,您應該安裝最新版本。

哪裡可以找到PowerShell?

在 Windows 10 上尋找 PowerShell 最簡單的方式是將 PowerShell 輸入搜尋列,如圖 1-1 所示。

圖 1-1 - 在 [開始] 功能表中搜尋 PowerShell

請注意,圖 1-1 顯示 PowerShell 的四個不同的快捷方式。 本書中用於示範用途的計算機是執行 64 位版本的 Windows 10,因此在快捷方式上會有 64 位版本的 PowerShell 控制台和 PowerShell ISE(整合式腳本環境),以及每個版本 32 位的版本,如快捷方式上的 x86) 後綴所表示。 如果您碰巧執行 32 位版本的 Windows 10,則只有兩個快捷方式。 這些項目沒有 (x86) 後綴,但為32位版本。 如果您有64位操作系統,我的建議是執行64位版本的PowerShell,除非您有執行32位版本的特定原因。

如需在其他 Windows 版本上啟動 PowerShell 的相關信息,請參閱 啟動 Windows PowerShell

如何? 啟動 PowerShell 嗎?

在支援的生產企業環境中,我使用三個不同的 Active Directory 用戶帳戶。 我已經鏡像了這本書中使用的實驗室環境中那些帳戶。 我以不是網域或本機系統管理員的網域使用者身分登入 Windows 10 計算機。

我已按兩下 [Windows PowerShell] 快捷方式來啟動 PowerShell 控制台,如圖 1-1 所示。

圖 1-4 - PowerShell 視窗的標題列

請注意,PowerShell 控制台的標題欄會顯示 「Windows PowerShell」,如圖 1-4 所示。 某些命令會正常執行,但 PowerShell 無法參與使用者 存取控制 (UAC)。 這表示無法針對需要系統管理員核准的工作提示提高許可權。 會產生下列錯誤訊息:

Get-Service -Name W32Time | Stop-Service
Stop-Service : Service 'Windows Time (W32Time)' cannot be stopped due to the following
error: Cannot open W32Time service on computer '.'.
At line:1 char:29
+ Get-Service -Name W32Time | Stop-Service
+
    + CategoryInfo          : CloseError: (System.ServiceProcess.ServiceController:ServiceController)
     [Stop-Service], ServiceCommandException
    + FullyQualifiedErrorId : CouldNotStopService,Microsoft.PowerShell.Commands.StopServiceCommand

此問題的解決方案是以身為本機系統管理員的網域使用者身分執行PowerShell。 這是我第二個網域用戶帳戶的設定方式。 使用最低許可權原則時,此帳戶不應該是網域系統管理員,或擁有網域中任何提高的許可權。

關閉 PowerShell。 重新啟動PowerShell控制台,但這次以滑鼠右鍵按下 Windows PowerShell 快捷方式,然後選取 [以系統管理員身分執行] ,如圖 1-5 所示。

圖 1-5 - 操作選單 - 以系統管理員身分執行

如果您是以一般使用者身分登入 Windows,系統會提示您輸入認證。 我將輸入身為網域使用者和本機系統管理員的用戶帳戶認證,如圖 1-6 所示。

圖 1-6

一旦以系統管理員身分重新啟動PowerShell,標題列應該會顯示「管理員 istrator:Windows PowerShell」,如圖 1-7 所示。

圖 1-7

現在 PowerShell 是以本機系統管理員身分執行,因此當本機計算機上執行命令通常需要提高許可權提示時,UAC 將不再是問題。 請記住,雖然任何從 PowerShell 控制台提升許可權實例執行的命令也會提升許可權。

為了簡化尋找 PowerShell 並將其啟動為系統管理員,建議您將它釘選到任務列,並將它設定為在每次執行時以系統管理員身分自動啟動。

再次搜尋 PowerShell,但這次以滑鼠右鍵按兩下 PowerShell,然後選取 [釘選到任務欄],如圖 1-8 所示。

圖 1-8

以滑鼠右鍵按兩下現在釘選到任務列的 PowerShell 快捷方式,然後選取屬性,如圖 1-9 所示。

圖 1-9 - 使用者帳戶控制 - 輸入認證

按兩擊圖 1-10 中 #1 所表示的 [進階],然後核取圖 1-10 中 #2 所表示的 [以系統管理員身分執行] 複選框,然後按兩次以接受變更並結束這兩個對話框。

圖 1-10 - 顯示「管理員 istrator」的標題欄

您永遠不需要擔心是否要尋找PowerShell,或是否再次以系統管理員身分執行。

以系統管理員身分執行 PowerShell 以防止 UAC 發生問題,只會影響針對本機電腦執行的命令。 它不會影響以遠端電腦為目標的命令。

我執行的 PowerShell 版本為何?

PowerShell 中有數個自動變數可儲存狀態資訊。 其中一個變數是 $PSVersionTable,其中包含可用來顯示相關 PowerShell 版本資訊的哈希表:

$PSVersionTable
Name                           Value
----                           -----
PSVersion                      5.1.19041.1
PSEdition                      Desktop
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.19041.1
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1

較新版本的 Windows PowerShell 會散發為 Windows Management Framework (WMF) 的一部分。 視 WMF 版本而定,需要特定版本的 .NET Framework。 若要升級至 Windows PowerShell 5.1,請參閱 升級現有的 Windows PowerShell

執行原則

與大眾信念相反,PowerShell 中的執行原則不是安全性界限。 其設計目的是防止使用者不知情地執行腳本。 決定的使用者可以輕鬆地略過PowerShell中的執行原則。 表 1-2 顯示目前 Windows 作業系統的預設執行原則。

Windows 作業系統版本 默認執行原則
Server 2019 遠程簽署
Server 2016 遠程簽署
Windows 10 受限制

不論執行原則設定為何,都可以以互動方式執行任何 PowerShell 命令。 執行原則只會影響腳本中執行的命令。 Cmdlet Get-ExecutionPolicy 可用來判斷目前執行原則設定是什麼,而 Set-ExecutionPolicy Cmdlet 則用來變更執行原則。 我的建議是使用 RemoteSigned 原則,這需要由受信任的發行者簽署下載的腳本才能執行。

檢查目前的執行原則:

Get-ExecutionPolicy
Restricted

當執行原則設定為 [限制] 時,完全無法執行 PowerShell 腳本。 這是所有 Windows 用戶端作業系統的預設設定。 若要示範問題,請將下列程式代碼儲存為名為 Stop-TimeService.ps1.ps1檔案。

提示

PowerShell 腳本是一 .ps1 個純文本檔案,其擴展名包含您想要執行的命令。 若要建立 PowerShell 腳本,請使用 Visual Studio Code (VS Code) 之類的程式碼編輯器或任何文本編輯器,例如 記事本。

Get-Service -Name W32Time | Stop-Service -PassThru

只要 PowerShell 以系統管理員身分提升許可權,該命令就會以互動方式執行,而不會發生錯誤。 但是,一旦它儲存為腳本檔案,而且您嘗試執行腳本,就會產生錯誤:

.\Stop-TimeService.ps1
.\Stop-TimeService.ps1 : File C:\demo\Stop-TimeService.ps1 cannot be loaded because
running scripts is disabled on this system. For more information, see
about_Execution_Policies at http://go.microsoft.com/fwlink/?LinkID=135170.
At line:1 char:1
+ .\Stop-TimeService.ps1
+
    + CategoryInfo          : SecurityError: (:) [], PSSecurityException
    + FullyQualifiedErrorId : UnauthorizedAccess

請注意,上一組結果中顯示的錯誤會告訴您問題確切為何(在此系統上停用執行腳本)。 當您在PowerShell中執行會產生錯誤訊息的命令時,請務必讀取錯誤訊息,而不要只重新執行命令,並希望它成功執行。

將 PowerShell 執行原則變更為遠端簽署。

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
Execution Policy Change
The execution policy helps protect you from scripts that you do not trust. Changing the execution
policy might expose you to the security risks described in the about_Execution_Policies help topic
at http://go.microsoft.com/fwlink/?LinkID=135170. Do you want to change the execution policy?
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "N"):y

請務必閱讀變更執行原則時顯示的警告。 我也建議您看看 about_Execution_Policies 說明主題,以確保您瞭解變更執行原則的安全性影響。

現在,執行原則已設定為 RemoteSigned,腳本就會 Stop-TimeService.ps1 執行無錯誤。

.\Stop-TimeService.ps1
Status   Name               DisplayName
------   ----               -----------
Stopped  W32Time            Windows Time

請務必先啟動您的 Windows Time 服務,然後再繼續,否則可能會遇到未預期的問題。

Start-Service -Name w32time

摘要

在本章中,您已瞭解如何尋找並啟動PowerShell,以及如何建立以系統管理員身分啟動PowerShell的快捷方式。 您也已了解預設執行原則以及如何變更它。

檢閱

  1. 如何判斷電腦執行哪些 PowerShell 版本?
  2. 為什麼以系統管理員身分啟動PowerShell很重要?
  3. 如何判斷目前的PowerShell執行原則?
  4. Windows 用戶端電腦上預設的 PowerShell 執行原則為何會防止發生?
  5. 如何變更 PowerShell 執行原則?

對於想要瞭解本章所涵蓋主題的詳細資訊,我建議閱讀下列PowerShell說明主題。

在下一章中,您將瞭解 PowerShell 中命令的可探索性。 其中一項涵蓋內容是如何更新PowerShell,以便直接從PowerShell中檢視這些說明主題,而不必在因特網上檢視它們。