> ## Documentation Index
> Fetch the complete documentation index at: https://docs.abbyy.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Sicherheitsereignisprotokoll aus dem System Monitor

> Laden Sie das Sicherheitsereignisprotokoll zu Berechtigungsänderungen aus dem ABBYY FlexiCapture System Monitor mit einem Skript über die GetSecurityEventsCSV-POST-Anfrage als CSV herunter.

Dieses Protokoll erfasst Ereignisse im Zusammenhang mit dem Hinzufügen, Löschen und sonstigen Ändern von Benutzerberechtigungen. Die Protokollierung von Sicherheitsereignissen ist standardmäßig deaktiviert und kann nur vom System Administrator direkt in einer FlexiCapture-Datenbank aktiviert werden. Weitere Informationen finden Sie unter [Sicherheitsereignisprotokoll](/de/flexi-capture/web-stations/monitoring-console/mmc-security-event-log).

<Warning>
  Nur Benutzer mit System Administrator-Berechtigungen können Sicherheitsereignisprotokolle aus dem System Monitor herunterladen. Ein System Administrator ist der Administrator eines Standardmandanten.
</Warning>

Verwenden Sie zum Herunterladen dieses Protokolls eine POST-Anfrage:

```http theme={null}
POST https://<server address>/FlexiCapture12/Monitoring/Tenant/GetSecurityEventsCSV
```

<div id="request-parameters">
  ## Anfrageparameter
</div>

Alle Parameter sind erforderlich. Stellen Sie sicher, dass sie korrekt angegeben werden.

<Info>
  Die Suche in Oracle Database unterscheidet zwischen Groß- und Kleinschreibung. Berücksichtigen Sie dies, wenn Sie Oracle Database verwenden.
</Info>

