檢視次數:
此配方會建立一個指派政策給多台電腦防護的腳本。該腳本會搜尋要修改的電腦防護,然後將政策指派給每台電腦防護。
當您需要在許多電腦(數百或數千台)上執行任務時,請分批進行:

步驟

  1. 檢索一小批電腦。
  2. 將政策指派給批次中的每台電腦防護。
  3. 重複此操作直到所有電腦都被分配到該政策。

接下來需執行的動作

小批量更有效地利用Server & Workload Security保護資源。此配方將策略分配給所有電腦的小批量。

在您開始之前 上層主題

您應該已經驗證過您的環境是否已經設置為使用 Bash 或 PowerShell 來使用 API

jq for Bash 上層主題

Bash 腳本使用 jq 來解析 JSON 資料。要查看是否已安裝,請打開終端機或您偏好的命令行工具,並輸入以下命令:
jq --version
如果未找到 jq,請訪問他們的 網站 進行安裝。

所需資訊 上層主題

收集您需要完成此食譜的以下資訊:
  • Server & Workload Security保護 的 URL
  • 您 API 金鑰的密鑰
  • 指派的政策 ID
如果您不知道政策的 ID,您可以使用 搜尋政策 範例來獲取。

Bash 上層主題

步驟

  1. 打開終端機或您偏好的命令行工具。
  2. 輸入以下命令來儲存有關您請求的詳細資訊,將 <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=
  3. 輸入以下命令來儲存政策的 ID,將 <YOUR POLICY ID> 替換為電腦防護的 ID:
    policyId=<您的策略識別碼>
    例如,policyId=1
  4. 複製並貼上以下程式碼,以批次搜尋電腦並將政策分配給它們:
    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&lt;$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&lt;$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 上層主題

步驟

  1. 開啟 PowerShell。
  2. 輸入以下命令以使用 TLS 1.2,管理員需要它來建立安全連接:
    [Net.ServicePointManager]::SecurityProtocol += [Net.SecurityProtocolType]::Tls12
  3. 輸入以下命令來儲存有關您請求的詳細資訊,將 <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"}
  4. 輸入以下命令來儲存政策的 ID,將 <YOUR POLICY ID> 替換為電腦防護的 ID:
    $policyId = <您的策略識別碼>
    例如,$policyId = 1
  5. 複製並貼上以下程式碼,以批次搜尋電腦並將政策分配給它們:
    $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 的值通常是保守的批次大小。

相關資源 上層主題