Session Recording

Sitzungen werden nicht aufgezeichnet

Wenn Sitzungen nicht aufgezeichnet werden, prüfen Sie das Anwendungsereignisprotokoll in der Ereignisanzeige auf dem Sitzungsaufzeichnungsagent und Sitzungsaufzeichnungsserver. Auf diese Weise können Sie nützliche Diagnoseinformationen erhalten.

Wenn Sitzungen nicht aufgezeichnet werden, kann dies folgende Ursachen haben:

  • Komponentenverbindungen und Zertifikate. Wenn die Sitzungsaufzeichnungskomponenten nicht miteinander kommunizieren können, können Sitzungsaufzeichnungen fehlschlagen. Bei Aufzeichnungsproblemen sollten Sie überprüfen, ob alle Komponenten richtig konfiguriert sind und auf die richtigen Maschinen verweisen, und ob Zertifikate gültig und richtig installiert sind.
  • Umgebungen ohne Active Directory-Domäne. Die Sitzungsaufzeichnung ist für eine Ausführung in einer Microsoft Active Directory-Domänenumgebung konzipiert. Wenn Sie keine Active Directory-Umgebung ausführen, können Aufzeichnungsprobleme auftreten. Stellen Sie sicher, dass alle Komponenten der Sitzungsaufzeichnung auf Maschinen ausgeführt werden, die Mitglieder einer Active Directory-Domäne sind.
  • Die Sitzungsfreigabe verursacht einen Konflikt mit der aktiven Richtlinie: Die Sitzungsaufzeichnung ordnet die aktive Richtlinie der ersten veröffentlichten Anwendung zu, die ein Benutzer öffnet. Anwendungen, die später in derselben Sitzung geöffnet werden, halten die Richtlinie ein, die für die erste Anwendung gilt. Veröffentlichen Sie die problematischen Anwendungen auf separaten Multisitzungs-OS-VDAs, um einen Konflikt zwischen der Sitzungsfreigabe und der aktiven Richtlinie zu vermeiden.
  • Die Aufzeichnung ist nicht aktiviert: Wenn Sie den Sitzungsaufzeichnungsagent auf einem VDA für Multisitzungs-OS installieren, wird die Aufzeichnung für den VDA standardmäßig aktiviert. Die Aufzeichnung erfolgt erst, wenn eine aktive Aufzeichnungsrichtlinie konfiguriert ist, die Aufzeichnungen zulässt.
  • Die aktive Aufzeichnungsrichtlinie lässt die Aufzeichnung nicht zu. Sitzungen können nur aufgezeichnet werden, wenn sie die Regeln der aktiven Aufzeichnungsrichtlinie erfüllen.
  • Die Dienste der Sitzungsaufzeichnung werden nicht ausgeführt. Zum Aufzeichnen von Sitzungen muss der Sitzungsaufzeichnungsagent auf dem Multisitzungs-OS-VDA und der Speichermanager der Sitzungsaufzeichnung auf der Maschine mit dem Sitzungsaufzeichnungsserver ausgeführt werden.
  • MSMQ ist nicht konfiguriert: Wenn MSMQ auf dem Computer mit dem Sitzungsaufzeichnungsagent und der Maschine mit dem Sitzungsaufzeichnungsserver falsch konfiguriert ist, können Aufzeichnungsprobleme auftreten.
  • Die Windows-Leistungsindikatoren für den Sitzungsaufzeichnungsagent fehlen, sind deaktiviert oder beschädigt. Im Anwendungsprotokoll auf dem Sitzungsaufzeichnungsagent werden möglicherweise die folgenden Fehler angezeigt:

    Fehler bei Windows-Leistungsindikatoren

    Um das Problem zu beheben, erstellen Sie alle Leistungsindikatoren neu:

    1. Öffnen Sie die Eingabeaufforderung (CMD) als Administrator.
    2. Navigieren Sie zu windows\system32, indem Sie cd c:\windows\system32\ eingeben.
    3. Geben Sie lodctr /R ein und drücken Sie die Eingabetaste. Mit dem Befehl lodctr /R erstellen Sie die Leistungsindikatoren neu.
    4. Nachdem der Befehl lodctr /R ausgeführt wurde, sind einige der neu erstellten Leistungsindikatoren möglicherweise deaktiviert. Führen Sie den Befehl lodctr /Q aus, um den Indikatorstatus zu überprüfen. Wenn Sie sehen, dass ein Indikator deaktiviert ist, können Sie ihn aktivieren, indem Sie den Befehl lodctr /E: [counter name] ausführen.
  • Die Datenbankkomponente für die Sitzungsaufzeichnung wurde nicht ordnungsgemäß aktualisiert. Wenn Sie eine bestehende Installation aktualisieren, müssen Sie die Upgradesequenz strikt einhalten. Wenn Ihre Bereitstellung über mehrere Sitzungsaufzeichnungsserver verfügt, müssen Sie zuerst den Sitzungsaufzeichnungsserver aktualisieren, auf dem die Datenbank für die Sitzungsaufzeichnung installiert ist. Andernfalls schlägt die Sitzungsaufzeichnung fehl. Führen Sie eine der folgenden Aktionen durch, um das Problem zu beheben, dass die Datenbankkomponente für die Sitzungsaufzeichnung nicht ordnungsgemäß aktualisiert wurde:

    • Suchen Sie den Sitzungsaufzeichnungsserver, auf dem die Datenbankkomponente für die Sitzungsaufzeichnung installiert ist. Führen Sie dann das Citrix Virtual Apps and Desktops-ISO oder das Paket SessionRecordingAdministrationx64.msi darauf aus.

    • Führen Sie das folgende Skript auf einem der Sitzungsaufzeichnungsserver in Ihrer Bereitstellung aus. Geben Sie beim Ausführen des Skripts den Pfad zum Paket SessionRecordingAdministrationx64.msi als Parameter an.

       param(
           [Parameter(Mandatory=$true)]
           [ValidateNotNullOrEmpty()]
           [string]$Installer
       )
       Add-Type -AssemblyName System.Data
      
       if (!(Test-Path "$PSScriptRoot\bin\lessmsi.exe")) {
           Write-Error "Download zip of binaries from https://github.com/activescott/lessmsi/releases/download/v1.10.0/lessmsi-v1.10.0.zip and extract to \bin in this folder!"
           exit
       }
      
       # MSI-Datenbank öffnen
       $msi = New-Object -ComObject WindowsInstaller.Installer
       $msidb = $msi.OpenDatabase($Installer, 0)
      
       # Abfragedateitabelle
       $query = "SELECT Version FROM File WHERE FileName = 'SMAUDD~1.DLL|SsRecDatabase.dll'"
      
       $view = $msidb.OpenView($query)
       $view.Execute()
      
       # Get DLL version
       $record = $view.Fetch()
      
       $version = $record.GetType().InvokeMember("StringData", "GetProperty", $null, $record, 1)
       $parts = $version.Split(".")
       [int] $major = $parts[0]
       [int] $minor = $parts[1]
       $majorMinor = $parts[0..1] -join "."
       $versionCompare = $major * 100 + $minor
      
       # Get db instance and name
       $registryKey = [Microsoft.Win32.Registry]::LocalMachine.OpenSubKey("SOFTWARE\Citrix\SmartAuditor\Server")
       $dbName = $registryKey.GetValue("DatabaseName")
       $dbInstance = $registryKey.GetValue("SmAudDatabaseInstance")
      
      
       write-host "Upgrade db($dbInstance\$dbName) to version $version"
      
       $schemaVersionMap = @{}
       $schemaVersionMap["19.12"] = "1.2.3.0"
       $schemaVersionMap["22.3"] = "1.3.3.0"
       $schemaVersionMap["22.6"] = "1.3.4.0"
       $schemaVersionMap["22.9"] = "1.3.4.0"
       $schemaVersionMap["22.12"] = "1.3.5.0"
       $schemaVersionMap["23.3"] = "1.3.6.0"
       $schemaVersionMap["23.5"] = "1.3.7.0"
       $schemaVersionMap["23.8"] = "1.3.8.0"
      
       $DBSchemaUpdatePatchList = @(
           "1.1.0.0",
           "1.2.0.0",
           "1.2.1.0",
           "1.2.2.0",
           "1.2.3.0",
           "1.2.4.0",
           "1.2.5.0",
           "1.2.6.0",
           "1.2.7.0",
           "1.2.8.0",
           "1.2.9.0",
           "1.3.0.0",
           "1.3.1.0",
           "1.3.2.0",
           "1.3.3.0",
           "1.3.4.0",
           "1.3.5.0",
           "1.3.6.0",
           "1.3.7.0",
           "1.3.8.0"
       )
      
       $currentSchemaVersion = $schemaVersionMap[$majorMinor]
      
       # Connect db
       $conn = New-Object System.Data.SqlClient.SqlConnection
       $conn.ConnectionString = "workstation id=.;packet size=4096;integrated security=SSPI;data source=$dbInstance;persist security info=True;initial catalog=$dbName"
      
       # Open connection
       $conn.Open()
      
       # Get existing db schema version
       $cmdGetSchema = $conn.CreateCommand()
       $cmdGetSchema.CommandType = [System.Data.CommandType]::StoredProcedure
       $cmdGetSchema.CommandText = "[GetSchemaVersion]"
       $out1 = $cmdGetSchema.Parameters.Add("@Major", [System.Data.SqlDbType]::Int)
       $out1.Direction = [System.Data.ParameterDirection]::Output
       $out2 = $cmdGetSchema.Parameters.Add("@Minor", [System.Data.SqlDbType]::Int)
       $out2.Direction = [System.Data.ParameterDirection]::Output
       $out3 = $cmdGetSchema.Parameters.Add("@Build", [System.Data.SqlDbType]::Int)
       $out3.Direction = [System.Data.ParameterDirection]::Output
       $out4 = $cmdGetSchema.Parameters.Add("@Revision", [System.Data.SqlDbType]::Int)
       $out4.Direction = [System.Data.ParameterDirection]::Output
       $cmdGetSchema.ExecuteNonQuery()
      
       $existDbSchemaVersion = [string]::Format("{0}.{1}.{2}.{3}", $out1.Value, $out2.Value, $out3.Value, $out4.Value)
       write-host "Existing DB Schema Version: $existDbSchemaVersion"
      
       if ([string]::Compare($existDbSchemaVersion, $currentSchemaVersion) -lt 0) {
           Write-Output "Upgrade $existDbSchemaVersion to $currentSchemaVersion"
      
           & $PSScriptRoot\bin\lessmsi.exe x $Installer $PSScriptRoot\ SsRecDatabase.dll
           $tempdir = "$PSScriptRoot\SOURCEDIR\Program Files\Citrix\SessionRecording\Database\Bin"
           # Load assembly and get resource
           $asm = [Reflection.Assembly]::LoadFile("$tempdir\SsRecDatabase.dll")
      
           foreach ($patch in $DBSchemaUpdatePatchList) {
               if ([string]::Compare($existDbSchemaVersion, $patch) -le 0 -and [string]::Compare($patch, $currentSchemaVersion) -lt 0) {
                   write-host "Applying $patch"
                   # switch to db
                   $switchCmd = $conn.CreateCommand()
                   $switchCmd.CommandText = "use [$dbName]"
                   $switchCmd.ExecuteNonQuery()
      
                   $resStream = $asm.GetManifestResourceStream("SmAudDatabase.$patch-MigrateDatabase.sql")
                   $bytes = New-Object byte[] $resStream.Length
                   $resStream.Read($bytes, 0, $resStream.Length)
                   $script = [System.Text.Encoding]::UTF8.GetString($bytes)
      
                   $statements = [regex]::Split($script, "\s[gG][oO]\s")
                   foreach($statement in $statements) {
                       $upgradeCmd = $conn.CreateCommand()
                       $upgradeCmd.CommandText = $statement
                       $upgradeCmd.ExecuteNonQuery()
                   }
      
                   $existDbSchemaVersion = $patch
               } else {
                   write-host "Skip $patch"
               }
           }
           # UpdateStaticData
           $staticCmd = $conn.CreateCommand()
           $staticCmd.CommandText = "use [$dbName];if not exists(select * from [dbo].[StartReason] where ID=4) begin insert [dbo].[StartReason] values(4, 'Event Triggered') end"
           $staticCmd.ExecuteNonQuery()
      
           if ($versionCompare -ge 2308) {
               # upgrade record policy version
               $staticCmd = $conn.CreateCommand()
               $staticCmd.CommandText = "update [dbo].[PolicyDocument] set PolicyFileFormatMajorVersion = 1, PolicyFileFormatMinorVersion = 3 where SystemDefined = 1"
               $staticCmd.ExecuteNonQuery()
      
               # upgrade endreason
               $staticCmd = $conn.CreateCommand()
               $staticCmd.CommandText = "if not exists(select * from [dbo].[EndReason] where ID=5) begin insert [dbo].[EndReason] values(5 , 'Dormant') end"
               $staticCmd.ExecuteNonQuery()
           }
      
           if ($versionCompare -ge 2311) {
      
               # upgrade endreason
               $staticCmd = $conn.CreateCommand()
               $staticCmd.CommandText = "if not exists(select * from [dbo].[EndReason] where ID=6) begin insert [dbo].[EndReason] values(6 , 'Deny') end"
               $staticCmd.ExecuteNonQuery()
           }
           write-host "Upgrade success!"
       }
       else {
           Write-Output "Current schema version don't need upgrade"
       }
      
       $conn.Close()
       <!--NeedCopy-->
      
Sitzungen werden nicht aufgezeichnet

In diesem Artikel