Session Recording

Las sesiones no se están grabando

Si las sesiones de la aplicación no se graban correctamente, compruebe el registro de eventos de la aplicación en el Visor de eventos del agente de grabación de sesiones y del servidor de grabación de sesiones. Esto puede proporcionar información de diagnóstico valiosa.

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

  • Conectividad de componentes y certificados. Si los componentes de Grabación de sesiones no pueden comunicarse entre sí, la grabación de sesiones puede fallar. Para solucionar problemas de grabación, verificar que todos los componentes estén configurados correctamente para apuntar a las máquinas correctas y que todos los certificados sean válidos y estén instalados correctamente.
  • Entornos de dominio que no son de Active Directory. Grabación de sesiones está diseñado para ejecutarse en un entorno de dominio de Microsoft Active Directory. Si no se está ejecutando en un entorno de Active Directory, podría experimentar problemas de grabación. Asegúrese de que todos los componentes de Grabación de sesiones se ejecuten en máquinas que sean miembros de un dominio de Active Directory.
  • Los conflictos de uso compartido de sesiones con la directiva activa. Grabación de sesiones hace coincidir la directiva activa con la primera aplicación publicada que abre un usuario. Las aplicaciones posteriores abiertas durante la misma sesión continúan siguiendo la directiva vigente para la primera aplicación. Para evitar que el uso compartido de sesiones entre en conflicto con la directiva activa, publique las aplicaciones en conflicto en VDA de SO multisesión independientes.
  • La grabación no está habilitada. 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. La grabación no se produce hasta que se configura una directiva de grabación activa para permitirla.
  • La directiva de grabación activa no permite la grabación. Una sesión solo se puede grabar cuando cumple las reglas de la directiva de grabación activa.
  • Los servicios de grabación de sesiones no se están ejecutando. Para que las sesiones se graben, el servicio del agente de grabación de sesiones debe estar ejecutándose en un VDA de SO multisesión y el servicio del administrador de almacenamiento de grabación de sesiones debe estar ejecutándose en la máquina que aloja el servidor de grabación de sesiones.
  • MSMQ no está configurado. Si MSMQ no está configurado correctamente 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, podrían producirse problemas de grabación.
  • El componente de base de datos de grabación de sesiones no se ha actualizado correctamente. Al actualizar una instalación existente, debe seguir estrictamente la secuencia de actualizació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, la grabación de sesiones fallará. Para corregir el problema de que el componente de base de datos de grabación de sesiones no se haya actualizado correctamente, realice una de las siguientes acciones:

    • Localice el servidor de grabación de sesiones donde está instalado el componente de base de datos de grabación de sesiones. Luego, ejecute el ISO de Citrix Virtual Apps and Desktops o el paquete SessionRecordingAdministrationx64.msi en él.

    • 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 están grabando

En este artículo