Session Recording

Sitzungen werden nicht aufgezeichnet

Wenn Anwendungssitzungen nicht erfolgreich aufgezeichnet werden, überprüfen Sie das Anwendungsereignisprotokoll in der Ereignisanzeige auf dem Session Recording-Agent und dem Session Recording-Server. Dies kann wertvolle Diagnoseinformationen liefern.

Wenn Sitzungen nicht aufgezeichnet werden, könnte die mögliche Ursache sein:

  • Komponentenkonnektivität und Zertifikate. Wenn die Session Recording-Komponenten nicht miteinander kommunizieren können, kann die Sitzungsaufzeichnung fehlschlagen. Um Aufzeichnungsprobleme zu beheben, überprüfen Sie, ob alle Komponenten korrekt konfiguriert sind, um auf die richtigen Maschinen zu verweisen, und dass alle Zertifikate gültig und korrekt installiert sind.
  • Nicht-Active Directory-Domänenumgebungen. Session Recording ist für den Betrieb in einer Microsoft Active Directory-Domänenumgebung konzipiert. Wenn Sie nicht in einer Active Directory-Umgebung arbeiten, können Aufzeichnungsprobleme auftreten. Stellen Sie sicher, dass alle Session Recording-Komponenten auf Maschinen ausgeführt werden, die Mitglieder einer Active Directory-Domäne sind.
  • Sitzungsfreigabe kollidiert mit der aktiven Richtlinie. Session Recording gleicht die aktive Richtlinie mit der ersten veröffentlichten Anwendung ab, die ein Benutzer öffnet. Nachfolgende Anwendungen, die während derselben Sitzung geöffnet werden, folgen weiterhin der Richtlinie, die für die erste Anwendung gilt. Um zu verhindern, dass die Sitzungsfreigabe mit der aktiven Richtlinie kollidiert, veröffentlichen Sie die kollidierenden Anwendungen auf separaten Multi-Session-OS-VDAs.
  • Aufzeichnung ist nicht aktiviert. Standardmäßig aktiviert die Installation des Session Recording Agent auf einem Multi-Session-OS-VDA die Aufzeichnung für den VDA. Die Aufzeichnung erfolgt erst, wenn eine aktive Aufzeichnungsrichtlinie konfiguriert ist, die dies zulässt.
  • Die aktive Aufzeichnungsrichtlinie erlaubt keine Aufzeichnung. Eine Sitzung kann nur aufgezeichnet werden, wenn die Sitzung die Regeln der aktiven Aufzeichnungsrichtlinie erfüllt.
  • Session Recording-Dienste werden nicht ausgeführt. Damit Sitzungen aufgezeichnet werden können, muss der Session Recording Agent-Dienst auf einem Multi-Session-OS-VDA und der Session Recording Storage Manager-Dienst auf der Maschine, die den Session Recording-Server hostet, ausgeführt werden.
  • MSMQ ist nicht konfiguriert. Wenn MSMQ auf dem Server, auf dem der Session Recording Agent ausgeführt wird, und auf der Maschine, die den Session Recording-Server hostet, nicht korrekt konfiguriert ist, können Aufzeichnungsprobleme auftreten.
  • Die Session Recording-Datenbankkomponente wurde nicht ordnungsgemäß aktualisiert. Wenn Sie eine vorhandene Installation aktualisieren, müssen Sie die Upgrade-Reihenfolge strikt einhalten. Wenn Sie mehr als einen Session Recording-Server in Ihrer Bereitstellung haben, müssen Sie zuerst den Session Recording-Server aktualisieren, auf dem die Session Recording-Datenbankkomponente installiert ist. Andernfalls schlägt die Sitzungsaufzeichnung fehl. Um das Problem der nicht ordnungsgemäß aktualisierten Session Recording-Datenbankkomponente zu beheben, führen Sie eine der folgenden Aktionen aus:

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

    • Führen Sie das folgende Skript auf einem der Session Recording-Server in Ihrer Bereitstellung aus. Geben Sie beim Ausführen des Skripts den Pfad zum SessionRecordingAdministrationx64.msi-Paket 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
       }
      
       # Open MSI database
       $msi = New-Object -ComObject WindowsInstaller.Installer
       $msidb = $msi.OpenDatabase($Installer, 0)
      
       # Query File table
       $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