Ansichten:
Die Suche ist ein leistungsstarkes Werkzeug, das häufig nützlich ist, wenn Aufgaben automatisiert werden. Jeder Endpunkt in der API bietet Operationen zum Durchsuchen von Ressourcen. Zum Beispiel können Sie die Suche nach Computern-Operation des /api/computers-Endpunkts verwenden, um nach Computern zu suchen.
Um eine Suchoperation zu verwenden, stellen Sie ein Suchfilterobjekt bereit, das ein oder mehrere Suchkriterien enthält. Ein Suchkriterienobjekt umfasst Eigenschaften zur Konfiguration der folgenden Suchtypen:
  • Boolean: Suche nach booleschen Werten.
  • Choice: Suchfelder, die einen definierten Satz gültiger Werte haben
  • ID: Eindeutige IDs suchen
  • Null: Suche nach Nullwerten
  • Numeric: Suche nach numerischen Werten
  • String: Suche nach Zeichenfolgen
  • Datumsbereich: Suche nach Datumswerten
Suchvorgänge, die mehrere Kriterien verwenden, liefern Ergebnisse, die alle Kriterien erfüllen.
Tipp
Tipp
Wie in Hinweise zu Ressourcen-Eigenschaftswerten erwähnt, verwenden Sie bei direkter Nutzung der API 0, um einen Nullwert darzustellen. Um jedoch nach einem Nullwert zu suchen, verwenden Sie eine Nullsuche. Sie führen keine numerische Suche nach 0 durch.
Die Suchkriterien umfassen die folgenden Elemente:
  • Der Name des Feldes (die Eigenschaft der Ressource), nach dem Sie suchen – beachten Sie, dass Feldnamen groß- und kleinschreibungssensitiv sind
  • Ein Wert zum Suchen (oder, bei Datumswerten, ein Datumsbereich)
  • Ein Operator zum Testen von Feldwerten (dies gilt nicht für Datumswert-Suchen)
  • Die maximale Anzahl der zurückzugebenden Elemente (Standard ist 5000)
Tipp
Tipp
Beim Durchführen einer ID-Suche geben Sie den Namen des Feldes nicht an, da angenommen wird, dass es sich um das ID-Feld handelt.
Der Typ des Werts, nach dem Sie suchen, bestimmt die verfügbaren Operatoren.
Typ
Operatoren
Boolesch
wahr (Standard) falsch
Auswahl (für Felder, die eine festgelegte Menge gültiger Werte haben)
gleich (Standard) ungleich
Datum
Datumsbezogene Suchvorgänge verwenden Datumsbereiche und Sie verwenden nicht explizit Operatoren.
ID (für eindeutige IDs)
gleich (Standard) größer-als größer-gleich kleiner-als kleiner-gleich ungleich
Null
wahr (Standard; wahr bedeutet null) falsch
Numerisch
gleich (Standard) größer-als größer-gleich kleiner-als kleiner-gleich ungleich
Zeichenfolge
gleich ungleich
Das folgende Beispiel führt eine einfache Suche nach Richtliniennamen durch.
# Set search criteria
search_criteria = api.SearchCriteria()
search_criteria.field_name = "name"
search_criteria.string_test = "equal"
search_criteria.string_value = name

# Create a search filter
search_filter = api.SearchFilter(None, [search_criteria])
search_filter.max_items = 1

# Perform the search
policies_api = api.PoliciesApi(api.ApiClient(configuration))
policies_api.search_policies(api_version, search_filter=search_filter)
Das folgende Beispiel zeigt, wie ein Suchfilter erstellt wird, der mehrere Kriterien enthält.
# Set search criteria for platform
policy_criteria = api.SearchCriteria()
policy_criteria.field_name = "policyID"
policy_criteria.numeric_test = "equal"
policy_criteria.numeric_value = policy_id

# Set search criteria for relay
relay_criteria = api.SearchCriteria()
relay_criteria.field_name = "relayListID"
relay_criteria.numeric_test = "equal"
relay_criteria.numeric_value = relay_list_id

# Create the search filter
search_filter = api.SearchFilter(None, [policy_criteria, relay_criteria])
Weitere Informationen zur Authentifizierung von API-Aufrufen finden Sie unter Authentifizieren mit Server- und Workload Protection.

Durchsuchbare Felder

Die API-Referenz gibt an, welche Felder einer Ressource durchsuchbar sind. Sie finden die Informationen zu den Feldern in den Antwortobjekten für die Vorgänge.
  1. Klicken Sie auf eine Operation, die den Typ der Ressource zurückgibt, nach der Sie suchen. Zum Beispiel gibt die Describe a Computer-Operation eine Computer-Ressource zurück.
  2. Klicken Sie im Abschnitt Antworten auf 200 successful operation.
  3. Lesen Sie die Beschreibung des Feldes. Die Beschreibungen der durchsuchbaren Felder enthalten "Durchsuchbar als Datentyp", wobei Datentyp String, Numerisch, ID, Datum, Boolean und Auswahl sein kann.
