Session Recording

Sitzungen werden nicht aufgezeichnet

Wenn Anwendungssitzungen 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 VDAs für Multisitzungs-OS, 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 VDA für Multisitzungs-OS 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 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