{"id":508998,"date":"2025-08-13T11:56:31","date_gmt":"2025-08-13T11:56:31","guid":{"rendered":"https:\/\/www.ninjaone.com\/?post_type=script_hub&#038;p=508998"},"modified":"2025-08-13T11:57:23","modified_gmt":"2025-08-13T11:57:23","slug":"cuentas-de-usuario-inactivas-con-powershell","status":"publish","type":"script_hub","link":"https:\/\/www.ninjaone.com\/es\/script-hub\/cuentas-de-usuario-inactivas-con-powershell\/","title":{"rendered":"Detecci\u00f3n autom\u00e1tica de cuentas de usuario inactivas con PowerShell"},"content":{"rendered":"<h2>Principales conclusiones<\/h2>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&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>Protocolo de seguridad automatizado<\/strong>: el script automatiza la identificaci\u00f3n de cuentas de usuario inactivas, lo que mejora la seguridad.<\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&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>Umbral personalizable<\/strong>: ajusta el umbral de inactividad a las pol\u00edticas de la organizaci\u00f3n.<\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&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>Compatibilidad con m\u00faltiples entornos<\/strong>: capaz de gestionar cuentas locales, de Active Directory y de Azure AD.<\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&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>Eficaz en tiempo y recursos<\/strong>: automatiza lo que ser\u00eda un largo proceso manual.<\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&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>Gesti\u00f3n proactiva del riesgo<\/strong>: ayuda a prevenir las brechas de seguridad gestionando las vulnerabilidades potenciales.<\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&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=\"6\" data-aria-level=\"1\"><strong>Transparencia y flexibilidad<\/strong>: al ser un script PowerShell, es transparente y personalizable para necesidades espec\u00edficas.<\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&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=\"7\" data-aria-level=\"1\"><strong>Auditor\u00edas programadas<\/strong>: se puede configurar para que funcione a intervalos regulares para una supervisi\u00f3n continua.<\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&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=\"8\" data-aria-level=\"1\"><strong>Informes exhaustivos<\/strong>: genera informes detallados sobre las cuentas inactivas, lo que facilita la toma de decisiones.<\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&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=\"9\" data-aria-level=\"1\"><strong>Integraci\u00f3n con herramientas de gesti\u00f3n<\/strong>: complementa y se integra con soluciones de gesti\u00f3n de TI como NinjaOne.<\/li>\n<\/ul>\n<p>En el din\u00e1mico panorama de la gesti\u00f3n de TI, la seguridad y la eficacia de la gesti\u00f3n de cuentas de usuario siguen siendo primordiales. Supervisar y tratar peri\u00f3dicamente las cuentas de usuario inactivas no es solo una buena pr\u00e1ctica, sino una necesidad para mantener un entorno de TI seguro. Aqu\u00ed es donde los <a href=\"https:\/\/www.ninjaone.com\/es\/script-hub\/\">scripts de PowerShell<\/a>, como el que estamos analizando hoy, se convierten en herramientas imprescindibles para los profesionales de TI y los <a href=\"https:\/\/www.ninjaone.com\/es\/que-es-un-msp\/\">Proveedores de Servicios Gestionados (MSP).\u00a0<\/a><\/p>\n<h2>Contexto<\/h2>\n<p>El script en cuesti\u00f3n est\u00e1 dise\u00f1ado para identificar y alertar a los administradores sobre cuentas inactivas o no utilizadas en un entorno Windows. Las cuentas inactivas pueden suponer un riesgo importante para la seguridad, ya que, en caso de verse comprometidas, podr\u00edan convertirse en puntos de entrada para accesos no autorizados. Para los profesionales de TI y los MSP, estos scripts son cruciales para abordar preventivamente las vulnerabilidades de seguridad y <a href=\"https:\/\/www.ninjaone.com\/blog\/it-compliance\/\">garantizar<\/a> el cumplimiento de diversas pol\u00edticas y normativas de TI.<\/p>\n<h2>El script:<\/h2>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"powershell\">&lt;#\r\n.SYNOPSIS\r\n    Alerts when there is an inactive \/ unused account that has not logged in or has not had their password set in the specified number of days.\r\n.DESCRIPTION\r\n    Alerts when there is an inactive \/ unused account that has not logged in or has not had their password set in the specified number of days.\r\n.EXAMPLE\r\n    -IncludeDisabled\r\n    \r\n    Action completed: Run Monitor Account Last Logon Result: FAILURE Output: Action: Run Monitor Account Last Logon, Result: Failed\r\n    WARNING: Inactive accounts detected!\r\n\r\n    Username       PasswordLastSet       LastLogon              Enabled\r\n    --------       ---------------       ---------              -------\r\n    Administrator  4\/12\/2023 9:05:18 AM  11\/28\/2023 10:31:06 AM    True\r\n    Guest                                12\/31\/1600 4:00:00 PM    False\r\n    DefaultAccount                       12\/31\/1600 4:00:00 PM    False\r\n    kbohlander     11\/29\/2023 1:49:51 PM 12\/5\/2023 1:09:43 PM      True\r\n    tuser1         12\/1\/2023 5:59:58 PM  12\/4\/2023 9:34:32 AM      True\r\n    krbtgt         11\/27\/2023 3:40:20 PM 12\/31\/1600 4:00:00 PM    False\r\n    tuser2         12\/4\/2023 3:40:27 PM  12\/31\/1600 4:00:00 PM     True\r\n.EXAMPLE\r\n    -Days 60\r\n    \r\n    Action completed: Run Monitor Account Last Logon Result: FAILURE Output: Action: Run Monitor Account Last Logon, Result: Failed\r\n    WARNING: Inactive accounts detected!\r\n\r\n    Username       PasswordLastSet       LastLogon              Enabled\r\n    --------       ---------------       ---------              -------\r\n    Administrator  4\/12\/2023 9:05:18 AM  11\/28\/2023 10:31:06 AM    True\r\n    kbohlander     11\/29\/2023 1:49:51 PM 12\/5\/2023 1:09:43 PM      True\r\n    tuser1         12\/1\/2023 5:59:58 PM  12\/4\/2023 9:34:32 AM      True\r\n    tuser2         12\/4\/2023 3:40:27 PM  12\/31\/1600 4:00:00 PM     True\r\n.OUTPUTS\r\n    None\r\n.NOTES\r\n    Minimum OS Architecture Supported: Windows 7, Windows Server 2012\r\n    Exit code 1: Found users that haven't logged in over X days and are enabled.\r\n    Exit code 2: Calling \"net.exe user\" or \"Get-LocalUser\" failed.\r\n    Release Notes: Renamed script, added Script Variable support, improved ad support, removed requires statement.\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#&gt;\r\n\r\n[CmdletBinding()]\r\nparam (\r\n    [Parameter()]\r\n    [int]$Days = 90,\r\n    [Parameter()]\r\n    [switch]$IncludeDisabled = [System.Convert]::ToBoolean($env:includeDisabled)\r\n)\r\n\r\nbegin {\r\n    # Use script variables if available.\r\n    if ($env:days -and $env:days -notlike \"null\") {\r\n        $Days = $env:Days\r\n    }\r\n\r\n    # Change negative days to the expected positive days\r\n    if ($Days -lt 0) {\r\n        $Days = 0 - $Days\r\n    }\r\n\r\n    # Date where an account is considered inactive.\r\n    $InactivityCutOff = (Get-Date).AddDays(-$Days)\r\n\r\n    function Test-IsDomainJoined {\r\n        if ($PSVersionTable.PSVersion.Major -lt 5) {\r\n            return $(Get-WmiObject -Class Win32_ComputerSystem).PartOfDomain\r\n        }\r\n        else {\r\n            return $(Get-CimInstance -Class Win32_ComputerSystem).PartOfDomain\r\n        }\r\n    }\r\n\r\n    function Test-IsDomainController {\r\n        $OS = if ($PSVersionTable.PSVersion.Major -lt 5) {\r\n            Get-WmiObject -Class Win32_OperatingSystem\r\n        }\r\n        else {\r\n            Get-CimInstance -ClassName Win32_OperatingSystem\r\n        }\r\n\r\n        if ($OS.ProductType -eq \"2\") {\r\n            return $true\r\n        }\r\n    }\r\n\r\n    # We'll want to warn that we're unable to check the actual Azure AD account \r\n    # (it requires O365 credentials and a powershell module both of which are not supported by this script).\r\n    function Test-IsAzureJoined {\r\n        try {\r\n            $dsreg = dsregcmd.exe \/status | Select-String \"AzureAdJoined : YES\"\r\n        }\r\n        catch {\r\n            return $False\r\n        }\r\n        if ($dsreg) { return $True }\r\n    }\r\n\r\n    # For Non-Domain Controllers we'll check net user for the information we need.\r\n    function Get-NetAccountInfo {\r\n        [CmdletBinding()]\r\n        param(\r\n            [Parameter()]\r\n            [string]$User,\r\n            [Parameter()]\r\n            [switch]$Domain\r\n        )\r\n        process {\r\n            # Get user info from net.exe user\r\n            $netuser = if ($Domain) { net.exe user $user \/Domain }else { net.exe user $user }\r\n\r\n            $success = $netuser | Select-String 'The command completed successfully.'\r\n            if (-not $success) {\r\n                throw \"Failed to retrieve account info for user $user!\"\r\n            }\r\n\r\n            #Pre-formatted Object\r\n            $Object = New-Object psobject -Property @{\r\n                Username        = $User\r\n                Name            = \"$(($netuser | Select-String 'Full Name') -split '  ' | Select-Object -Last 1)\".Trim()\r\n                Enabled         = \"$(($netuser | Select-String 'Account active') -split '  ' | Select-Object -Last 1)\".Trim()\r\n                LastLogon       = \"$(($netuser | Select-String 'Last logon') -split '  ' | Select-Object -Last 1)\".Trim()\r\n                PasswordLastSet = \"$(($netuser | Select-String 'Password last set') -split '  ' | Select-Object -Last 1)\".Trim()\r\n            }\r\n\r\n            # Formatted object using PowerShell datatypes (for easier parsing later).\r\n            New-Object psobject -Property @{\r\n                Username        = $Object.Username\r\n                Name            = $Object.Name\r\n                Enabled         = if ($Object.Enabled -eq \"Yes\") { $True }elseif ($Object.Enabled -eq \"No\") { $False }else { $Object.Enabled }\r\n                LastLogon       = try { Get-Date $Object.LastLogon }catch { $Object.LastLogon };\r\n                PasswordLastSet = try { Get-Date $Object.PasswordLastSet }catch { $Object.PasswordLastSet }\r\n            }\r\n        }\r\n    }\r\n}\r\nprocess {\r\n\r\n    # If it's an azure joined machine we should warn that we're not checking any of the Azure AD Accounts.\r\n    if (Test-IsAzureJoined) {\r\n        Write-Warning -Message \"This script is unable to check Azure AD accounts however this script will check the local accounts on this machine.\"\r\n    }\r\n\r\n    $Report = New-Object System.Collections.Generic.List[object]\r\n\r\n    # Warn if ad accounts are not able to be checked.\r\n    if (-not (Test-IsDomainController) -and (Test-IsDomainJoined) -and -not (Test-ComputerSecureChannel)) {\r\n        Write-Warning \"Domain is not reachable! We'll be unable to check active directory accounts!\"\r\n    }\r\n\r\n    # There are two ways this script will check for an inactive account one of which uses the Active Directory PowerShell module which is only availalbe on Domain Controllers \/ machines with RSAT installed.\r\n    if (-not (Test-IsDomainController)) {\r\n\r\n        # Compile a list of users to check.\r\n        $Users = if ($PSVersionTable.PSVersion.Major -lt 5) {\r\n            Get-WmiObject -Class \"win32_UserAccount\"        \r\n        }\r\n        else {\r\n            Get-CimInstance -Class \"win32_UserAccount\"\r\n        }\r\n\r\n        # Grab the account info using net user (which is slightly different if it's a domain account or not).\r\n        $Accounts = foreach ($User in $Users) {\r\n            if ($User.Domain -ne $env:COMPUTERNAME ) {\r\n                Get-NetAccountInfo -User $User.Name -Domain\r\n            }\r\n            else {\r\n                Get-NetAccountInfo -User $User.Name\r\n            }\r\n        }\r\n    }\r\n    else {\r\n        # Older OS's need to have the module manually imported.\r\n        try {\r\n            Import-Module ActiveDirectory\r\n        }\r\n        catch {\r\n            Write-Error -Message \"[Error] Failed to import PowerShell Active Directory Module. Is RSAT installed?\" -Category DeviceError -Exception (New-Object System.Exception)\r\n        }\r\n\r\n        # Compile a list of users with the relevant attributes\r\n        $Users = Get-AdUser -Filter * -Properties SamAccountName, DisplayName, PasswordLastSet, lastLogonTimestamp, lastLogon, Enabled\r\n        \r\n        # Convert that into a more parseable object\r\n        $Accounts = foreach ($User in $Users) {\r\n            $LastLogon = [datetime]::FromFileTime($User.lastLogon)\r\n            $LastLogonTimeStamp = [datetime]::FromFileTime($User.LastLogonTimestamp)\r\n            New-Object psobject -Property @{\r\n                Username        = $User.SamAccountName\r\n                Name            = $User.DisplayName\r\n                Enabled         = $User.Enabled\r\n                LastLogon       = if ($LastLogon -gt $LastLogonTimeStamp) { $LastLogon }else { $LastLogonTimeStamp }\r\n                PasswordLastSet = $User.PasswordLastSet\r\n            }\r\n        }\r\n    }\r\n\r\n    # Compile a list of accounts that could be considered inactive\r\n    $InactiveAccounts = $Accounts | Where-Object { ($_.LastLogon -eq \"Never\" -or $_.LastLogon -lt $InactivityCutOff) -and $_.PasswordLastSet -lt $InactivityCutOff }\r\n\r\n    # Filter out disabled accounts if we're asked to.\r\n    if ($IncludeDisabled) {\r\n        $InactiveAccounts | ForEach-Object { $Report.Add($_) }\r\n    }\r\n    else {\r\n        $InactiveAccounts | Where-Object { $_.Enabled -notlike $False } | ForEach-Object { $Report.Add($_) }\r\n    }\r\n\r\n    # If no inactive accounts exit\r\n    if (-not $Report) {\r\n        Write-Host \"No inactive accounts detected!\"\r\n        exit 0\r\n    }\r\n\r\n    Write-Warning \"Inactive accounts detected!\"\r\n    $Report | Format-Table -AutoSize -Property Username, PasswordLastSet, LastLogon, Enabled | Out-String | Write-Host\r\n    exit 1\r\n}\r\nend {\r\n    \r\n    \r\n    \r\n}<\/pre>\n<p>&nbsp;<\/p>\n\n<div class=\"in-context-cta\"><p>Accede a m\u00e1s de 300 scripts en el Dojo de NinjaOne<\/p>\n<p><a href=\"https:\/\/www.ninjaone.com\/es\/prueba-gratuita-formulario\/\">Obt\u00e9n acceso<\/a><\/p>\n<\/div>\n<h2>An\u00e1lisis detallado<\/h2>\n<p>El script funciona en un proceso de varios pasos:<\/p>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&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>Inicializaci\u00f3n de par\u00e1metros<\/strong>: comienza definiendo par\u00e1metros, incluido el n\u00famero de d\u00edas para considerar inactiva una cuenta y una opci\u00f3n para incluir cuentas desactivadas.<\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&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>Controles del entorno<\/strong>: el script comprueba si la m\u00e1quina est\u00e1 unida a un dominio, es un controlador de dominio o est\u00e1 unida a Azure AD. Determina el alcance de las comprobaciones de cuentas: local, Active Directory o Azure.<\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&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>Recuperaci\u00f3n de la cuenta<\/strong>: en el caso de los controladores que no son de dominio, recupera la informaci\u00f3n de las cuentas mediante <strong>net.exe user<\/strong> o instancias WMI\/CIM, mientras que en el caso de los controladores de dominio, utiliza el m\u00f3dulo PowerShell de Active Directory.<\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&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>Evaluaci\u00f3n de la actividad<\/strong>: la funci\u00f3n principal consiste en evaluar las cuentas de usuario en funci\u00f3n de sus \u00faltimas fechas de inicio de sesi\u00f3n y de establecimiento de la contrase\u00f1a con respecto al umbral de inactividad.<\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&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>Generaci\u00f3n de informes<\/strong>: las cuentas inactivas se recopilan en un informe, con la opci\u00f3n de excluir las cuentas desactivadas.<\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&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=\"6\" data-aria-level=\"1\"><strong>Alertas y c\u00f3digos de salida<\/strong>: el script concluye alertando a los administradores de cualquier cuenta inactiva y saliendo con un c\u00f3digo que indica la presencia o ausencia de dichas cuentas.<\/li>\n<\/ul>\n<h2>Posibles casos de uso<\/h2>\n<p>Considera un escenario en el que un administrador de TI en una gran empresa utiliza este script para auditar rutinariamente las cuentas de usuario. Podr\u00eda programar el script para que se ejecute mensualmente, alert\u00e1ndole de las cuentas que no han estado activas durante m\u00e1s de 90 d\u00edas. Esto permite una gesti\u00f3n proactiva de las cuentas de usuario, reduciendo el riesgo de brechas de seguridad a trav\u00e9s de cuentas inactivas.<\/p>\n<h2>Comparaciones<\/h2>\n<p>Existen enfoques alternativos, como las auditor\u00edas manuales o el uso de herramientas de terceros. Sin embargo, este script de PowerShell ofrece una soluci\u00f3n m\u00e1s directa, personalizable y rentable. A diferencia de los controles manuales, automatiza el proceso, ahorrando tiempo y reduciendo los errores humanos. En comparaci\u00f3n con herramientas de terceros, ofrece transparencia y flexibilidad, ya que los profesionales de TI pueden modificar el script para adaptarlo a sus necesidades espec\u00edficas.<\/p>\n<h2>FAQ<\/h2>\n<p><strong>P1: \u00bfPuede el script diferenciar entre tipos de cuentas de usuario?<\/strong><br \/>\nR1: S\u00ed, puede distinguir entre cuentas locales, de Active Directory y de Azure AD.<\/p>\n<p><strong>P2: \u00bfEs posible programar este script para que se ejecute autom\u00e1ticamente?<\/strong><br \/>\nR2: Por supuesto, esto se puede hacer utilizando el Programador de Tareas de Windows o herramientas de automatizaci\u00f3n similares.<\/p>\n<p><strong>P3: \u00bfEste script gestiona cuentas en un entorno de nube?<\/strong><br \/>\nR3: Est\u00e1 dise\u00f1ado principalmente para cuentas locales y de Active Directory; las cuentas de Azure AD requieren m\u00f3dulos y credenciales adicionales.<\/p>\n<h2>Implicaciones<\/h2>\n<p>Las implicaciones de utilizar este script son de gran alcance. Al identificar las cuentas inactivas, se reduce significativamente la superficie de ataque de posibles brechas de seguridad. Sin embargo, los profesionales de TI deben gestionar la salida de forma responsable, asegur\u00e1ndose de que la desactivaci\u00f3n o eliminaci\u00f3n de cuentas se ajusta a las pol\u00edticas de la organizaci\u00f3n y a las necesidades de los usuarios.<\/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;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>Auditor\u00edas peri\u00f3dicas<\/strong>: programa el script para que se ejecute a intervalos regulares.<\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&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>Personalizaci\u00f3n<\/strong>: adapta los par\u00e1metros del script a las pol\u00edticas de la organizaci\u00f3n.<\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&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>Acciones de seguimiento<\/strong>: establece un protocolo para gestionar las cuentas inactivas.<\/li>\n<\/ul>\n<h2>Reflexiones finales<\/h2>\n<p>En conclusi\u00f3n, este tipo de scripts, cuando se utilizan eficazmente, contribuyen de forma significativa a la seguridad y <a href=\"https:\/\/www.ninjaone.com\/es\/eficiencia\/\">eficacia generales de las operaciones de TI<\/a>. Complementan soluciones como NinjaOne, que proporciona <a href=\"https:\/\/www.ninjaone.com\/es\/eficiencia\/\">herramientas de gesti\u00f3n de TI completas<\/a>, ayudando a los administradores a mantener el control sobre sus entornos inform\u00e1ticos. La capacidad de NinjaOne para integrarse con scripts PowerShell aumenta su utilidad, por lo que es una opci\u00f3n ideal para la gesti\u00f3n proactiva de TI.<\/p>\n","protected":false},"author":35,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","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-508998","script_hub","type-script_hub","status-publish","hentry","script_hub_category-windows"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.ninjaone.com\/es\/wp-json\/wp\/v2\/script_hub\/508998","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=508998"}],"wp:attachment":[{"href":"https:\/\/www.ninjaone.com\/es\/wp-json\/wp\/v2\/media?parent=508998"}],"wp:term":[{"taxonomy":"script_hub_category","embeddable":true,"href":"https:\/\/www.ninjaone.com\/es\/wp-json\/wp\/v2\/operating_system?post=508998"},{"taxonomy":"use_cases","embeddable":true,"href":"https:\/\/www.ninjaone.com\/es\/wp-json\/wp\/v2\/use_cases?post=508998"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}