Feldnamen sind case-sensitiv.
Die folgenden Felder sind nicht durchsuchbar:
  • Das locale-Feld eines Objekts
  • Die meisten Felder, die ein Objekt als Wert haben, wie das policySettings-Feld eines Policy-Objekts (siehe unten "Computer-Teilobjekte durchsuchen" für Ausnahmen).
Wenn Sie ein Feld durchsuchen, das nicht durchsuchbar ist, erhalten Sie einen Fehler ähnlich wie Invalid SearchFilter: unknown fieldName: platform.

Computer-Teilobjekte durchsuchen

Obwohl Felder, die ein Objekt als Wert haben, im Allgemeinen nicht durchsuchbar sind, gibt es mehrere Ausnahmen in der Computerklasse. Zum Beispiel ist der Wert des ec2VirtualMachineSummary-Feldes ein Objekt, und mehrere Felder dieses Objekts sind durchsuchbar, wie accountID und das availabilityZone. Ebenso können Sie das name-Feld des Computers interfaces durchsuchen. (Siehe das Antwortschema für die Beschreibung eines Computers-Operation in der API-Referenz für weitere durchsuchbare Unterobjekte.) Das folgende JSON zeigt diese Unterobjekte in der Datenstruktur des Computerobjekts:
{
    "hostName": "gui2-336",
    "displayName": "",
    "description": "",
    ...
    "interfaces": {
      "name": "ethernet",
      ...
    },
    "ec2VirtualMachineSummary": {
      "accountID": "123456789012",
      "availabilityZone": "ap-northeast-1",
      ...
    },
    ...
    "ID": 201
}
Im Suchkriterium wird der Feldname eines Unterobjekts als Pfad ausgedrückt, zum Beispiel ec2VirtualMachineSummary/publicIPAddress und interfaces/name.
Tipp
Tipp
Verwenden Sie den expand-Parameter bei der Suche, um nur die Informationen einzuschließen, die Sie in den zurückgegebenen Computerobjekten benötigen. Weitere Informationen finden Sie unter "Minimieren der Computerantwortgröße" im Leitfaden für Leistungstipps.
Wenn Sie nach einem Computer-Teilobjekt suchen, wird das Teilobjekt automatisch in den zurückgegebenen Computer-Objekten eingeschlossen, außer wenn expand auf none gesetzt ist (keine Teilobjekte werden zurückgegeben). Wenn Sie beispielsweise nach der EC2-Konto-ID suchen und expand auf tasks gesetzt ist, enthalten die zurückgegebenen Computer-Objekte die tasks- und ec2VirtualMachineSummary-Eigenschaften. Wenn expand auf ec2VirtualMachineSummary gesetzt ist, enthalten die zurückgegebenen Computer-Objekte die ec2VirtualMachineSummary-Eigenschaft.
# Search criteria
computer_criteria = api.SearchCriteria()
computer_criteria.field_name = "ec2VirtualMachineSummary/accountID"
computer_criteria.string_test = "equal"
computer_criteria.string_value = account_id

# Search filter
max_items = None
search_filter = api.SearchFilter(max_items, computer_criteria)

# Include only the EC2 virtual machine summary in the returned computers
expand = api.Expand(api.Expand.ec2_virtual_machine_summary)

# Perform the search
computers_api = api.ComputersApi(api.ApiClient(configuration))

return computers_api.search_computers(api_version, search_filter=search_filter, expand=expand.list(), overrides=False)

Feldnamen im Python-Code

Wenn Sie die Python-Clientbibliotheken verwenden, stellen Sie sicher, dass Sie den korrekten Feldnamen in Ihren Suchanfragen verwenden. Einige Feldnamen bestehen aus mehreren zusammengefügten Wörtern und verwenden Camel-Case-Schreibweise, wie die lastUpdated-Eigenschaft der Regeln zum Eindringschutz. Die entsprechende Python-Eigenschaft verwendet ein Unterstrich-Zeichen (_) zur Trennung der zusammengefügten Wörter anstelle der Camel-Case-Schreibweise, zum Beispiel last_updated. Wenn Sie nach einem Feld suchen, müssen Sie den Feldnamen angeben, nach dem Sie suchen (lastUpdated) und nicht die Klassen-Eigenschaft (last_updated).
Wenn Sie einen falschen Feldnamen verwenden, erhalten Sie eine Fehlermeldung mit der Nachricht Invalid SearchFilter: unknown fieldName.
Verwenden Sie den folgenden Algorithmus, um Python-Klasseneigenschaften in Feldnamen zu übersetzen, wenn der Name der Eigenschaft ein oder mehrere Unterstrich-Zeichen (_) enthält:
  1. Schreiben Sie den Buchstaben groß, der direkt nach jedem Unterstrich folgt.
  2. Jeden Unterstrich löschen.

