從 Configuration Manager 主控台 Create 並執行 PowerShell 腳本

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

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

注意事項

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

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

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

警告

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

必要條件

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

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

限制

執行文稿目前支援:

  • 腳本語言:PowerShell
  • 參數類型:整數、字串和清單。

警告

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

執行文本作者和核准者

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

腳本角色控制件

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

核准或拒絕腳本

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

  1. 在 Configuration Manager 控制台中,按兩下 [軟體連結庫]
  2. 在 [ 軟體連結庫] 工作區中,按兩下 [腳稿]
  3. [腳本] 列表中,選擇您想要核准或拒絕的腳本,然後在 [ 首頁 ] 索引卷標的 [腳本 ] 群組中,按兩下 [ 核准/拒絕]
  4. 在 [ 核准或拒絕腳本] 對話框中 ,針對腳本選取 [核准] 或 [ 拒絕 ]。 選擇性地輸入有關您決策的批注。 如果您拒絕文本,則無法在用戶端裝置上執行。
    腳本 - 核准
  5. 完成精靈。 在 [腳本] 列表中,您會看到 [ 核准狀態 ] 數據行會根據您採取的動作而變更。

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

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

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

重要事項

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

安全性範圍

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

Create 腳本的安全性角色

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

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

安全性角色許可權

角色名稱:文稿執行器

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

角色名稱:文稿作者

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

角色名稱:文本核准者

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

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

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

文稿的資料夾支援

從 2403 版開始,您可以使用資料夾來組織腳本。 這項變更可讓您更妥善地分類和管理腳本。

開啟 Configuration Manager 主控台,然後移至 [軟體連結庫] 工作區。 從功能區或按鼠右鍵功能表的 [腳稿] 中,從下列選項中選取:

  • Create資料夾
  • 刪除資料夾
  • 重新命名資料夾
  • 移動資料夾
  • 設定安全性範圍

Create 腳本

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

重要事項

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

腳本參數

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

在 [Create 腳本] 對話框中,按兩下 [腳稿] 底下的 [腳本參數]

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

重要事項

參數值不能包含單引號。

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

參數驗證

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

範例: FirstName

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

文稿參數 - 字串

[ 腳本參數屬性 ] 對話框的 [驗證] 區段包含下列字段供您使用:

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

使用正則表達式驗證

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

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

腳本範例

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

Create 新資料夾和檔案

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

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 將其中一些工作自動化:

另請參閱