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
- Rufen Sie eine kleine Charge von Computern ab.
- Weisen Sie die Richtlinie jedem Computer im Stapel zu.
- 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
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
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 --versionWenn
jq nicht gefunden wird, besuchen Sie deren Website, um es zu installieren.Erforderliche Informationen
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
Prozedur
- Öffnen Sie das Terminal oder Ihr bevorzugtes Befehlszeilenwerkzeug.
- 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.comsecret=<YOUR SECRET KEY>zum Beispiel,secret=5C58EADA-04BC-4ABC-45CF-B72925A0B674:aFBgpPV8eJQGaY2Dk0LmyQMD7nUGvyIDfIbIQo8Zgm8= - 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 - 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<$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
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<$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
Prozedur
- PowerShell öffnen.
- 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 - 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"}
-
- 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 - 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
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.LengthFü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).IDHinweise
- 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 von10ist normalerweise eine konservative Batch-Größe.
Verwandte Ressourcen
-
Ändern eines Computers (API-Referenz
-
Erstellen und Konfigurieren einer Richtlinie (Leitfaden) – Abschnitt „Richtlinie einem Computer zuweisen“
-
Nach Ressourcen suchen (Leitfaden) - Abschnitt "Suchergebnisse und Seitenumbruch begrenzen"