Verwenden Sie Platzhalter bei der Zeichenfolgensuche

Zeichenfolgensuchen unterstützen die Verwendung von zwei Platzhaltern in Zeichenfolgenwerten:
  • %: Steht für null oder mehr Zeichen
  • _; Entspricht 1 Zeichen
Beispielsweise stimmt der Zeichenfolgenwert %Security mit Server- und Workload Protection überein, und er stimmt auch mit Security überein. Der Zeichenfolgenwert version_ stimmt mit version1 überein und stimmt nicht mit version überein. Wenn Sie nach den Zeichen % oder _ suchen möchten, können Sie Platzhalter deaktivieren. Die Verwendung von Platzhaltern ist jedoch standardmäßig aktiviert. Der folgende Suchfilter kann verwendet werden, um die Richtlinie mit dem Namen "Base Policy" zu finden.
# Create the search criteria
search_criteria = api.SearchCriteria()
search_criteria.field_name = "name"
search_criteria.string_test = "equal"
search_criteria.string_value = "Base%"
Tipp
Tipp
Um Platzhaltersuchen zu deaktivieren, setzen Sie die Eigenschaft `stringWildcards` des Objekts `SearchCriteria` auf `false`.
search_criteria.string_wildcards = "false"

Datumsbereich-Suche durchführen

Sie können Felder durchsuchen, die Datumswerte enthalten, die zwischen zwei angegebenen Daten liegen. Die folgenden Suchkriterienfelder definieren den Datumsbereich:
  • FirstDate: Das frühere Datum im Bereich. Der Standardwert ist das frühestmögliche Datum.
  • FirstDateInclusive: Ein boolescher Wert, der angibt, ob der Bereich das FirstDate einschließt (true) oder nicht (false). Der Standardwert ist false.
  • LastDate: Das spätere Datum im Bereich. Der Standardwert ist das spätestmögliche Datum.
  • LastDateInclusive: Ein boolescher Wert, der angibt, ob der Bereich das Enddatum einschließt (wahr) oder nicht (falsch). Der Standardwert ist falsch.
Die Werte für FirstDate und LastDate werden als Anzahl der Millisekunden seit dem 1. Januar 1970 (GMT) angegeben.
Das folgende Beispiel sucht nach Regeln zum Eindringschutz basierend darauf, wann sie zuletzt aktualisiert wurden.
# Time that rules were last updated
current_time_in_ms = int(round(time.time() * 1000))
last_updated_in_ms = current_time_in_ms - (num_days * 24 * 60 * 60 * 1000)

# Set search criteria for the date range
search_criteria = api.SearchCriteria()
search_criteria.field_name = "lastUpdated"
search_criteria.first_date_value = last_updated_in_ms
search_criteria.last_date_value = current_time_in_ms
search_criteria.first_date_inclusive = True
search_criteria.last_date_inclusive = True

# Create a search filter
search_filter = api.SearchFilter(None, [search_criteria])

# Perform the search
intrusion_prevention_rules_api = api.IntrusionPreventionRulesApi(api.ApiClient(configuration))
return intrusion_prevention_rules_api.search_intrusion_prevention_rules(api_version, search_filter=search_filter)
Siehe auch die Suchoperation für Regeln zum Eindringschutz im API-Referenzhandbuch. Informationen zur Authentifizierung von API-Aufrufen finden Sie unter Authentifizieren mit Server- und Workload Protection.

Suche nach Nullwerten

Verwenden Sie eine Null-Test-Suche, um Ressourcen basierend darauf zu finden, ob ein Feld keinen Wert (null) oder irgendeinen Wert hat. Zum Beispiel zeigt das lastSendPolicySuccess-Feld eines Computers an, wann die Richtlinie des Computers zuletzt erfolgreich aktualisiert wurde. Um Computer zu finden, die noch nie ein Richtlinien-Update erhalten haben, führen Sie eine Null-Test-Suche in diesem Feld durch.
Bei dieser Art der Suche umfassen die Suchkriterien den Namen des Feldes, in dem gesucht werden soll, und ob Sie Ressourcen finden möchten, die keinen Wert (null_test = true) oder irgendeinen Wert (null_test = false) haben.
Das folgende Beispiel sucht nach Computern, die noch nie ein Richtlinien-Update erhalten haben:
# Search criteria
computer_criteria = api.SearchCriteria()
computer_criteria.field_name = "lastSendPolicySuccess"
computer_criteria.null_test = True

