Session Recording

Les sessions ne sont pas enregistrées

Si l’enregistrement de vos sessions applicatives échoue, vérifiez le journal d’application dans l’observateur d’événements de l’agent d’enregistrement de session et du serveur d’enregistrement de session. Cela peut vous fournir des informations de diagnostic importantes.

Si les sessions ne sont pas enregistrées, les causes possibles sont les suivantes :

  • Connectivité des composants et certificats. Si les composants d’enregistrement de session ne peuvent pas communiquer entre eux, l’enregistrement de la session peut échouer. Pour résoudre les problèmes d’enregistrement, vérifiez que tous les composants sont configurés correctement de manière à pointer vers les machines correctes et que tous les certificats sont valides et installés correctement.
  • Environnements de domaine non Active Directory. L’enregistrement de session est conçu pour être exécuté dans un environnement de domaine Microsoft Active Directory. Si vous n’évoluez pas dans un environnement Active Directory, vous pouvez avoir des difficultés d’enregistrement. Veillez à ce que tous les composants d’enregistrement de session sont exécutés sur des machines membres d’un domaine Active Directory.
  • Le partage de session entre en conflit avec la stratégie active. L’enregistrement de session fait correspondre la stratégie active à la première application publiée qu’un utilisateur ouvre. Toute application suivante ouverte au cours de la même session continue d’observer la stratégie en vigueur pour la première application. Pour empêcher le partage de session d’entrer en conflit avec la stratégie active, publiez les applications en conflit sur des VDA avec OS multi-session distincts.
  • L’enregistrement n’est pas activé. Par défaut, l’installation de l’agent d’enregistrement de session sur un VDA pour OS multi-session permet d’activer la fonction d’enregistrement sur le VDA. L’enregistrement n’aura pas lieu tant qu’une stratégie d’enregistrement active n’a pas été configurée pour le permettre.
  • La stratégie d’enregistrement active n’autorise pas l’enregistrement. Une session peut être enregistrée uniquement lorsqu’elle répond aux règles de la stratégie d’enregistrement active.
  • Les services d’enregistrement de session ne sont pas exécutés. Pour que les sessions soient enregistrées, le service de l’agent d’enregistrement de session doit être exécuté sur un VDA avec OS multi-session et le service Gestionnaire de stockage d’enregistrement de session doit s’exécuter sur la machine hébergeant le serveur d’enregistrement de session.
  • MSMQ n’est pas configuré. Si MSMQ n’est pas configuré correctement 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 se produire.
  • Le composant de base de données d’enregistrement de session n’est pas correctement mis à niveau. Lorsque vous mettez à niveau une installation existante, vous devez suivre scrupuleusement la séquence de mise à niveau. Si votre déploiement comporte plusieurs serveurs d’enregistrement de session, vous devez commencer par mettre à niveau celui sur lequel le composant de base de données d’enregistrement de session est installé. Dans le cas contraire, l’enregistrement de session échoue. Pour corriger le problème inhérent à la mise à niveau incorrecte du composant de base de données d’enregistrement de session, effectuez l’une des actions suivantes :

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

    • 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, indiquez le chemin d’accès au package SessionRecordingAdministrationx64.msi dans les paramètres.

       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

Dans cet article