Ansichten:
Dieses Rezept erstellt ein Skript, das eine Richtlinie auf viele Computer anwendet. Das Skript sucht nach den zu ändernden Computern und weist dann jedem Computer die Richtlinie zu.
Wenn Sie eine Aufgabe auf vielen Computern (Hunderte oder Tausende) ausführen müssen, erledigen Sie die Arbeit in kleinen Chargen:

Prozedur

  1. Rufen Sie eine kleine Charge von Computern ab.
  2. Weisen Sie die Richtlinie jedem Computer im Stapel zu.
  3. Wiederholen, bis allen Computern die Richtlinie zugewiesen ist.

Nächste Schritte

Kleine Chargen nutzen die Server- und Workload Protection-Ressourcen effizienter. Dieses Rezept weist allen Computern in kleinen Chargen eine Richtlinie zu.

Bevor Sie beginnen Übergeordnetes Thema

Sie sollten bereits überprüft haben, dass Ihre Umgebung für die Nutzung der API mit Bash oder PowerShell eingerichtet ist.

jq für Bash Übergeordnetes Thema

Das Bash-Skript verwendet jq, um JSON-Daten zu parsen. Um zu überprüfen, ob es installiert ist, öffnen Sie das Terminal oder Ihr bevorzugtes Befehlszeilenwerkzeug und geben Sie den folgenden Befehl ein:
jq --version
Wenn jq nicht gefunden wird, besuchen Sie deren Website, um es zu installieren.

Erforderliche Informationen Übergeordnetes Thema

Sammeln Sie die folgenden Informationen, die Sie benötigen, um dieses Rezept abzuschließen:
  • Die URL von Server- und Workload Protection
  • Der geheime Schlüssel für Ihren API-Schlüssel
  • Die ID der zuzuweisenden Richtlinie
Wenn Sie die ID der Richtlinie nicht kennen, können Sie das Rezept Nach einer Richtlinie suchen verwenden, um sie zu erhalten.

Bash Übergeordnetes Thema

Prozedur

  1. Öffnen Sie das Terminal oder Ihr bevorzugtes Befehlszeilenwerkzeug.
  2. Geben Sie die folgenden Befehle ein, um Details zu Ihrer Anfrage zu speichern. Ersetzen Sie dabei <YOUR URL> durch die URL von Server- und Workload Protection und <YOUR SECRET KEY> durch das Geheimnis Ihres API-Schlüssels:
    url=<YOUR URL>
    zum Beispiel, url=https://cloudone.trendmicro.com
    secret=<YOUR SECRET KEY>
    zum Beispiel, secret=5C58EADA-04BC-4ABC-45CF-B72925A0B674:aFBgpPV8eJQGaY2Dk0LmyQMD7nUGvyIDfIbIQo8Zgm8=
  3. Geben Sie den folgenden Befehl ein, um die ID der Richtlinie zu speichern, und ersetzen Sie <YOUR POLCIY ID> durch die ID des Computers:
    policyId=<YOUR POLICY ID>
    Beispiel: policyId=1
  4. Kopieren Sie den folgenden Code und fügen Sie ihn ein, um Computer in Chargen zu suchen und die Richtlinie zuzuweisen:
    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;

Nächste Schritte

Lassen Sie uns in dieses Bash-Skript eintauchen Übergeordnetes Thema

Dieses Skript ist etwas komplizierter als das, was wir in anderen Rezepten gemacht haben, also lassen Sie uns zusammenfassen, was es tut.
Der Großteil des Codes wird in einer Schleife ausgeführt, bei der jede Iteration der Schleife nach einer Gruppe von Computern sucht und diese modifiziert. Die Schleife endet, wenn die Suche keine weiteren Computer mehr zurückgibt. Zu Beginn definieren wir die Größe der Gruppe und legen die Computer-ID fest, die als Grundlage für die Suche in der ersten Iteration verwendet wird.
pagesize=10; idOfLastFound=0 ; \
while [ $pagesize -gt 0 ]; do \
...
done;
Innerhalb der Schleife verwenden wir cURL, um nach einer Gruppe von Computern zu suchen. Die Suche findet 10 Computer, deren ID größer ist als die zuletzt in der vorherigen Iteration gefundene ID. Das Ergebnis wird an jq weitergeleitet, um ein Array von Computern zu erhalten.
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 '.[]'); \
Dann ermitteln wir die Anzahl der zurückgegebenen Computer.
pagesize=$(echo $page | jq length); \
Für jeden Computer verwenden wir cURL, um die Richtlinie zuzuweisen.
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; \
Schließlich finden wir die ID des zuletzt gefundenen Computers, um sie als Grundlage für die Suche in der nächsten Iteration zu verwenden.
idOfLastFound=$(echo $page | jq '.[-1][\"ID\"]'); \