# Search filter
max_items = None
search_filter = api.SearchFilter(max_items, computer_criteria)

# Include minimal information in the returned computers
expand = api.Expand(api.Expand.none)

# Perform the search
computers_api = api.ComputersApi(api.ApiClient(configuration))

return computers_api.search_computers(api_version, search_filter=search_filter, expand=expand.list(), overrides=False)
Weitere Informationen finden Sie in der Suche nach Computern-Operation in der API-Referenz.

Sortierreihenfolge

Die Merkmale der Suchkriterien bestimmen die Sortierreihenfolge der Suchergebnisse:
  • Boolean, Choice, Null, and String searches: Sortiert nach der ID des zurückgegebenen Objekts in aufsteigender Reihenfolge.
  • ID searches: Nach ID sortiert. Der Operator bestimmt, ob die Reihenfolge aufsteigend oder absteigend ist:
    • kleiner als und kleiner gleich: absteigend
    • Alle anderen Operatoren: aufsteigend
  • Numeric searches: Sortiert nach dem Feld, das durchsucht wird. Der Operator bestimmt, ob die Reihenfolge aufsteigend oder absteigend ist:
    • kleiner als und kleiner gleich: absteigend
    • Alle anderen Operatoren: aufsteigend
    Wenn mehrere Suchergebnisse denselben Wert für das gesuchte Feld haben, werden diese Objekte sekundär nach ID sortiert.
  • Date searches: Sortiert nach dem Feld, das durchsucht wird. Die für die Suche angegebenen Datumsbereich-Parameter bestimmen die Sortierreihenfolge:
    • Nur LastDate ist angegeben: absteigend
    • Jede andere Kombination: aufsteigend
    Wenn mehrere Suchergebnisse denselben Wert für das gesuchte Datumsfeld haben, werden diese Objekte sekundär nach ID sortiert.
  • Multiple search criteria: Suchen, die mehrere Suchkriterien verwenden, werden nach ID (aufsteigend) sortiert, unabhängig von der Standardsortierreihenfolge der einzelnen Kriterien.
Mit SearchFilter-Objekten können Sie die standardmäßige Sortierreihenfolge außer Kraft setzen und nach der ID der zurückgegebenen Objekte sortieren.

Suchergebnisse und Seitenumbruch begrenzen

Verwenden Sie das maxItems-Feld eines Suchfilters, um die Anzahl der zurückgegebenen Objekte zu begrenzen. Die maximale Anzahl der zurückgegebenen Objekte beträgt standardmäßig 5000 und kann 5000 nicht überschreiten.
Sie können auch das Feld maxItems verwenden, um die Seiteneinteilung der Ergebnisse von ID-Suchen zu implementieren:
  • Suche nach ID mit dem Größer-als-Operator
  • Verwenden Sie maxItems, um die Seitengröße festzulegen
  • Berechnen Sie den Wert der ID, nach der gesucht werden soll, basierend auf der höchsten ID auf der vorherigen Ergebnisseite.
Das folgende Beispiel zeigt, wie Sie Suchen verwenden, um alle Computer in einer Reihe von Seiten abzurufen.
# Set search criteria
search_criteria = api.SearchCriteria()
search_criteria.id_value = 0
search_criteria.id_test = "greater-than"

# Create a search filter with maximum returned items
page_size = 10
search_filter = api.SearchFilter()
search_filter.max_items = page_size
search_filter.search_criteria = [search_criteria]

# Include the minimum information in the returned Computer objects
expand = api.Expand(api.Expand.none)

# Perform the search and do work on the results
computers_api = api.ComputersApi(api.ApiClient(configuration))
paged_computers = []


while True:
    computers = computers_api.search_computers(api_version, search_filter=search_filter, expand=expand.list(), overrides=False)
    num_found = len(computers.computers)
    current_paged_computers = []
    if num_found == 0:
        print("No computers found.")
        break

    for computer in computers.computers:
        current_paged_computers.append(computer)

    paged_computers.append(current_paged_computers)

    # Get the ID of the last computer in the page and return it with the number of computers on the page
    last_id = computers.computers[-1].id
    search_criteria.id_value = last_id
    print("Last ID: " + str(last_id), "Computers found: " + str(num_found))

return paged_computers
Siehe auch die Computer durchsuchen-Operation im API-Referenzhandbuch. Informationen zur Authentifizierung von API-Aufrufen finden Sie unter Authentifizierung mit Server- und Workload Protection.