從 Configuration Manager 主控台建立和執行 PowerShell 腳本

適用於:Configuration Manager (目前的分支)

Configuration Manager具有執行 PowerShell 腳本的整合功能。 PowerShell 的優點是建立複雜、自動化的腳本,以瞭解並與較大的社群共用。 這些腳本可簡化建置自訂工具來管理軟體,並可讓您快速完成一般工作,讓您更輕鬆且更一致地完成大型工作。

注意事項

在 2006 版和更早版本中,Configuration Manager預設不會啟用此選擇性功能。 您必須先啟用此功能,才能使用它。 如需詳細資訊,請 參閱從更新啟用選擇性功能

透過Configuration Manager中的這項整合,您可以使用執行腳本功能來執行下列動作:

  • 建立和編輯腳本以與Configuration Manager搭配使用。
  • 透過角色和安全性範圍管理腳本使用方式。
  • 在集合或個別的內部部署管理 Windows 電腦上執行腳本。
  • 在集合或個別內部部署管理的 Windows 電腦上,以 UTC 排程腳本的執行時間。
  • 從用戶端裝置取得快速匯總的腳本結果。
  • 監視腳本執行,並檢視腳本輸出的報告結果。

警告

  • 基於腳本的功能,我們提醒您刻意謹慎使用腳本。 我們已內建額外的保護措施來協助您;隔離的角色和範圍。 請務必先驗證腳本的正確性,再執行腳本,並確認它們來自信任的來源,以防止非預期的腳本執行。 請留意擴充字元或其他混淆,並教育自己如何保護腳本。 深入瞭解 PowerShell 腳本安全性
  • 某些反惡意程式碼軟體可能會不小心針對Configuration Manager執行腳本或 CMPivot 功能觸發事件。 建議您排除 %windir%\CCM\ScriptStore,讓反惡意程式碼軟體允許這些功能在不受干擾的情況下執行。

必要條件

  • 若要執行 PowerShell 腳本,用戶端必須執行 PowerShell 3.0 版或更新版本。 不過,如果您執行的腳本包含來自更新版本 PowerShell 的功能,則您執行腳本的用戶端必須執行該版本的 PowerShell。
  • Configuration Manager用戶端必須從 1706 版或更新版本執行用戶端,才能執行腳本。
  • 若要使用腳本,您必須是適當Configuration Manager安全性角色的成員。
  • 若要匯入和撰寫腳本 - 您的帳戶必須具有SMS 腳本建立許可權。
  • 若要核准或拒絕腳本 - 您的帳戶 必須具有SMS 腳本的核准許可權。
  • 若要執行腳本 - 您的帳戶必須具有集合的執行腳本許可權

如需Configuration Manager安全性角色的詳細資訊:
執行腳本
的安全性範圍 執行腳本
的安全性角色以角色為基礎的系統管理基本概念

限制

執行腳本目前支援:

  • 指令碼語言:PowerShell
  • 參數類型:整數、字串和清單。

警告

請注意,使用參數時,它會開啟介面區,以降低潛在的 PowerShell 插入式攻擊風險。 有各種方法可以緩解和解決,例如使用正則運算式來驗證參數輸入或使用預先定義的參數。 常見的最佳做法是不要在 PowerShell 腳本中包含秘密, (不包含密碼等 ) 。 深入瞭解 PowerShell 腳本安全性

執行腳本作者和核准者

執行腳本會使用 腳本作者腳本核准者 的概念作為腳本實作和執行的個別角色。 將作者和核准者角色分開,可讓您對執行腳本的強大工具進行重要的程式檢查。 另外還有 一個腳本執行者 角色可允許執行腳本,但不允許建立或核准腳本。 請參閱 建立腳本的安全性角色

腳本角色控制項

