Session Recording

Les sessions ne sont pas enregistrées

Si les sessions d’application ne sont pas enregistrées correctement, vérifiez le journal des événements de l’application dans l’Observateur d’événements sur l’agent d’enregistrement de session et le serveur d’enregistrement de session. Cela peut fournir des informations de diagnostic précieuses.

Si les sessions ne sont pas enregistrées, la cause possible peut être :

  • Connectivité des composants et certificats. Si les composants d’enregistrement de session ne peuvent pas communiquer entre eux, l’enregistrement de session peut échouer. Pour résoudre les problèmes d’enregistrement, vérifiez que tous les composants sont configurés correctement pour pointer vers les machines appropriées et que tous les certificats sont valides et correctement installés.
  • Environnements de domaine non-Active Directory. L’enregistrement de session est conçu pour fonctionner dans un environnement de domaine Microsoft Active Directory. Si vous n’opérez pas dans un environnement Active Directory, vous pourriez rencontrer des problèmes d’enregistrement. Assurez-vous que tous les composants d’enregistrement de session s’exécutent sur des machines membres d’un domaine Active Directory.
  • Le partage de session est en conflit avec la stratégie active. L’enregistrement de session associe la stratégie active à la première application publiée qu’un utilisateur ouvre. Les applications ultérieures ouvertes pendant la même session continuent de suivre la stratégie en vigueur pour la première application. Pour éviter que le partage de session n’entre en conflit avec la stratégie active, publiez les applications conflictuelles sur des VDA de système d’exploitation multi-session distincts.
  • L’enregistrement n’est pas activé. Par défaut, l’installation de l’agent d’enregistrement de session sur un VDA de système d’exploitation multi-session active l’enregistrement pour le VDA. L’enregistrement ne se produit pas tant qu’une stratégie d’enregistrement active n’est pas configurée pour l’autoriser.
  • La stratégie d’enregistrement active n’autorise pas l’enregistrement. Une session ne peut être enregistrée que si elle respecte les règles de la stratégie d’enregistrement active.
  • Les services d’enregistrement de session ne sont pas en cours d’exécution. Pour que les sessions soient enregistrées, le service de l’agent d’enregistrement de session doit être en cours d’exécution sur un VDA de système d’exploitation multi-session et le service du gestionnaire de stockage d’enregistrement de session doit être en cours d’exécution sur la machine hébergeant le serveur d’enregistrement de session.
  • MSMQ n’est pas configuré. Si MSMQ n’est pas correctement configuré sur le serveur exécutant l’agent d’enregistrement de session et sur la machine hébergeant le serveur d’enregistrement de session, des problèmes d’enregistrement peuvent survenir.
  • Le composant de base de données d’enregistrement de session n’est pas mis à niveau correctement. Lorsque vous mettez à niveau une installation existante, vous devez suivre strictement la séquence de mise à niveau. Si vous avez plusieurs serveurs d’enregistrement de session dans votre déploiement, vous devez d’abord mettre à niveau le serveur d’enregistrement de session où le composant de base de données d’enregistrement de session est installé. Sinon, l’enregistrement de session échoue. Pour corriger le problème du composant de base de données d’enregistrement de session qui n’a pas été mis à niveau correctement, effectuez l’une des actions suivantes :

    • Localisez le serveur d’enregistrement de session où le composant de base de données d’enregistrement de session est installé. Exécutez ensuite l’ISO Citrix Virtual Apps and Desktops ou le package SessionRecordingAdministrationx64.msi sur celui-ci.

    • Exécutez le script suivant sur l’un des serveurs d’enregistrement de session de votre déploiement. Lors de l’exécution du script, fournissez le chemin d’accès au package SessionRecordingAdministrationx64.msi en tant que paramètre.

       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-->
      
Les sessions ne sont pas enregistrées