Ersetzen Sie die Parameterwerte im folgenden Skript gemäß den Anweisungen und führen Sie das Skript dann in PowerShell Core 7.1.0 oder höher aus.
Weitere Informationen zu den Parametern finden Sie unter Sicherheitsprotokolle abrufen.
# PowerShell 7.1.0 # Authentifizierungstoken, das Sie für den Protokollabruf-API-Typ in der Management-Konsole erstellt haben.$apiToken = "<Authentifizierungstoken>" # serviceURL basierend auf Ihrer entsprechenden Cloud App Security-Serving-Site, z. B. api.tmcas.trendmicro.com $baseUrl = 'https://<serviceURL>/v1/siem/security_events # Name des Diensts, dessen Protokolle Sie abrufen möchten, z. B. Exchange $services = @('<Dienstname>') $requestOptions = @{ # Anzahl der Protokolleinträge, die gleichzeitig angezeigt werden sollen, z. B. 10.Maximum: 500 limit = <Anzahl der anzuzeigenden Protokolleinträge)> # Antwortprotokollformat, das cef (im CEF-Format) oder null (im JSON-Format) ist format = 'cef' } # Pfad zur Exportprotokolldatei, z. B. D:\securityrisk_logs.txt $Path = "<file path>" # Abfrageintervall in Sekunden, z. B. 300. Default: 300 $queryIntervals = <Abfrageintervall> $headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]" $headers.Add("Authorization", "Bearer " + $apiToken) $optionalQuery = "" foreach ($key in $requestOptions.keys) { if ($null -ne $key) { $optionalQuery = $optionalQuery + '&' + $key + "=" + $requestOptions[$key] } } function getSecurityLogs($start, $end) { $startTime = Get-Date $start -UFormat '+%Y-%m-%dT%H:%M:%S.000Z' $endTime = Get-Date $end -UFormat '+%Y-%m-%dT%H:%M:%S.000Z' Write-Output "start time: $startTime" Write-Output "end time: $endTime" foreach ( $service in $services ) { "service: [$service]" $response = "" do { $queryUrl = $response.next_link if ($null -eq $queryUrl) { $queryUrl = $baseUrl + '?service=' + $service + '&event=securityrisk' + $optionalQuery + '&start=' + $startTime + '&end=' + $endTime } else { Write-Output "Get from next link $queryUrl" } $response = Invoke-RestMethod $queryUrl -Method 'GET' -Headers $headers -Body $body $jsonBody = $response | ConvertTo-Json Write-Output "$jsonBody" if ($response.code) { Write-Error "Found errors for url=$queryUrl, error=$response['msg']" } elseif ($response.security_events.count -gt 0) { Write-Output "start to write logs to file..." foreach ( $event in $response.security_events ) { $event | Add-Content -Path $Path } } } while (($response -ne "") -and ($response.next_link -ne "")) } } # Eintrag für das gesamte Skript $start = Get-Date ((Get-Date).ToUniversalTime().AddSeconds(-$queryIntervals)) while ($true) { Write-Output "Start to query logs..." $end = (Get-Date).ToUniversalTime() try { getSecurityLogs -start $start -end $end $start = $end } catch { Write-Error "An error occurred that could not be resolved." Write-Host $_ Write-Output "retry query logs in next cycle..." } ## Einige Sekunden warten Start-Sleep -Seconds $queryIntervals }