{"id":264782,"date":"2024-05-31T12:16:16","date_gmt":"2024-05-31T12:16:16","guid":{"rendered":"https:\/\/www.ninjaone.com\/?post_type=script_hub&#038;p=264782"},"modified":"2024-07-29T08:03:17","modified_gmt":"2024-07-29T08:03:17","slug":"establecer-la-longitud-minima-de-una-contrasena","status":"publish","type":"script_hub","link":"https:\/\/www.ninjaone.com\/es\/script-hub\/establecer-la-longitud-minima-de-una-contrasena\/","title":{"rendered":"C\u00f3mo establecer la longitud m\u00ednima de una contrase\u00f1a y su antig\u00fcedad en Windows con PowerShell"},"content":{"rendered":"<h2>Puntos clave<\/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\">Establecer pol\u00edticas de contrase\u00f1as s\u00f3lidas es fundamental para la seguridad de TI.<\/li>\n<li>El script PowerShell que analizaremos hoy automatiza la acci\u00f3n de establecer la longitud m\u00ednima de una contrase\u00f1a y su antig\u00fcedad en Windows.<\/li>\n<li>El script requiere privilegios de administrador para su ejecuci\u00f3n.<\/li>\n<li>Los m\u00e9todos automatizados, como este script creado para establecer la longitud m\u00ednima de una contrase\u00f1a, son m\u00e1s eficaces que las configuraciones manuales, especialmente en entornos grandes.<\/li>\n<li>Las revisiones y actualizaciones peri\u00f3dicas de las pol\u00edticas son esenciales para una seguridad proactiva.<\/li>\n<li>La integraci\u00f3n con plataformas como NinjaOne puede amplificar las ventajas de estos scripts.<\/li>\n<li>Garantizar unos requisitos coherentes en materia de contrase\u00f1as refuerza directamente la seguridad de TI.<\/li>\n<li>Las herramientas de automatizaci\u00f3n son fundamentales en la era de la r\u00e1pida expansi\u00f3n y las amenazas de las TI.<\/li>\n<\/ul>\n<p>En el \u00e1mbito de la seguridad de TI, en constante evoluci\u00f3n, salvaguardar el acceso a las cuentas de usuario sigue siendo un principio fundamental. A medida que las empresas se esfuerzan por mejorar las medidas de seguridad, resulta primordial establecer requisitos adecuados para las contrase\u00f1as. En este caso, un script de PowerShell desempe\u00f1a un papel fundamental al automatizar la acci\u00f3n de <strong>establecer la longitud m\u00ednima de una contrase\u00f1a y su antig\u00fcedad<\/strong> en dispositivos Windows.<\/p>\n<h2>Antecedentes<\/h2>\n<p>Hist\u00f3ricamente, los profesionales de TI y los <a href=\"https:\/\/www.ninjaone.com\/es\/que-es-un-msp\">proveedores de servicios gestionados (MSP<\/a> ) establec\u00edan manualmente los requisitos de contrase\u00f1a. Sin embargo, a medida que las infraestructuras crecen y la ampliaci\u00f3n se hace imprescindible, los procesos manuales se vuelven poco pr\u00e1cticos. Este script PowerShell para establecer la longitud m\u00ednima de una contrase\u00f1a aborda sin problemas esta necesidad permitiendo a los administradores establecer longitudes de contrase\u00f1a y antig\u00fcedades espec\u00edficas para cuentas locales en sistemas Windows. Mediante la automatizaci\u00f3n de tareas tan mundanas pero esenciales, los profesionales pueden garantizar la coherencia de las pol\u00edticas de contrase\u00f1as y, por extensi\u00f3n, un entorno de seguridad inform\u00e1tica m\u00e1s s\u00f3lido.<\/p>\n<h2>El script para establecer la longitud m\u00ednima de una contrase\u00f1a y su antig\u00fcedad<\/h2>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"powershell\">#Requires -Version 5.1\r\n\r\n&lt;#\r\n.SYNOPSIS\r\n    Set the minium password length or age for local accounts.\r\n.DESCRIPTION\r\n    Set the minium password length or age for local accounts.\r\n.EXAMPLE\r\n     -Length 14\r\n    Set the minium password length for local accounts.\r\n.EXAMPLE\r\n     -Length 14 -MinAge 30 -MaxAge 42\r\n    Set the minium password length, minium age, maximum age for local accounts.\r\n.EXAMPLE\r\n    PS C:&gt; Set-MiniumPasswordRequirements.ps1 -Length 14 -Age 42\r\n    Set the minium password length and age for local accounts.\r\n.OUTPUTS\r\n    None\r\n.NOTES\r\n    Minimum OS Architecture Supported: Windows 10, Windows Server 2016\r\n    Release Notes:\r\n    Initial Release\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    LocalUserAccountManagement\r\n#&gt;\r\n\r\n[CmdletBinding()]\r\nparam (\r\n    [Parameter()]\r\n    [ValidateRange(0, 14)]\r\n    [int]\r\n    $Length,\r\n    [Parameter()]\r\n    [ValidateRange(0, 998)]\r\n    [int]\r\n    $MinAge,\r\n    [Parameter()]\r\n    [ValidateRange(0, 999)]\r\n    [int]\r\n    $MaxAge\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-LocalPasswordPolicy {\r\n        param ()\r\n        $Result = [PSCustomObject]@{\r\n            MinimumLength = 0\r\n            MaximumAge    = 0\r\n            MinimumAge    = 0\r\n        }\r\n        $(net.exe accounts) -split \"n\" | ForEach-Object {\r\n            $Line = $_ -split \":\"\r\n            if ($_ -like \"Minimum password length*\") {\r\n                $Result.MinimumLength = \"$($Line[1])\".Trim(' ')\r\n            }\r\n            if ($_ -like \"Maximum password age (days)*\") {\r\n                $Result.MaximumAge = \"$($Line[1])\".Trim(' ')\r\n            }\r\n            if ($_ -like \"Minimum password age (days)*\") {\r\n                $Result.MinimumAge = \"$($Line[1])\".Trim(' ')\r\n            }\r\n        }\r\n        $Result\r\n    }\r\n\r\n    $NetExeError = $false\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    # Get Current localhost password policy settings\r\n    $CurrentSettings = Get-LocalPasswordPolicy\r\n    \r\n    if ($PSBoundParameters.ContainsKey(\"Length\") -and -not ($CurrentSettings.MinimumLength -like $NewSettings.MinimumLength -or $CurrentSettings.MinimumLength -eq $NewSettings.MinimumLength)) {\r\n        Write-Host \"Changing Minimum Password Length from $($CurrentSettings.MinimumLength) to $Length\"\r\n        net.exe accounts \/minpwlen:$Length\r\n    }\r\n    if ($PSBoundParameters.ContainsKey(\"MaxAge\") -and\r\n        -not (\r\n            $(if ($CurrentSettings.MaximumAge -like \"unlimited\") { 0 }else { $CurrentSettings.MaximumAge }) -like\r\n            $(if ($NewSettings.MaximumAge -like \"unlimited\") { 0 }else { $NewSettings.MaximumAge })\r\n        )) {\r\n        Write-Host \"Changing Maximum Password Age from $($CurrentSettings.MaximumAge) to $MaxAge\"\r\n        if ($MaxAge -gt 0) {\r\n            net.exe accounts \/maxpwage:$MaxAge\r\n        }\r\n        else {\r\n            net.exe accounts \/maxpwage:unlimited\r\n        }\r\n    }\r\n    if ($PSBoundParameters.ContainsKey(\"MinAge\") -and -not ($CurrentSettings.MinimumAge -like $NewSettings.MinimumAge -or $CurrentSettings.MinimumAge -eq $NewSettings.MinimumAge)) {\r\n        Write-Host \"Changing Minimum Password Age from $($CurrentSettings.MinimumAge) to $MinAge\"\r\n        net.exe accounts \/minpwage:$MinAge\r\n    }\r\n\r\n    # Get New localhost password policy settings and check if anything changed\r\n    $NewSettings = Get-LocalPasswordPolicy\r\n    \r\n    if ($PSBoundParameters.ContainsKey(\"Length\") -and ($PSBoundParameters['Length'] -notlike $NewSettings.MinimumLength)) {\r\n        $NetExeError = $true\r\n        Write-Host \"Minimum Length was not set correctly.\"\r\n    }\r\n    if ($PSBoundParameters.ContainsKey(\"MaxAge\") -and ($PSBoundParameters['MaxAge'] -notlike $(if ($NewSettings.MaximumAge -like \"unlimited\") { 0 }else { $NewSettings.MaximumAge }))) {\r\n        $NetExeError = $true\r\n        Write-Host \"Maximum Age was not set correctly.\"\r\n    }\r\n    if ($PSBoundParameters.ContainsKey(\"MinAge\") -and ($PSBoundParameters['MinAge'] -notlike $NewSettings.MinimumAge)) {\r\n        $NetExeError = $true\r\n        Write-Host \"Minimum Age was not set correctly.\"\r\n    }\r\n    if ($NetExeError) {\r\n        exit 1\r\n    }\r\n}\r\nend {}<\/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 del script para establecer la longitud m\u00ednima de una contrase\u00f1a y su antig\u00fcedad<\/h2>\n<p>El script que vamos a analizar emplea las capacidades de PowerShell para establecer la longitud m\u00ednima de una contrase\u00f1a:<\/p>\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>Cmdlet Binding<\/strong>: el script comienza vincul\u00e1ndolo al cmdlet, lo que le permite aceptar par\u00e1metros como Length, MinAge y MaxAge.<\/li>\n<li><strong>Test-IsElevated<\/strong>: una funci\u00f3n que garantiza que el script se ejecuta con privilegios elevados.<\/li>\n<li><strong>Get-LocalPasswordPolicy<\/strong>: esta funci\u00f3n obtiene la pol\u00edtica de contrase\u00f1as local actual. Utiliza el comando &#8216;net.exe&#8217; para reunir los atributos de la pol\u00edtica de contrase\u00f1as y los devuelve.<\/li>\n<li><strong>Bloque de proceso<\/strong>: aqu\u00ed es donde reside la l\u00f3gica central. El script compara las pol\u00edticas existentes con los nuevos par\u00e1metros. Si existen diferencias, emplea comandos \u00abnet.exe\u00bb para ajustar las pol\u00edticas.<\/li>\n<li><strong>Validaci\u00f3n<\/strong>: tras realizar los cambios, el script obtiene las pol\u00edticas de contrase\u00f1as actualizadas y las verifica con los par\u00e1metros para garantizar una configuraci\u00f3n correcta.<\/li>\n<\/ul>\n<h2>Posibles casos de uso<\/h2>\n<p><strong>Estudio de caso<\/strong>: imagina a un profesional de TI, Juan, que trabaja en una empresa emergente de r\u00e1pido crecimiento. Tras una auditor\u00eda de ciberseguridad, Juan se da cuenta de que muchas cuentas locales tienen pol\u00edticas de contrase\u00f1as d\u00e9biles. En lugar de actualizar manualmente cada sistema, Juan despliega este script para establecer la longitud m\u00ednima de una contrase\u00f1a en todas las estaciones de trabajo, asegur\u00e1ndose de que todos los dispositivos se adhieren ahora a la longitud y antig\u00fcedad de contrase\u00f1a recomendada.<\/p>\n<h2>Comparaciones<\/h2>\n<p>Aunque la configuraci\u00f3n manual a trav\u00e9s de la configuraci\u00f3n de Windows o las pol\u00edticas de grupo es una opci\u00f3n, lleva mucho tiempo, es propensa a errores y no es adecuada para entornos grandes. Las herramientas de terceros ofrecen funcionalidades similares, pero pueden introducir complejidades o costes. El script proporcionado para establecer la longitud m\u00ednima de una contrase\u00f1a ofrece un enfoque sencillo, rentable y escalable.<\/p>\n<h2>FAQ<\/h2>\n<ul>\n<li><strong>\u00bfEn qu\u00e9 versiones de Windows funciona el script?\u00a0<\/strong><br \/>\nEl script es compatible con Windows 10 y Windows Server 2016 en adelante.<\/li>\n<li><strong>\u00bfNecesito derechos de administrador para ejecutar el script?\u00a0<\/strong><br \/>\nS\u00ed, el script requiere privilegios elevados para modificar las pol\u00edticas de contrase\u00f1as.<\/li>\n<\/ul>\n<h2>Implicaciones<\/h2>\n<p>Las pol\u00edticas de contrase\u00f1as inadecuadas pueden dar lugar a accesos no autorizados, filtraciones de datos e infracciones de la normativa. Al garantizar unos requisitos de contrase\u00f1a coherentes y s\u00f3lidos, las organizaciones pueden reducir dr\u00e1sticamente estos riesgos, reforzando sus posturas de 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\">Revisa y actualiza peri\u00f3dicamente las pol\u00edticas de contrase\u00f1as para adelantarte a la evoluci\u00f3n de las amenazas.<\/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\">Aseg\u00farate de realizar copias de seguridad antes de aplicar cambios en un gran n\u00famero de dispositivos.<\/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\">Combina este script para establecer la longitud m\u00ednima de una contrase\u00f1a con otras herramientas de automatizaci\u00f3n para una gesti\u00f3n de TI completa.<\/li>\n<\/ul>\n<h2>Reflexiones finales<\/h2>\n<p>En un panorama en el que las medidas de seguridad s\u00f3lidas son una necesidad, las herramientas que facilitan los requisitos de cambiar la pol\u00edtica de contrase\u00f1as de Windows adquieren un valor incalculable. Para las empresas que buscan un enfoque racionalizado en la gesti\u00f3n de sus activos y configuraciones de TI, plataformas como NinjaOne pueden proporcionar soluciones integrales. Al integrar estos scripts en plataformas como <a href=\"https:\/\/www.ninjaone.com\/es\/\">NinjaOne<\/a>, las organizaciones pueden garantizar pol\u00edticas de contrase\u00f1as \u00f3ptimas, lo que se traduce en una <a href=\"https:\/\/www.ninjaone.com\/es\/enterprise-it-management\/seguridad\">mayor seguridad y eficiencia operativa. <\/a><\/p>\n","protected":false},"author":35,"featured_media":144903,"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-264782","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\/264782","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=264782"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.ninjaone.com\/es\/wp-json\/wp\/v2\/media\/144903"}],"wp:attachment":[{"href":"https:\/\/www.ninjaone.com\/es\/wp-json\/wp\/v2\/media?parent=264782"}],"wp:term":[{"taxonomy":"script_hub_category","embeddable":true,"href":"https:\/\/www.ninjaone.com\/es\/wp-json\/wp\/v2\/operating_system?post=264782"},{"taxonomy":"use_cases","embeddable":true,"href":"https:\/\/www.ninjaone.com\/es\/wp-json\/wp\/v2\/use_cases?post=264782"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}