根據預設,使用者無法核准他們所撰寫的腳本。 因為腳本功能強大、多功能,而且可能部署到許多裝置,所以您可以在撰寫腳本的人員與核准腳本的人員之間分隔角色。 這些角色可提供額外的安全性層級,防止在沒有監督的情況下執行腳本。 您可以關閉次要核准,以方便測試。

核准或拒絕腳本

腳本必須經過 腳本核准者 角色核准,才能執行。 若要核准腳本:

  1. 在Configuration Manager主控台中,按一下 [軟體程式庫]
  2. 在 [ 軟體程式庫] 工作區中,按一下 [腳本]
  3. [腳本] 清單中,選擇您想要核准或拒絕的腳本,然後在 [ 首頁 ] 索引標籤的 [腳本 ] 群組中,按一下 [ 核准/拒絕]
  4. 在 [ 核准或拒絕腳本] 對話方塊中 ,針對腳本選取 [核准] 或 [ 拒絕 ]。 選擇性地輸入有關您決策的批註。 如果您拒絕腳本,則無法在用戶端裝置上執行。
    腳本 - 核准
  5. 完成精靈。 在 [腳本] 清單中,您會看到 [ 核准狀態 ] 資料行會根據您採取的動作而變更。

允許使用者核准自己的腳本

這項核准主要用於腳本開發的測試階段。

  1. 在Configuration Manager主控台中,按一下 [系統管理]
  2. 在 [ 系統管理] 工作區中,展開 [ 月臺設定],然後按一下 [ 月臺]
  3. 在網站清單中,選擇您的網站,然後在 [ 首頁 ] 索引標籤的 [ 月臺 ] 群組中,按一下 [ 階層設定]
  4. 在 [階層設定屬性] 對話方塊的 [一般] 索引標籤上,清除 [腳本作者需要其他腳本核准者] 核取方塊。

重要事項

最佳做法是,您不應該允許腳本作者核准自己的腳本。 它應該只允許在實驗室設定中使用。 請仔細考慮在生產環境中變更此設定的潛在影響。

安全性範圍

執行腳本會使用安全性範圍,這是Configuration Manager的現有功能,透過指派代表使用者群組的標籤來控制腳本的撰寫和執行。 如需使用安全性範圍的詳細資訊,請參閱設定Configuration Manager的角色型系統管理

建立腳本的安全性角色

預設不會在 Configuration Manager 中建立用於執行腳本的三個安全性角色。 若要建立腳本執行器、腳本作者和腳本核准者角色,請遵循概述的步驟。

  1. 在 Configuration Manager 主控台中,移至 [系統管理>安全性安全> 性角色]
  2. 以滑鼠右鍵按一下角色,然後按一下 [ 複製]。 您複製的角色已獲指派許可權。 請務必只取得您想要的許可權。
  3. 為自訂角色指定 [名稱 ] 和 [ 描述]
  4. 將許可權指派給安全性角色,如下所述。

安全性角色許可權

角色名稱:腳本執行器

  • 描述:這些許可權可讓此角色只執行先前由其他角色建立和核准的腳本。
  • 許可權: 請確定下列設定為 [是]
類別 權限 狀態
集合 執行指令碼
網站 讀取
SMS 腳本 讀取

角色名稱:腳本作者

  • 描述:這些許可權可讓此角色撰寫腳本,但無法核准或執行腳本。
  • 許可權:確定已設定下列許可權。
類別 權限 狀態
集合 執行指令碼
網站 讀取
SMS 腳本 建立
SMS 腳本 讀取
SMS 腳本 刪除
SMS 腳本 修改

角色名稱:腳本核准者

  • 描述:這些許可權可讓此角色核准腳本,但無法建立或執行腳本。
  • 許可權: 請確定已設定下列許可權。
類別 權限 狀態
集合 執行指令碼
網站 讀取
SMS 腳本 讀取
SMS 腳本 核准
SMS 腳本 修改

腳本作者角色的 SMS 腳本許可權範例

腳本作者角色的 SMS 腳本許可權範例

