從 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 腳本安全性
執行文本作者和核准者
執行文本會使用 腳本作者 和 腳本核准者 的概念作為腳本實作和執行的個別角色。 將作者和核准者角色分開,可讓您對執行腳本的強大工具進行重要的程序檢查。 另外還有 一個腳本執行者 角色可允許執行腳本,但不允許建立或核准腳本。 請參閱 建立腳本的安全性角色。
腳本角色控制件
根據預設,用戶無法核准他們所撰寫的腳本。 因為腳本功能強大、多功能,而且可能部署到許多裝置,所以您可以在撰寫腳本的人員與核准腳本的人員之間分隔角色。 這些角色可提供額外的安全性層級,防止在沒有監督的情況下執行腳本。 您可以關閉次要核准,以方便測試。
核准或拒絕腳本
腳本必須經過 腳本核准者 角色核准,才能執行。 若要核准文稿:
- 在 Configuration Manager 控制台中,按兩下 [ 軟體連結庫]。
- 在 [ 軟體連結庫] 工作區中,按兩下 [腳稿]。
- 在 [腳本] 列表中,選擇您想要核准或拒絕的腳本,然後在 [ 首頁 ] 索引卷標的 [腳本 ] 群組中,按兩下 [ 核准/拒絕]。
- 在 [ 核准或拒絕腳本] 對話框中 ,針對腳本選取 [核准] 或 [ 拒絕 ]。 選擇性地輸入有關您決策的批注。 如果您拒絕文本,則無法在用戶端裝置上執行。
- 完成精靈。 在 [腳本] 列表中,您會看到 [ 核准狀態 ] 數據行會根據您採取的動作而變更。
允許使用者核准自己的腳本
這項核准主要用於腳本開發的測試階段。
- 在 Configuration Manager 控制台中,按兩下 [ 系統管理]。
- 在 [ 系統管理] 工作區中,展開 [ 月臺設定],然後按兩下 [ 月臺]。
- 在網站清單中,選擇您的網站,然後在 [ 首頁 ] 索引卷標的 [ 月臺 ] 群組中,按兩下 [ 階層設定]。
- 在 [階層設定屬性] 對話方塊的 [一般] 索引標籤上,清除 [腳本作者需要其他腳本核准者] 複選框。
重要事項
最佳做法是,您不應該允許腳本作者核准自己的腳本。 它應該只允許在實驗室設定中使用。 請仔細考慮在生產環境中變更此設定的潛在影響。
安全性範圍
執行文本會使用 Configuration Manager 現有功能的安全性範圍,透過指派代表使用者群組的標籤來控制腳本的撰寫和執行。 如需使用安全性範圍的詳細資訊,請 參閱設定 Configuration Manager 的角色型系統管理。
建立腳本的安全性角色
根據預設,Configuration Manager 中不會建立用於執行腳本的三個安全性角色。 若要建立腳本執行器、腳本作者和腳本核准者角色,請遵循概述的步驟。
- 在 Configuration Manager 控制台中,移至 [系統管理>安全性安全>性角色]
- 以滑鼠右鍵按兩下角色,然後按下 [ 複製]。 您複製的角色已獲指派許可權。 請務必只取得您想要的許可權。
- 為自定義角色指定 [名稱 ] 和 [ 描述]。
- 將許可權指派給安全性角色,如下所述。
安全性角色許可權
角色名稱:文稿執行器
- 描述:這些許可權可讓此角色只執行先前由其他角色建立和核准的腳本。
- 許可權: 請確定下列設定為 [是]。
類別 | 權限 | 狀態 |
---|---|---|
集合 | 執行指令碼 | 是 |
網站 | 讀取 | 是 |
SMS 腳本 | 讀取 | 是 |
角色名稱:文稿作者
- 描述:這些許可權可讓此角色撰寫腳本,但無法核准或執行腳本。
- 許可權:確定已設定下列許可權。
類別 | 權限 | 狀態 |
---|---|---|
集合 | 執行指令碼 | 否 |
網站 | 讀取 | 是 |
SMS 腳本 | 建立 | 是 |
SMS 腳本 | 讀取 | 是 |
SMS 腳本 | 刪除 | 是 |
SMS 腳本 | 修改 | 是 |
角色名稱:文本核准者
- 描述:這些許可權可讓此角色核准腳本,但無法建立或執行腳本。
- 許可權: 請確定已設定下列許可權。
類別 | 權限 | 狀態 |
---|---|---|
集合 | 執行指令碼 | 否 |
網站 | 讀取 | 是 |
SMS 腳本 | 讀取 | 是 |
SMS 腳本 | 核准 | 是 |
SMS 腳本 | 修改 | 是 |
文本作者角色的 SMS 腳本許可權範例
文稿的資料夾支援
從 2403 版開始,您可以使用資料夾來組織腳本。 這項變更可讓您更妥善地分類和管理腳本。
開啟 Configuration Manager 控制台並移至 [軟體連結庫] 工作區。 從功能區或按鼠右鍵功能表的 [腳稿] 中,從下列選項中選取:
- 建立資料夾
- 刪除資料夾
- 重新命名資料夾
- 移動資料夾
- 設定安全性範圍
建立腳本
- 在 Configuration Manager 控制台中,按兩下 [ 軟體連結庫]。
- 在 [ 軟體連結庫] 工作區中,按兩下 [腳稿]。
- 在 [ 首頁] 索引標籤的 [ 建立] 群組中,按兩下 [ 建立腳本]。
- 在 [建立 腳本 精靈] 的 [ 腳本 ] 頁面上,設定下列設定:
- 文稿名稱 - 輸入文稿的名稱。 雖然您可以使用相同的名稱建立多個腳本,但使用重複的名稱會讓您更難在 Configuration Manager 控制台中找到所需的腳本。
- 腳本語言 - 目前僅支援 PowerShell 腳本。
- 匯入 - 將 PowerShell 腳本匯入主控台。 文稿會顯示在 [ 腳稿] 字段中。
- 清除 - 從 [腳稿] 字段移除目前的腳本。
- 文稿 - 顯示目前匯入的腳稿。 您可以視需要編輯此欄位中的文稿。
- 完成精靈。 新的腳本會顯示在 [腳本 ] 列表中,狀態 為 [等候核准]。 您必須先核准此腳本,才能在用戶端裝置上執行此腳本。
重要事項
使用執行腳本功能時,請避免編寫裝置重新啟動腳本或重新啟動 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 不會保存核准狀態。
提示
請勿編輯正在用戶端上執行的腳本。 它們不會完成執行原始文本,而且您可能無法從這些用戶端取得預期的結果。
編輯文本
- 移至 [軟體連結庫] 工作區下的 [腳本] 節點。
- 選取要編輯的腳本,然後按下功能區中的 [ 編輯 ]。
- 在 [腳稿詳細數據] 頁面中變更或重新匯入 您的腳本 。
- 按兩下 [下一步 ] 以檢視 [摘要 ],然後在編輯完成時 關閉 。
複製文稿
- 移至 [軟體連結庫] 工作區下的 [腳本] 節點。
- 選取要複製的腳本,然後按下功能區中的 [複製 ]。
- 在 [ 腳本名稱] 字段中重新命名腳本 ,並進行您可能需要的任何其他編輯。
- 按兩下 [下一步 ] 以檢視 [摘要 ],然後在編輯完成時 關閉 。
執行腳本
腳本核准之後,就可以針對單一裝置或集合執行。 一旦開始執行腳本,它會透過在一小時內逾時的高優先順序系統快速啟動。 接著會使用狀態消息系統傳回腳本的結果。
若要選取文稿的目標集合:
- 在 Configuration Manager 控制台中,按兩下 [ 資產與合規性]。
- 在 [資產與兼容性] 工作區中,按兩下 [ 裝置集合]。
- 在 [ 裝置集合] 清單中 ,按下您要執行腳本的裝置集合。
- 選取您選擇的集合,按兩下 [ 執行腳稿]。
- 在 [執行 腳本 精靈] 的 [ 腳本 ] 頁面上,從列表中選擇腳本。 只會顯示核准的腳本。
- 按 [下一步],然後完成精靈。
重要事項
例如,如果腳本未執行,因為目標裝置在一小時期間關閉,您必須再次執行。
排程腳本的運行時間
從 Configuration Manager 最新分支 2309 版開始,您現在可以使用 UTC 排程腳本的運行時間。
在集合上排程文稿執行:
在 Configuration Manager 控制台中,按兩下 [ 資產與合規性]。
在 [資產與兼容性] 工作區中,按兩下 [ 裝置集合]。
在 [ 裝置集合] 清單中 ,按下您要排程腳本的裝置集合。
選取您選擇的集合,按兩下 [ 執行腳稿]。
在 [ 排程] 頁面上,排程要在複選框執行的腳本,並指定 [以 UTC 排程時間]。
確認 摘要頁面上顯示的詳細數據。
按 [下一步],然後完成精靈。
注意事項
每 5 分鐘最多會處理 25 個排程腳本。
目標機器執行
腳本會在目標用戶端 (的) 上執行為 系統 或 計算機 帳戶。 此帳戶具有有限的網路存取權。 腳本對遠端系統和位置的任何存取都必須據以布建。
腳本監視
在裝置集合上起始執行腳本之後,請使用下列程式來監視作業。 您可以在腳本執行時即時監視腳本,並稍後返回給定執行腳本執行的狀態和結果。 文本狀態數據會在 刪除過時用戶端作業維護 工作或刪除文稿時清除。
在 Configuration Manager 控制台中,按兩下 [ 監視]。
在 [ 監視] 工作區中,按兩下 [腳稿狀態]。
在 [腳本狀態] 清單中,您會檢視您在用戶端裝置上執行之每個腳本的結果。 0 的腳本結束代碼通常表示腳本已成功執行。
排程集合上的腳本監視
在 Configuration Manager 控制台中,按兩下 [ 監視]。
在 [監視] 工作區中,按兩下 [ 排程腳本] 節點。
新的數據列會顯示在 排程腳本清單中。
確認已在排程文本清單中顯示新的數據列。 狀態數據行 的值應該是 Scheduled。 ClientOperationId 數據行應該是空白的。 確認文本名稱、排程時間等其他數據行具有適當的值。
在 [排程時間] 之後,重新整理 [ 排程腳本] 節點 。 狀態數據行應該具有 成功起始的用戶端作業值。 ClientOperationId 數據行應該具有整數值。
在 [監視] 工作區中,按兩下 [腳稿狀態] 節點。確認清單中已顯示新的數據列,且 ClientOperationId 等於 [ 排程腳本 ] 節點中的 ClientOperationId。
按兩下 [ 檢視狀態 ],並確定腳本輸出會顯示。
腳本輸出
使用 JSON 格式化的用戶端傳回腳本輸出,方法是將腳本的結果傳送至 ConvertTo-Json Cmdlet 。 JSON 格式會一致地傳回可讀取的腳本輸出。 對於未傳回物件做為輸出的腳本,ConvertTo-Json Cmdlet 會將輸出轉換成用戶端傳回的簡單字串,而不是 JSON。
取得未知結果或客戶端離線的腳本不會顯示在圖表或數據集中。
避免傳回大型腳本輸出,因為它被截斷為 4 KB。
將列舉物件轉換成腳本中的字串值,以便以 JSON 格式正確顯示。
您可以檢視原始或結構化 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 將其中一些工作自動化:
- Approve-CMScript
- Deny-CMScript
- Get-CMScript
- Invoke-CMScript
- New-CMScript
- Remove-CMScript
- Set-CMScript