{"id":240913,"date":"2024-04-23T12:19:52","date_gmt":"2024-04-23T12:19:52","guid":{"rendered":"https:\/\/www.ninjaone.com\/?post_type=script_hub&#038;p=240913"},"modified":"2024-04-23T12:21:11","modified_gmt":"2024-04-23T12:21:11","slug":"detectar-el-tiempo-de-inactividad","status":"publish","type":"script_hub","link":"https:\/\/www.ninjaone.com\/es\/script-hub\/detectar-el-tiempo-de-inactividad\/","title":{"rendered":"C\u00f3mo detectar el tiempo de inactividad del usuario utilizando PowerShell"},"content":{"rendered":"<p>La detecci\u00f3n del tiempo de inactividad en los ordenadores es un aspecto cr\u00edtico para los profesionales de TI, especialmente en la era del aumento de las amenazas a la ciberseguridad y la gesti\u00f3n de recursos. A medida que las organizaciones se digitalizan r\u00e1pidamente y los usuarios suelen permanecer conectados durante largos periodos, <strong>detectar el tiempo de inactividad del usuario<\/strong> se convierte en algo primordial tanto por motivos de seguridad como operativos. En este post, profundizaremos en un script de PowerShell dise\u00f1ado para detectar el tiempo de inactividad del usuario, haciendo que la tarea sea fluida y eficiente.<\/p>\n<h2>Antecedentes<\/h2>\n<p>La capacidad de determinar cu\u00e1nto tiempo ha estado inactivo un usuario puede proporcionar informaci\u00f3n valiosa para los profesionales de TI y los proveedores de servicios gestionados (MSP). Tanto si se trata de liberar recursos como de garantizar que las sesiones no permanezcan abiertas a posibles amenazas para la seguridad, o incluso de consideraciones de facturaci\u00f3n para los proveedores de servicios en la nube, disponer de un m\u00e9todo eficaz y fiable para determinar la inactividad de los usuarios se convierte en algo esencial. Este script en particular le saca el m\u00e1ximo partido a PowerShell para interactuar directamente con el sistema operativo Windows y extraer datos relevantes para medir los tiempos de inactividad.<\/p>\n<h2>El script para detectar el tiempo de inactividad del usuario<\/h2>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">#Requires -Version 5.1\r\n\r\n&lt;#\r\n.SYNOPSIS\r\n    Returns the longest idle time of any user logged in or for a specific user.\r\n.DESCRIPTION\r\n    Returns the longest idle time of any user logged in or for a specific user.\r\n    If RDS(Remote Desktop Services) is installed and the RSAT tools for it as well,\r\n     then this will get the idle time of each logged in user.\r\n    For workstations and servers(with out RDS installed),\r\n     this will get the current idle of the currently logged in user.\r\n    If a user is logged in via the console and another is via the admin RDP session,\r\n     then both will be considered as one user for calculating idle time.\r\n.EXAMPLE\r\n    No parameters needed.\r\n    Returns the longest idle time of all users logged in.\r\n.EXAMPLE\r\n     -UserName \"Fred\"\r\n    Returns the longest idle time of the user Fred.\r\n.EXAMPLE\r\n    PS C:&gt; Get-User-Idle-Time.ps1 -UserName \"Fred\"\r\n    Returns the longest idle time of the user Fred.\r\n.OUTPUTS\r\n    PSCustomObject[]\r\n.NOTES\r\n    Minimum OS Architecture Supported: Windows 10, Windows Server 2016\r\n    Release Notes:\r\n    Adds functions to get idle time from RDS and non-RDS computers.\r\nBy using this script, you indicate your acceptance of the following legal terms as well as our Terms of Use at https:\/\/www.ninjaone.com\/terms-of-use.\r\n    Ownership Rights: NinjaOne owns and will continue to own all right, title, and interest in and to the script (including the copyright). NinjaOne is giving you a limited license to use the script in accordance with these legal terms. \r\n    Use Limitation: You may only use the script for your legitimate personal or internal business purposes, and you may not share the script with another party. \r\n    Republication Prohibition: Under no circumstances are you permitted to re-publish the script in any script library or website belonging to or under the control of any other software provider. \r\n    Warranty Disclaimer: The script is provided \u201cas is\u201d and \u201cas available\u201d, without warranty of any kind. NinjaOne makes no promise or guarantee that the script will be free from defects or that it will meet your specific needs or expectations. \r\n    Assumption of Risk: Your use of the script is at your own risk. You acknowledge that there are certain inherent risks in using the script, and you understand and assume each of those risks. \r\n    Waiver and Release: You will not hold NinjaOne responsible for any adverse or unintended consequences resulting from your use of the script, and you waive any legal or equitable rights or remedies you may have against NinjaOne relating to your use of the script. \r\n    EULA: If you are a NinjaOne customer, your use of the script is subject to the End User License Agreement applicable to you (EULA).\r\n.COMPONENT\r\n    ManageUsers\r\n#&gt;\r\n\r\n[CmdletBinding()]\r\nparam (\r\n    # Specify one user on a Terminal Services Server, else leave blank for normal servers and workstations\r\n    [Parameter(Mandatory = $false)]\r\n    $UserName\r\n)\r\n\r\nbegin {\r\n    function Test-IsElevated {\r\n        $id = [System.Security.Principal.WindowsIdentity]::GetCurrent()\r\n        $p = New-Object System.Security.Principal.WindowsPrincipal($id)\r\n        if ($p.IsInRole([System.Security.Principal.WindowsBuiltInRole]::Administrator))\r\n        { Write-Output $true }\r\n        else\r\n        { Write-Output $false }\r\n    }\r\n    Function Get-QueryUser() {\r\n        Param()\r\n        $Result = @()\r\n        # Replaces all occurrences of 2 or more spaces in a row with a single comma\r\n        $Lines = @(query.exe user).foreach({ $(($_) -replace ('s{2,}', ',')) })\r\n        if ($Lines.Count -gt 1) {\r\n            $Header = $($Lines[0].split(',').trim())\r\n            for ($i = 1; $i -lt $($Lines.Count); $i++) {\r\n                $Res = \"\" | Select-Object $Header\r\n                $Line = $($Lines[$i].split(',')).foreach({ $_.trim().trim('&gt;') })\r\n                # Accounts for disconnected users\r\n                if ($Line.count -eq 5) {\r\n                    $Line = @($Line[0], \"$($null)\", $Line[1], $Line[2], $Line[3], $Line[4] )\r\n                }\r\n                for ($j = 0; $j -lt $($Line.count); $j++) {\r\n                    $Res.$($Header[$j]) = $Line[$j]\r\n                }\r\n                $Result += $Res\r\n                Remove-Variable Res\r\n            }\r\n            return $Result\r\n        }\r\n        else {\r\n            return $null\r\n        }\r\n    }\r\n\r\n    Add-Type @\"\r\nusing System;\r\nusing System.Runtime.InteropServices;\r\nusing System.ComponentModel;\r\n\r\nnamespace GetLastUserInput\r\n{\r\n    public class GetLastUserInput\r\n    {\r\n        private struct LASTINPUTINFO\r\n        {\r\n            public uint cbSize;\r\n            public uint dwTime;\r\n        }\r\n        private static LASTINPUTINFO lastInPutNfo;\r\n        static GetLastUserInput()\r\n        {\r\n            lastInPutNfo = new LASTINPUTINFO();\r\n            lastInPutNfo.cbSize = (uint)Marshal.SizeOf(lastInPutNfo);\r\n        }\r\n        [DllImport(\"User32.dll\")]\r\n        private static extern bool GetLastInputInfo(ref LASTINPUTINFO plii);\r\n\r\n        \/\/\/ &lt;summary&gt;\r\n        \/\/\/ Idle time in ticks\r\n        \/\/\/ &lt;\/summary&gt;\r\n        \/\/\/ &lt;returns&gt;&lt;\/returns&gt;\r\n        public static uint GetIdleTickCount()\r\n        {\r\n            return ((uint)Environment.TickCount - GetLastInputTime());\r\n        }\r\n        \/\/\/ &lt;summary&gt;\r\n        \/\/\/ Last input time in ticks\r\n        \/\/\/ &lt;\/summary&gt;\r\n        \/\/\/ &lt;returns&gt;&lt;\/returns&gt;\r\n        public static uint GetLastInputTime()\r\n        {\r\n            if (!GetLastInputInfo(ref lastInPutNfo))\r\n            {\r\n                throw new Win32Exception(Marshal.GetLastWin32Error());\r\n            }\r\n            return lastInPutNfo.dwTime;\r\n        }\r\n    }\r\n}\r\n\"@\r\n}\r\n\r\nprocess {\r\n    if (-not (Test-IsElevated)) {\r\n        Write-Error -Message \"Access Denied. Please run with Administrator privileges.\"\r\n        exit 1\r\n    }\r\n    if ($(Get-Module -Name \"RemoteDesktop\") -and $(Get-RDServer -ErrorAction SilentlyContinue)) {\r\n        try {\r\n            $Sessions = Get-RDUserSession\r\n            $Sessions | Select-Object UserName, IdleTime\r\n        }\r\n        catch {\r\n            Write-Warning -Message \"A Remote Desktop Services deployment does not exist on $env:COMPUTERNAME.\"\r\n        }\r\n    }\r\n    else {\r\n        Write-Warning -Message \"Remote Desktop Services is not installed on this computer, Falling back to query user.\"\r\n        $Results = Get-QueryUser\r\n        if ($null -eq $Results) {\r\n            Write-Host \"No user(s) logged in.\"\r\n            exit 0\r\n        }\r\n        # Parse query results and loop through each user\r\n        $Results | ForEach-Object {\r\n            $CurrentUser = $_.USERNAME\r\n            # If UserName param is used, only filter that user; If UserName param isn't used, return all users\r\n            if ($CurrentUser -like $UserName -or ([string]::IsNullOrEmpty($UserName) -or [string]::IsNullOrWhiteSpace($UserName))) {\r\n                # Output a PowerShell Custom Object array\r\n                [PSCustomObject]@{\r\n                    UserName    = $CurrentUser\r\n                    SessionName = $_.SESSIONNAME\r\n                    Id          = $_.ID\r\n                    State       = $_.STATE\r\n                    LogonTime   = $_.'LOGON TIME'\r\n                    IdleTime    = if ($_.'IDLE TIME' -like 'none') { 0 }else { $_.'IDLE TIME' }\r\n                }\r\n            }\r\n        } | Sort-Object -Property IdleTime | Select-Object -Property UserName, @{\r\n            # Modify IdleTime when it shows none\r\n            Label      = \"IdleTime\"\r\n            Expression = {\r\n                New-TimeSpan -Start $(Get-Date) -End $(Get-Date).AddMilliseconds([GetLastUserInput.GetLastUserInput]::GetIdleTickCount())\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\nend {}<\/pre>\n<p>&nbsp;<\/p>\n\n<div class=\"in-context-cta\"><p style=\"text-align: center;\">Accede a m\u00e1s de 300 scripts en el Dojo de NinjaOne<\/p>\n<p style=\"text-align: center;\"><a href=\"https:\/\/www.ninjaone.com\/es\/prueba-gratuita-formulario\/\">Obt\u00e9n acceso<\/a><\/p>\n<\/div>\n<h2>An\u00e1lisis detallado<\/h2>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"1\" data-aria-level=\"1\"><strong>Vinculaci\u00f3n y par\u00e1metros del cmdlet<\/strong>: el script comienza con un CmdletBinding, que permite su uso como cmdlet. Contiene un par\u00e1metro opcional para un nombre de usuario espec\u00edfico.<\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"2\" data-aria-level=\"1\"><strong>Funciones internas:<\/strong>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"3\" data-aria-level=\"1\"><strong>Test-IsElevated<\/strong> comprueba si el script se ejecuta con privilegios administrativos.<\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"4\" data-aria-level=\"1\"><strong>Get-QueryUser<\/strong> interact\u00faa con <strong>query.exe<\/strong> para obtener informaci\u00f3n sobre los usuarios actuales.<\/li>\n<\/ul>\n<\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"5\" data-aria-level=\"1\"><strong>Integraci\u00f3n de la biblioteca externa:<\/strong> se utiliza una biblioteca externa (<strong>GetLastUserInput<\/strong>) para obtener el recuento exacto de ticks inactivos.<\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"5\" data-aria-level=\"1\"><strong>Bloque del proceso:<\/strong> aqu\u00ed se realiza la operaci\u00f3n principal.<\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"5\" data-aria-level=\"1\">En primer lugar, comprueba si el script se ejecuta con derechos de administrador.<\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"5\" data-aria-level=\"1\">Si los Servicios de Escritorio Remoto (RDS) est\u00e1n instalados, obtiene el tiempo de inactividad de cada usuario conectado.<\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"5\" data-aria-level=\"1\">Si el RDS no est\u00e1 presente, se vuelve al enfoque de <strong>consulta al usuario<\/strong> y se calcula el tiempo de inactividad bas\u00e1ndose en la \u00faltima entrada del usuario.<\/li>\n<\/ul>\n<h2>Posibles casos de uso<\/h2>\n<p>Imagina que eres administrador de TI en una empresa mediana. Te habr\u00e1s dado cuenta de que muchos usuarios dejan sus puestos de trabajo encendidos y conectados, incluso fuera del horario de oficina. No s\u00f3lo es un riesgo para la seguridad, sino que tambi\u00e9n consume recursos de red y energ\u00eda. Al desplegar este script en toda la empresa, puedes determinar r\u00e1pidamente qu\u00e9 usuarios est\u00e1n trabajando activamente y qu\u00e9 estaciones de trabajo han estado inactivas. Con esta informaci\u00f3n, puedes aplicar pol\u00edticas de cierre autom\u00e1tico o enviar recordatorios a los usuarios para que apaguen sus dispositivos.<\/p>\n<h2>Comparaciones<\/h2>\n<p>Aunque existen herramientas de terceros que detectan el tiempo de inactividad, a menudo vienen con una sobrecarga a\u00f1adida o pueden no tener el detalle granular necesario. Algunos podr\u00edan optar por consultar el registro de sucesos de Windows en busca de eventos espec\u00edficos, pero ese enfoque podr\u00eda pasar por alto matices como la ejecuci\u00f3n de un v\u00eddeo que mantiene la sesi\u00f3n activa. Este script proporciona un m\u00e9todo directo y personalizable, aprovechando las herramientas y comandos nativos de Windows.<\/p>\n<h2>Preguntas frecuentes<\/h2>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"1\" data-aria-level=\"1\"><strong>\u00bfEs necesario RDS para este script?<\/strong><br \/>\nNo, est\u00e1 dise\u00f1ado para detectar el tiempo de inactividad del usuario con y sin RDS.<\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"2\" data-aria-level=\"1\"><strong>\u00bfCu\u00e1l es la precisi\u00f3n del c\u00e1lculo del tiempo de inactividad?<\/strong><br \/>\nEs preciso al nivel de \u00abtick del sistema\u00bb desde la \u00faltima entrada del usuario.<\/li>\n<\/ul>\n<h2>Implicaciones<\/h2>\n<p>Detectar el tiempo de inactividad del usuario no es s\u00f3lo una cuesti\u00f3n de gesti\u00f3n de recursos. Una sesi\u00f3n abierta e inactiva podr\u00eda ser una vulnerabilidad potencial. Los actores maliciosos, una vez dentro de la red, pueden usar estas sesiones en su beneficio. Por lo tanto, la detecci\u00f3n oportuna y la gesti\u00f3n de sesiones son cruciales para la seguridad inform\u00e1tica.<\/p>\n<h2>Recomendaciones<\/h2>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"1\" data-aria-level=\"1\">Ejecuta siempre el script con privilegios administrativos para obtener resultados precisos.<\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"2\" data-aria-level=\"1\">Actualiza y mant\u00e9n regularmente el script para adaptarlo a los cambios en el entorno Windows.<\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"3\" data-aria-level=\"1\">Integra el script con herramientas de supervisi\u00f3n para obtener alertas en tiempo real sobre sesiones inactivas prolongadas.<\/li>\n<\/ul>\n<h2>Reflexiones finales<\/h2>\n<p>En el contexto de la gesti\u00f3n de sesiones de usuario inactivas, herramientas como NinjaOne pueden amplificar a\u00fan m\u00e1s la eficacia al proporcionar <a href=\"https:\/\/www.ninjaone.com\/es\/blog\/explicacion-del-software-de-panel-unico\/\">una plataforma unificada para supervisar, alertar y gestionar.<\/a> Tanto si se trata de optimizar recursos como de reforzar el per\u00edmetro de seguridad, comprender los comportamientos de los usuarios en los tiempos muertos puede ser determinante. El uso de scripts como el que hemos visto para detectar el tiempo de inactividad del usuario puede constituir la espina dorsal de este enfoque, especialmente si se combina con <a href=\"https:\/\/www.ninjaone.com\/es\/\">soluciones integrales de gesti\u00f3n de TI<\/a>.<\/p>\n","protected":false},"author":35,"featured_media":143963,"parent":0,"menu_order":0,"comment_status":"open","ping_status":"closed","template":"","meta":{"_acf_changed":false,"_relevanssi_hide_post":"","_relevanssi_hide_content":"","_relevanssi_pin_for_all":"","_relevanssi_pin_keywords":"","_relevanssi_unpin_keywords":"","_relevanssi_related_keywords":"","_relevanssi_related_include_ids":"","_relevanssi_related_exclude_ids":"","_relevanssi_related_no_append":"","_relevanssi_related_not_related":"","_relevanssi_related_posts":"","_relevanssi_noindex_reason":"","_lmt_disableupdate":"no","_lmt_disable":""},"operating_system":[4212],"use_cases":[4267],"class_list":["post-240913","script_hub","type-script_hub","status-publish","has-post-thumbnail","hentry","script_hub_category-windows","use_cases-gestion-de-usuarios-y-accesos"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.ninjaone.com\/es\/wp-json\/wp\/v2\/script_hub\/240913","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.ninjaone.com\/es\/wp-json\/wp\/v2\/script_hub"}],"about":[{"href":"https:\/\/www.ninjaone.com\/es\/wp-json\/wp\/v2\/types\/script_hub"}],"author":[{"embeddable":true,"href":"https:\/\/www.ninjaone.com\/es\/wp-json\/wp\/v2\/users\/35"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ninjaone.com\/es\/wp-json\/wp\/v2\/comments?post=240913"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.ninjaone.com\/es\/wp-json\/wp\/v2\/media\/143963"}],"wp:attachment":[{"href":"https:\/\/www.ninjaone.com\/es\/wp-json\/wp\/v2\/media?parent=240913"}],"wp:term":[{"taxonomy":"script_hub_category","embeddable":true,"href":"https:\/\/www.ninjaone.com\/es\/wp-json\/wp\/v2\/operating_system?post=240913"},{"taxonomy":"use_cases","embeddable":true,"href":"https:\/\/www.ninjaone.com\/es\/wp-json\/wp\/v2\/use_cases?post=240913"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}