建立腳本

  1. 在Configuration Manager主控台中,按一下 [軟體程式庫]
  2. 在 [ 軟體程式庫] 工作區中,按一下 [腳本]
  3. 在 [ 首頁] 索引標籤的 [ 建立] 群組中,按一下 [ 建立腳本]
  4. 在 [建立 腳本 精靈] 的 [ 腳本 ] 頁面上,設定下列設定:
    • 腳本名稱 - 輸入腳本的名稱。 雖然您可以使用相同的名稱建立多個腳本,但使用重複的名稱會讓您更難在Configuration Manager主控台中找到所需的腳本。
    • 指令碼語言 - 目前僅支援 PowerShell 腳本。
    • 匯入 - 將 PowerShell 腳本匯入主控台。 腳本會顯示在 [ 腳本] 欄位中。
    • 清除 - 從 [腳本] 欄位移除目前的腳本。
    • 腳本 - 顯示目前匯入的腳本。 您可以視需要編輯此欄位中的腳本。
  5. 完成精靈。 新的腳本會顯示在 [腳本 ] 清單中,狀態 為 [等候核准]。 您必須先核准此腳本,才能在用戶端裝置上執行此腳本。

重要事項

使用執行腳本功能時,請避免編寫裝置重新開機腳本或重新開機Configuration Manager代理程式。 這樣做可能會導致連續重新開機狀態。 如有需要,用戶端通知功能有增強功能可讓您重新開機裝置。 暫 止的重新開機資料行 可協助識別需要重新開機的裝置。

腳本參數

將參數新增至腳本可為您的工作提供更高的彈性。 您最多可以包含 10 個參數。 下列概述執行腳本功能的目前功能,以及的腳本參數; 字串整數 資料類型。 此外,也提供預設值的清單。 如果您的腳本有不支援的資料類型,您會收到警告。

在 [ 建立腳本 ] 對話方塊中,按一下 [腳本 ] 底下的 [ 腳本參數]

每個腳本的參數都有自己的對話方塊,可新增進一步的詳細資料和驗證。 如果腳本中有預設參數,則會在參數 UI 中列舉它,而且您可以加以設定。 Configuration Manager不會覆寫預設值,因為它永遠不會直接修改腳本。 您可以將此視為在 UI 中提供「預先填入的建議值」,但Configuration Manager不會在執行時間提供「預設」值的存取權。 您可以編輯腳本以取得正確的預設值,以解決此問題。

重要事項

參數值不能包含單引號。

有一個已知問題,其中包含 或 以單引號括住的參數值無法正確地傳遞至腳本。 指定包含腳本內空格的預設參數值時,請改用雙引號。 在建立或執行 腳本期間指定預設參數值時,不論值是否包含空格,都不需要以雙引號或單引號括住預設值。

參數驗證

腳本中的每個參數都有 [ 腳本參數屬性 ] 對話方塊,可讓您新增該參數的驗證。 新增驗證之後,如果您輸入的參數值不符合其驗證,您應該會收到錯誤。

範例: FirstName

在此範例中,您可以設定字串參數 FirstName的屬性。

腳本參數 - 字串

[ 腳本參數屬性 ] 對話方塊的 [驗證] 區段包含下欄欄位供您使用:

  • 最小長度 - FirstName 欄位的最小字元數。
  • 最大長度- FirstName 欄位的最大字元數
  • RegEx - 正則表達式的簡短。 如需使用正則運算式的詳細資訊,請參閱下一節 使用正則運算式驗證
  • 自訂錯誤 - 適用于新增您自己的自訂錯誤訊息,以取代任何系統驗證錯誤訊息。

使用正則運算式驗證

正則運算式是一種精簡的程式設計形式,可針對編碼驗證來檢查字元字串。 例如,您可以將 放在 [^A-Z]RegEx欄位中,以檢查FirstName欄位中是否有大寫字母字元。