| Parameter         | Typ    | Beschreibung                                                                                                                                                                                                                                                                   |
| ----------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `filter`          | string | Filterbedingungen für das Protokoll. Kombinieren Sie Bedingungen ausschließlich mit den Operatoren `AND` und `OR`, die im Parameter `GeneralOperator` festgelegt werden. Weitere Informationen finden Sie unter [Erstellen des Filterparameters](#build-the-filter-parameter). |
| `columnsOrder`    | string | Kommagetrennte Liste der Spalten, die in den Bericht aufgenommen werden: `ID`, `Date`, `EventType`, `Details`, `RemoteHost`, `Principal`, `TenantName`, `Writer`, `WriterTenantName`.                                                                                          |
| `sortColumnindex` | int    | Index der Spalte, nach der die Datensätze im Protokoll sortiert werden.                                                                                                                                                                                                        |
| `sortOrder`       | bool   | Sortierreihenfolge: `true` sortiert in absteigender Reihenfolge, `false` in aufsteigender Reihenfolge.                                                                                                                                                                         |
| `tenantId`        | int    | Mandanten, die in das Protokoll aufgenommen werden: `-1` für alle verfügbaren Mandanten, `0` für den Standardmandanten oder eine bestimmte Mandanten-ID (`1` oder höher).                                                                                                      |

<div id="build-the-filter-parameter">
  ### Den Filterparameter erstellen
</div>

Der Parameter `filter` erwartet ein JSON-Objekt. Zum Beispiel:

```json theme={null}
{
  "GeneralOperator": "AND",
  "FilterItems": [
    {
      "PropertyKey": "Date",
      "PropertyOperator": "BETWEEN",
      "PropertyValues": [
        "2021-08-28",
        "00:00:00",
        "2023-09-28",
        "23:59:59"
      ]
    }
  ]
}
```

Um die Werte für die Parameter `PropertyKey` und `PropertyOperator` zu ermitteln, erstellen Sie in der Administration and Monitoring Console einen Filter:

<Steps>
  <Step title="Öffnen Sie die Entwicklertools des Browsers">
    Klicken Sie im Browsermenü auf **Weitere Tools → Entwicklertools** und wechseln Sie zur Registerkarte **Network**.
  </Step>

  <Step title="Erstellen Sie einen Filter in der Konsole">
    Starten Sie die Administration and Monitoring Console, wechseln Sie zu **System Monitor → Sicherheitsereignisprotokoll** und klicken Sie auf die Schaltfläche <img src="https://mintcdn.com/abbyy/39LtOHLEp1q7pm1x/images/flexi-capture/Add_filter.png?fit=max&auto=format&n=39LtOHLEp1q7pm1x&q=85&s=7fca1d511f8470021946ae439989fb68" alt="Schaltfläche „Filter hinzufügen“" style={{display:"inline-block",verticalAlign:"middle",margin:0}} width="22" height="22" data-path="images/flexi-capture/Add_filter.png" />.
  </Step>

  <Step title="Wenden Sie die Filterkriterien an">
    Geben Sie die Filterkriterien an und klicken Sie auf **Apply**.
  </Step>

  <Step title="Lesen Sie die Filterparameter aus">
    Klicken Sie auf die Anfrage `GetFilteredSecurityEvent`. Die Filterparameter werden auf der Registerkarte **Payload** aufgeführt.
  </Step>
</Steps>

<div id="example-script">
  ## Beispielskript
</div>

Das folgende PowerShell-Skript zeigt, wie Sie diese API zum Herunterladen des Sicherheitsereignisprotokolls verwenden.

<Note>
  Ersetzen Sie die Parameter in diesem Skript durch Ihre Serveradresse und Ihre eigenen Zugangsdaten.
</Note>

```powershell theme={null}
# Parameter
$server = "https://<server address>"
$user = "<user name>"
$password = "<password>"
#Pfad zum Ordner, in dem das Protokoll gespeichert wird
$folder = "C:\Temp\Logs\Stage"
$reportFileName = "Tenant_SecurityEvents-{0:yyMMdd-HHmmss}.csv" -f (Get-Date)
# Protokollparameter
$requestBody = @"
filter={
    "Name": "Filter",
    "GeneralOperator": "AND",
    "FilterItems": [
        {
            "PropertyKey": "Date",
            "PropertyOperator": "BETWEEN",
            "PropertyValues": [
                "2021-08-28",
                "00:00:00",
                "2023-09-28",
                "23:59:59"
            ]
        }
    ]
}
&columnsOrder=Id,Date,EventType,Details,RemoteHost,Principal,TenantName,Writer,WriterTenantName,
&sortColumnindex=1
&sortOrder=true
&tenantId=-1
"@
#------------------------------------------------------------------------------
$tenant = "" # Nur Standard-Mandant
$methodUri = "/Tenant/GetSecurityEventsCSV"
$authServer = $server
$ServerSitePath = "/FlexiCapture12/Monitoring"

function Write-Line($str, $color = "White")
{
    Write-Host $str -ForegroundColor $color
}

function Join-Uri
{
    param([Parameter(Mandatory, ValueFromPipeline)] [string]$parent, [string]$child)
    if ($parent -eq "") {return $child;}
    if ($child -eq ""){return $parent}
    if ($parent.endswith("/") -or $parent.endswith("\\")) {$parent = $parent.substring(0,$parent.Length-1)}
    if ($child.startswith("/") -or $child.startswith("\\")) {$child = $child.substring(1,$child.Length-1)}
    return "$parent/$child"
}

function Get-AuthTicket($server, $user, $password, $tenant)
{
    $tenantSuffix=""
    if ($tenant -ne ''){ $tenantSuffix = "?tenant=$tenant"}
    $URL = Join-Uri $authServer "/FlexiCapture12/Server/FCAuth/API/Soap$tenantSuffix"
    $SOAPRequest = '<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><FindUser xmlns="urn:http://www.abbyy.com/FlexiCapture"><userLogin>user</userLogin></FindUser></soap:Body></soap:Envelope>'
    $Headers = @{
        'SOAPAction' = '"#FindUser"'
        'Content-Type' = 'text/xml; charset=utf-8'
        'Authorization' = "Basic $([System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes("$($user):$($password)")))"
    }
    try
    {
        $response1 = Invoke-WebRequest -Uri $URL -Headers $Headers -Body $SOAPRequest -Method 'POST'
        return $response1.Headers['AuthTicket']
    }
    catch{
        Write-Line -str "Couldn't get 'AuthTicket': $_" -color "Red"
        return ""
    }
}

function Download-CSVReport($server, $tenant, $authTicket, $methodUri, $requestBody, $folder, $reportFileName)
{
    $reportFullFilePath = Join-Path $folder $reportFileName
    #Ordner automatisch erstellen (falls nicht vorhanden)
    New-Item -ItemType Directory -Force -Path $folder | Out-Null
    if ($authTicket -eq "" -or $authTicket -eq $null)
    {
        Write-Line -str "Couldn't get 'CSV-Report'" -color "Red"
    }
    else
    {
        $header = @{ "Accept" = "*/*"}
        $session = [Microsoft.PowerShell.Commands.WebRequestSession]::new()
        $session.Cookies.Add($server, [System.NET.Cookie]::new('FlexiCaptureTmpPrn', "Ticket=$authTicket"))
        $tenantInUrl=""
        if ($tenant -ne '') { $tenantInUrl = "/$tenant"}
        $uri = Join-Uri $server $ServerSitePath | Join-Uri -child $tenantInUrl | Join-Uri -child $methodUri
        try{
            $response = Invoke-WebRequest -Uri $uri -Method 'POST' -Headers $header -WebSession $session -Body $requestBody -OutFile $reportFullFilePath -MaximumRedirection 0 -ErrorAction Ignore -PassThru
            if ($response.StatusCode -lt 300)
            {
                Write-Line "CSV-Report done: $reportFullFilePath" "Green"
            }
            else
            {
                Write-Line -str "HttpStatus $($response.StatusCode) in getting CSV-Report." -color "Red"
            }
        }
        catch{
            Write-Line -str "Couldn't get CSV-Report: $_" -color "Red"
            return ""
        }
    }
}

$authTicket = Get-AuthTicket -server $server -user $user -password $password -tenant $tenant
Download-CSVReport -server $server -tenant $tenant -authTicket $authTicket -methodUri $methodUri -requestBody $requestBody -folder $folder -reportFileName $reportFileName
```