PowerShell Übergeordnetes Thema

Prozedur

  1. PowerShell öffnen.
  2. Geben Sie den folgenden Befehl ein, um TLS 1.2 zu verwenden, das der Manager benötigt, um eine sichere Verbindung herzustellen:
    [Net.ServicePointManager]::SecurityProtocol += [Net.SecurityProtocolType]::Tls12
  3. Geben Sie die folgenden Befehle ein, um Details zu Ihrer Anfrage zu speichern, wobei Sie <YOUR URL> durch die URL Ihres Server- und Workload Protection und <YOUR SECRET KEY> durch das Geheimnis Ihres API-Schlüssels ersetzen:
    • $url = "<YOUR URL>"
      zum Beispiel, url=https://cloudone.trendmicro.com
    • $secret = "<YOUR API KEY SECRET>"
      zum Beispiel,$secret="5C58EADA-04BC-4ABC-45CF-B72725A0B674:aFBgpPV8eJQGaY2Dk0LmyQMD7nUGvyIDfIbIQo8Zgm8="
    • $headers = @{‘api-version’ = “v1”; ‘api-secret-key’ = $secret; 'Content-Type' = "application/json"}
  4. Geben Sie den folgenden Befehl ein, um die ID der Richtlinie zu speichern, und ersetzen Sie <YOUR POLCIY ID> durch die ID des Computers:
    $policyId = <YOUR POLICY ID>
    Beispiel: $policyId = 1
  5. Kopieren Sie den folgenden Code und fügen Sie ihn ein, um Computer in Chargen zu suchen und die Richtlinie zuzuweisen:
    $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
    	}
    }

Nächste Schritte

Wenn Sie die Fehlermeldung The underlying connection was closed: An unexpected error occurred on a send erhalten, schließen Sie PowerShell, öffnen Sie PowerShell erneut und versuchen Sie, die Schritte zu wiederholen.

Lassen Sie uns in das PowerShell-Skript eintauchen Übergeordnetes Thema

Dieses Skript ist etwas komplizierter als das, was wir in anderen Rezepten gemacht haben, also lassen Sie uns zusammenfassen, was es tut.
Der Großteil des Codes wird in einer Schleife ausgeführt, bei der jede Iteration der Schleife nach einer Gruppe von Computern sucht und diese modifiziert. Die Schleife endet, wenn die Suche keine weiteren Computer mehr zurückgibt. Zu Beginn definieren wir die Größe der Gruppe und legen die Computer-ID fest, die als Grundlage für die Suche in der ersten Iteration verwendet wird.
$pageSize = 10
$idOfLastFound = 0
while($pageSize -gt 0){
...
}
Innerhalb der Schleife rufen wir Invoke-RestMethod auf, um nach einer Gruppe von Computern zu suchen. Die Suche findet 10 Computer, deren ID größer ist als die zuletzt in der vorherigen Iteration gefundene 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 '.[]'); \
Dann ermitteln wir die Anzahl der zurückgegebenen Computer.
$pageSize = $page.computers.Length
Für jeden Computer rufen wir Invoke-RestMethod auf, um die Richtlinie zuzuweisen.
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"}
Schließlich finden wir die ID des zuletzt gefundenen Computers, um sie als Grundlage für die Suche in der nächsten Iteration zu verwenden.
$idOfLastFound = $page.computers.Get($pageSize - 1).ID

Hinweise Übergeordnetes Thema

  • Um die Größe des verarbeiteten Computer-Batches zu ändern, setzen Sie die Variable pagesize (Bash) oder $pageSize (PowerShell) auf einen anderen Wert. Der Wert von 10 ist normalerweise eine konservative Batch-Größe.

Verwandte Ressourcen Übergeordnetes Thema