.NET Framework支援這個對話方塊的正則運算式處理。 如需使用正則運算式的指引,請參閱 .NET 正則表達 式和 正則運算式語言

腳本範例

以下幾個範例說明您可能想要搭配這項功能使用的腳本。

建立新資料夾和檔案

此腳本會根據您的命名輸入,在 資料夾內建立新的資料夾和檔案。

Param(
[Parameter(Mandatory=$True)]
[string]$FolderName,
[Parameter(Mandatory=$True)]
[string]$FileName
)

New-Item $FolderName -type directory
New-Item $FileName -type file

取得作業系統版本

此腳本會使用 WMI 來查詢電腦的作業系統版本。

Write-Output (Get-WmiObject -Class Win32_operatingSystem).Caption

編輯或複製 PowerShell 腳本

您可以 編輯複製 與執行腳本功能搭配使用的現有 PowerShell 腳本 。 現在直接編輯腳本,而不是重新建立您需要變更的腳本。 這兩個動作都使用與建立新腳本時相同的精靈體驗。 當您編輯或複製腳本時,Configuration Manager不會保存核准狀態。

提示

請勿編輯正在用戶端上執行的腳本。 它們不會完成執行原始腳本,而且您可能無法從這些用戶端取得預期的結果。

編輯腳本

  1. 移至 [軟體程式庫] 工作區下的 [腳本] 節點。
  2. 選取要編輯的腳本,然後按一下功能區中的 [ 編輯 ]。
  3. 在 [腳本詳細資料] 頁面中變更或重新匯入 您的腳本
  4. 按一下 [下一步 ] 以檢視 [摘要 ],然後在編輯完成時 關閉

複製腳本

  1. 移至 [軟體程式庫] 工作區下的 [腳本] 節點。
  2. 選取要複製的腳本,然後按一下功能區中的 [複製 ]。
  3. 在 [ 腳本名稱] 欄位中重新命名腳本 ,並進行您可能需要的任何其他編輯。
  4. 按一下 [下一步 ] 以檢視 [摘要 ],然後在編輯完成時 關閉

執行腳本

腳本核准之後,就可以針對單一裝置或集合執行。 一旦開始執行腳本,它會透過在一小時內逾時的高優先順序系統快速啟動。 接著會使用狀態訊息系統傳回腳本的結果。

若要選取腳本的目標集合:

  1. 在Configuration Manager主控台中,按一下 [資產與合規性]
  2. 在 [資產與相容性] 工作區中,按一下 [ 裝置集合]
  3. 在 [ 裝置集合] 清單中 ,按一下您要執行腳本的裝置集合。
  4. 選取您選擇的集合,按一下 [ 執行腳本]
  5. 在 [執行 腳本 精靈] 的 [ 腳本 ] 頁面上,從清單中選擇腳本。 只會顯示核准的腳本。
  6. [下一步],然後完成精靈。

重要事項

例如,如果腳本未執行,因為目標裝置在一小時期間關閉,您必須再次執行。

排程腳本的執行時間

從最新分支版本 2309 Configuration Manager開始,您現在可以使用 UTC 排程腳本的執行時間。

在集合上排程腳本執行:

  1. 在Configuration Manager主控台中,按一下 [資產與合規性]

  2. 在 [資產與相容性] 工作區中,按一下 [ 裝置集合]

  3. 在 [ 裝置集合] 清單中 ,按一下您要排程腳本的裝置集合。

  4. 選取您選擇的集合,按一下 [ 執行腳本]

  5. 在 [ 排程] 頁面上,排程要在核取方塊執行的腳本,並指定 [以 UTC 排程時間]。

  6. 確認 摘要頁面上顯示的詳細資料。

  7. [下一步],然後完成精靈。

    腳本的螢幕擷取畫面 - 排程。

注意事項

每 5 分鐘最多會處理 25 個排程腳本。

目的機器執行

