此配方會建立一個指派政策給多台電腦防護的腳本。該腳本會搜尋要修改的電腦防護,然後將政策指派給每台電腦防護。
當您需要在許多電腦(數百或數千台)上執行任務時,請分批進行:
步驟
- 檢索一小批電腦。
- 將政策指派給批次中的每台電腦防護。
- 重複此操作直到所有電腦都被分配到該政策。
接下來需執行的動作
小批量更有效地利用Server & Workload Security保護資源。此配方將策略分配給所有電腦的小批量。
在您開始之前
您應該已經驗證過您的環境是否已經設置為使用 Bash 或 PowerShell 來使用 API。
jq for Bash
所需資訊
收集您需要完成此食譜的以下資訊:
-
Server & Workload Security保護 的 URL
-
您 API 金鑰的密鑰
-
指派的政策 ID
如果您不知道政策的 ID,您可以使用 搜尋政策 範例來獲取。
Bash
步驟
- 打開終端機或您偏好的命令行工具。
- 輸入以下命令來儲存有關您請求的詳細資訊,將
<YOUR URL>
替換為 Server & Workload Security保護 的 URL,並將<YOUR SECRET KEY>
替換為您 API 金鑰的密鑰:url=<您的 URL>
例如,url=https://cloudone.trendmicro.com
secret=<您的秘密金鑰>
例如,secret=5C58EADA-04BC-4ABC-45CF-B72925A0B674:aFBgpPV8eJQGaY2Dk0LmyQMD7nUGvyIDfIbIQo8Zgm8=
- 輸入以下命令來儲存政策的 ID,將
<YOUR POLICY ID>
替換為電腦防護的 ID:policyId=<您的策略識別碼>
例如,policyId=1
- 複製並貼上以下程式碼,以批次搜尋電腦並將政策分配給它們:
pagesize=10; idOfLastFound=0 ; \ while [ $pagesize -gt 0 ]; do \ echo -e "\nGetting a batch of computers..." page=$(curl -X POST "$url/api/computers/search?expand=none" -H "api-secret-key: $secret" -H "api-version: v1" -H "Content-Type: application/json" -# \ -d "{ \ \"searchCriteria\": [{ \ \"idValue\": \"$idOfLastFound\", \ \"idTest\": \"greater-than\"}], \ \"maxItems\": \"$pagesize\" \ }" \ -k | jq '.[]'); \ pagesize=$(echo $page | jq length); \ for (( i=0; i<$pagesize; i++)); do \ computerId=$(echo $page | jq ".[$i][\"ID\"]"); \ echo "Assigning policy to computer with ID $computerId"; \ curl -X POST "$url/api/computers/${computerId}?expand=none" -H "api-secret-key: $secret" -H "api-version: v1" -H "Content-Type: application/json" -d "{ \"policyID\": \"$policyId\" }" -s -S -o /dev/null; \ done; \ idOfLastFound=$(echo $page | jq '.[-1]["ID"]'); \ done;
接下來需執行的動作
讓我們深入研究那個 Bash 腳本
這個腳本比我們在其他範例中所做的要複雜一些,所以讓我們回顧一下它的功能。
大部分的程式碼在迴圈中執行,每次迴圈迭代會搜尋一批電腦防護並進行修改。當搜尋不再返回電腦防護時,迴圈結束。首先,我們定義批次的大小並設置在第一次迭代中用作搜尋基礎的電腦防護ID。
pagesize=10; idOfLastFound=0 ; \ while [ $pagesize -gt 0 ]; do \ ... done;
在迴圈內,我們使用 cURL 搜尋一批電腦。該搜尋會找到 10 台 ID 大於前一次迭代中找到的最後一個 ID 的電腦。結果會通過
jq
來獲取一個電腦陣列。page=$(curl -X POST "$url/api/computers/search?expand=none" -H "api-secret-key: $secret" -H "api-version: v1" -H "Content-Type: application/json" -# \ -d "{ \ \"searchCriteria\": [{ \ \"idValue\": \"$idOfLastFound\", \ \"idTest\": \"greater-than\"}], \ \"maxItems\": \"$pagesize\" \ }" \ -k | jq '.[]'); \
然後,我們找到被退回的電腦數量。
\
pagesize=$(echo $page | jq length); \
對於每台電腦防護,我們使用 cURL 來指派政策。
for (( i=0; i<$pagesize; i++)); do \ computerId=$(echo $page | jq ".[$i][\"ID\"]"); \ echo "Assigning policy to computer with ID $computerId"; \ curl -X POST "$url/api/computers/${computerId}?expand=none" -H "api-secret-key: $secret" -H "api-version: v1" -H "Content-Type: application/json" -d "{ \"policyID\": \"$policyId\" }" -k -s -S -o /dev/null; \ done; \
最後,我們找到最後一台電腦防護的 ID,並將其用作下一次迭代搜索的基礎。
idOfLastFound=$(echo $page | jq '.[-1][\"ID\"]'); \
PowerShell
步驟
- 開啟 PowerShell。
- 輸入以下命令以使用 TLS 1.2,管理員需要它來建立安全連接:
[Net.ServicePointManager]::SecurityProtocol += [Net.SecurityProtocolType]::Tls12
- 輸入以下命令來儲存有關您請求的詳細資訊,將
<YOUR URL>
替換為您的 Server & Workload Security保護 的 URL,並將<YOUR SECRET KEY>
替換為您 API 金鑰中的密鑰:-
$url = "<您的 URL>"
例如,url=https://cloudone.trendmicro.com
-
$secret = "<您的 API 金鑰密鑰>"
例如,$secret="5C58EADA-04BC-4ABC-45CF-B72725A0B674:aFBgpPV8eJQGaY2Dk0LmyQMD7nUGvyIDfIbIQo8Zgm8="
-
$headers = @{‘api-version’ = “v1”; ‘api-secret-key’ = $secret; 'Content-Type' = "application/json"}
-
- 輸入以下命令來儲存政策的 ID,將
<YOUR POLICY ID>
替換為電腦防護的 ID:$policyId = <您的策略識別碼>
例如,$policyId = 1
- 複製並貼上以下程式碼,以批次搜尋電腦並將政策分配給它們:
$pageSize = 10 $idOfLastFound = 0 while($pageSize -gt 0){ Write-Output "Getting batch of computers..." $page = Invoke-RestMethod -Method 'Post' -Uri "$url/api/computers/search?expand=none" -Headers $headers -Body @" {"searchCriteria": [ { "idTest": "greater-than", "idValue": $idOfLastFound } ], "maxItems": $pageSize} "@ $pageSize = $page.computers.Length for ($i=0; $i -lt $pageSize; $i++){ $id = $page.computers.Get($i).ID Write-Output "Setting policy for computer with ID $id" Invoke-RestMethod -Method 'Post' -Uri "$url/api/computers/${id}?expand=none" -Headers $headers -Body @" {"policyID": "$policyId"} "@ | Out-Null } if ($pageSize -gt 0 ) { $idOfLastFound = $page.computers.Get($pageSize - 1).ID } }
接下來需執行的動作
如果您收到錯誤訊息
基礎連接已關閉:發送時發生意外錯誤
,請關閉 PowerShell,重新打開 PowerShell,並嘗試重複步驟。讓我們深入研究那個 PowerShell 腳本
這個腳本比我們在其他範例中所做的要複雜一些,所以讓我們回顧一下它的功能。
大部分的程式碼在迴圈中執行,每次迴圈迭代會搜尋一批電腦防護並進行修改。當搜尋不再返回電腦防護時,迴圈結束。首先,我們定義批次的大小並設置在第一次迭代中用作搜尋基礎的電腦防護ID。
$pageSize = 10 $idOfLastFound = 0 while($pageSize -gt 0){ ... }
在迴圈內,我們呼叫
Invoke-RestMethod
來搜尋一批電腦。搜尋會找到 10 台 ID 大於前一次迭代中找到的最後一個 ID 的電腦。page=$(curl -X POST "$url/api/computers/search?expand=none" -H "api-secret-key: $secret" -H "api-version: v1" -H "Content-Type: application/json" -# \ -d "{ \ \"searchCriteria\": [{ \ \"idValue\": \"$idOfLastFound\", \ \"idTest\": \"greater-than\"}], \ \"maxItems\": \"$pagesize\" \ }" \ -k | jq '.[]'); \
然後,我們確定被退回的電腦數量。
$pageSize = $page.computers.Length
對於每台電腦防護,我們調用
Invoke-RestMethod
來指派政策。for ($i=0; $i -lt $pageSize; $i++){ $id = $page.computers.Get($i).ID Write-Output "Setting policy for computer with ID $id" Invoke-RestMethod -Method 'Post' -Uri "$url/api/computers/${id}?expand=none" -Headers $headers -Body @" {"policyID": "$policyId"}
最後,我們找到最後一台電腦防護的 ID,並將其用作下一次迭代搜索的基礎。
$idOfLastFound = $page.computers.Get($pageSize - 1).ID
筆記
- 要更改處理的電腦批次大小,請將
pagesize
(Bash)或$pageSize
(PowerShell)變數設置為不同的值。10
的值通常是保守的批次大小。