Session Recording

Las sesiones no se graban

Si las sesiones de aplicación no se están grabando, consulte el registro de eventos de aplicación en el Visor de eventos del Agente de grabación de sesiones y el servidor de Grabación de sesiones. Esto puede proporcionar valiosa información de diagnóstico.

Si las sesiones no se graban, la causa podría ser:

  • Conectividad y certificados de los componentes. Si los componentes de Grabación de sesiones no se pueden comunicar entre sí, la grabación de sesiones puede fallar. Para solucionar los problemas de grabación, verifique que todos los componentes están configurados correctamente y que todos los certificados son válidos y están instalados correctamente.
  • Entornos de dominio de Active Directory. Grabación de sesiones está diseñada para ejecutarse en entornos de dominio de Microsoft Active Directory. Si no se está ejecutando en un entorno Active Directory, se podrían experimentar problemas con la grabación. Compruebe que todos los componentes de Grabación de sesiones se están ejecutando en máquinas que son miembros de un dominio de Active Directory.
  • El uso compartido de sesiones entra en conflicto con la directiva activa. Grabación de sesiones asigna la directiva activa a la primera aplicación publicada que abra el usuario. Las aplicaciones que se abran posteriormente durante la misma sesión seguirán la directiva que se utilizó para la primera aplicación. Para evitar conflictos de uso compartido de sesiones con la directiva activa, publique las aplicaciones en conflicto en diferentes agentes VDA con SO multisesión.
  • Grabación no activada. De forma predeterminada, la instalación del Agente de grabación de sesiones en un VDA de SO multisesión habilita la grabación para el VDA. No se graba hasta que se configure una directiva de grabación que lo permita.
  • La directiva de grabación activa no permite la grabación. Una sesión solo puede grabarse cuando cumple las reglas de la directiva de grabación en vigor.
  • Los servicios de grabación de sesiones no se están ejecutando. Para poder grabar sesiones, el servicio del Agente de grabación de sesiones debe estar ejecutándose en un VDA con SO multisesión y el servicio del Administrador de almacenamiento de grabación de sesiones debe estar ejecutándose en la máquina donde se encuentra el servidor de Grabación de sesiones.
  • MSMQ no está configurado. Si MSMQ no está correctamente configurado en el servidor que ejecuta el agente de Grabación de sesiones y en la máquina que aloja el servidor de Grabación de sesiones, puede haber problemas al grabar.
  • El componente de base de datos de grabación de sesiones no se actualizó correctamente. Al actualizar una instalación existente, debe seguir estrictamente la secuencia de actualización de versión. Si tiene más de un servidor de grabación de sesiones en su implementación, primero debe actualizar el servidor de grabación de sesiones donde está instalado el componente de base de datos de grabación de sesiones. De lo contrario, falla la grabación de la sesión. Para corregir el problema de que el componente de la base de datos de grabación de sesiones no se actualiza correctamente, lleve a cabo una de las siguientes acciones:

    • Busque el servidor de grabación de sesiones donde está instalado el componente de base de datos de grabación de sesiones. A continuación, ejecute la ISO de Citrix Virtual Apps and Desktops o el paquete SessionRecordingAdministrationx64.msi que contiene.

    • Ejecute el siguiente script en cualquiera de los servidores de grabación de sesiones de su implementación. Al ejecutar el script, proporcione la ruta al paquete SessionRecordingAdministrationx64.msi como parámetro.

       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-->
      
Las sesiones no se graban

En este artículo