腳本會在目標用戶端 (的) 上執行為 系統電腦 帳戶。 此帳戶具有有限的網路存取權。 腳本對遠端系統和位置的任何存取都必須據以布建。

腳本監視

在裝置集合上起始執行腳本之後,請使用下列程式來監視作業。 您可以在腳本執行時即時監視腳本,並稍後返回給定執行腳本執行的狀態和結果。 腳本狀態資料會在 刪除過時用戶端作業維護 工作或刪除腳本時清除。

腳本監視器 - 腳本執行狀態

  1. 在Configuration Manager主控台中,按一下 [監視]

  2. 在 [ 監視] 工作區中,按一下 [腳本狀態]

  3. [腳本狀態] 清單中,您會檢視您在用戶端裝置上執行之每個腳本的結果。 0的腳本結束代碼通常表示腳本已成功執行。

    腳本監視器 - 截斷的腳本

排程集合上的腳本監視

  1. 在Configuration Manager主控台中,按一下 [監視]

  2. 在 [監視] 工作區中,按一下 [ 排程腳本] 節點

  3. 新的資料列會顯示在 排程腳本清單中

  4. 確認已在排程腳本清單中顯示新的資料列。 狀態資料行 的值應該是Scheduled。 ClientOperationId資料行應該是空白的。 確認腳本名稱、排程時間等其他資料行具有適當的值。

  5. 在 [排程時間] 之後,重新整理 [ 排程腳本] 節點 。 狀態資料行應該具有 成功起始的用戶端作業值。 ClientOperationId資料行應該具有整數值。

  6. 在 [監視] 工作區中,按一下 [腳本狀態] 節點。確認清單中已顯示新的資料列,且 ClientOperationId 等於 [ 排程腳本 ] 節點中的 ClientOperationId。

  7. 按一下 [ 檢視狀態 ],並確定腳本輸出會顯示。

    腳本的螢幕擷取畫面 - 排程監視,

腳本輸出

使用 JSON 格式化的用戶端傳回腳本輸出,方法是將腳本的結果傳送至 ConvertTo-Json Cmdlet 。 JSON 格式會一致地傳回可讀取的腳本輸出。 對於未傳回物件做為輸出的腳本,ConvertTo-Json Cmdlet 會將輸出轉換成用戶端傳回的簡單字串,而不是 JSON。

  • 取得未知結果或用戶端離線的腳本不會顯示在圖表或資料集中。

  • 避免傳回大型腳本輸出,因為它被截斷為 4 KB。

  • 將列舉物件轉換成腳本中的字串值,以便以 JSON 格式正確顯示。

    將列舉物件轉換成 sting 值

您可以檢視原始或結構化 JSON 格式的詳細腳本輸出。 此格式設定可讓輸出更容易閱讀和分析。 如果腳本傳回有效的 JSON 格式文字,或輸出可以使用 ConvertTo-Json PowerShell Cmdlet 轉換成 JSON,則請將詳細輸出檢視為 JSON 輸出原始輸出。 否則,唯一的選項是 [腳本輸出]

範例:腳本輸出可轉換為有效的 JSON

命令: $PSVersionTable.PSVersion

Major  Minor  Build  Revision
-----  -----  -----  --------
5      1      16299  551

範例:腳本輸出不是有效的 JSON

命令: Write-Output (Get-WmiObject -Class Win32_OperatingSystem).Caption

Microsoft Windows 10 Enterprise

記錄檔

  • 在用戶端上,預設為 C:\Windows\CCM\logs:

    • Scripts.log
    • CcmMessaging.log
  • 在 MP 上,預設為 C:\SMS_CCM\Logs:

    • MP_RelayMsgMgr.log
  • 在月臺伺服器上,預設會在 C:\Program Files\Configuration Manager\Logs 中:

    • SMS_Message_Processing_Engine.log

使用 Windows PowerShell 自動化

您可以使用下列 PowerShell Cmdlet 將其中一些工作自動化:

另請參閱