{"id":353777,"date":"2024-09-03T13:26:13","date_gmt":"2024-09-03T13:26:13","guid":{"rendered":"https:\/\/www.ninjaone.com\/script-hub\/guardar-tipos-de-unidades\/"},"modified":"2024-10-13T19:05:43","modified_gmt":"2024-10-13T19:05:43","slug":"guardar-tipos-de-unidades","status":"publish","type":"script_hub","link":"https:\/\/www.ninjaone.com\/es\/script-hub\/guardar-tipos-de-unidades\/","title":{"rendered":"C\u00f3mo recuperar y guardar tipos de unidades de forma eficaz mediante PowerShell"},"content":{"rendered":"<p>La gesti\u00f3n eficiente de los recursos de hardware es crucial para los profesionales de TI y los <a href=\"https:\/\/www.ninjaone.com\/es\/que-es-un-msp\" target=\"_blank\" rel=\"noopener\">proveedores de servicios gestionados (MSP)<\/a>. Una tarea que se plantea a menudo es <strong>identificar los tipos de unidades instaladas en un sistema<\/strong>.<\/p>\n<p>Ya sea para distinguir <a href=\"https:\/\/www.ninjaone.com\/blog\/ssd-vs-hdd-vs-sshd\/\" target=\"_blank\" rel=\"noopener\">entre unidades SSD y HDD<\/a> o para registrar los datos de las unidades con fines de inventario, disponer de un m\u00e9todo fiable para recuperar y guardar esta informaci\u00f3n tiene un valor incalculable. Este post explora un script <a href=\"https:\/\/www.ninjaone.com\/it-hub\/endpoint-management\/what-is-powershell\/\" target=\"_blank\" rel=\"noopener\">PowerShell<\/a> dise\u00f1ado para este prop\u00f3sito, explicando su funcionalidad, casos de uso potenciales y buenas pr\u00e1cticas.<\/p>\n<h2>Background<\/h2>\n<p>Con frecuencia, los profesionales de TI necesitan recopilar informaci\u00f3n sobre el hardware por diversos motivos, como la supervisi\u00f3n del rendimiento, la gesti\u00f3n de inventarios y la resoluci\u00f3n de problemas. El script PowerShell proporcionado est\u00e1 adaptado para recuperar informaci\u00f3n sobre unidades fijas, en concreto unidades de estado s\u00f3lido (SSD) y unidades de disco duro (HDD), y guardar los resultados en un campo personalizado.<\/p>\n<p>Este script es especialmente \u00fatil en entornos en los que la automatizaci\u00f3n y la precisi\u00f3n son fundamentales, ya que ofrece una soluci\u00f3n racionalizada a una tarea administrativa habitual.<\/p>\n<h2>El script para recuperar y guardar tipos de unidades<\/h2>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"powershell\">#Requires -Version 5.1\r\n\r\n&lt;#\r\n.SYNOPSIS\r\n    Get the drive types of all fixed SSD and HDD drives.\r\n.DESCRIPTION\r\n    Gets the drive types of all fixed SSD and HDD drives and can save the results to a custom field.\r\n\r\n.EXAMPLE\r\n    (No Parameters)\r\n    ## EXAMPLE OUTPUT WITHOUT PARAMS ##\r\n    DiskNumber DriveLetter MediaType BusType SerialNumber\r\n    ---------- ----------- --------- ------- ------------\r\n    0          C:          SSD       SATA    50026B768B3A4E3A\r\n    1          D:          HDD       SATA    WD-WCC4N0JYJYJY\r\n\r\nPARAMETER: -CustomFieldParam \"ReplaceMeWithAnyMultilineCustomField\"\r\n    The name of the custom field to save the results to.\r\n.EXAMPLE\r\n    -CustomFieldParam \"ReplaceMeWithAnyMultilineCustomField\"\r\n    ## EXAMPLE OUTPUT WITH CustomFieldParam ##\r\n    DiskNumber DriveLetter MediaType BusType SerialNumber\r\n    ---------- ----------- --------- ------- ------------\r\n    0          C:          SSD       SATA    50026B768B3A4E3A\r\n    1          D:          HDD       SATA    WD-WCC4N0JYJYJY\r\n    [Info] Saving the results to the custom field. (ReplaceMeWithAnyMultilineCustomField)\r\n    [Info] The results have been saved to the custom field. (ReplaceMeWithAnyMultilineCustomField)\r\n\r\nCustom Field Output:\r\n    #0, Letter: C:, Media: SSD, Bus: SATA, SN: 50026B768B3A4E3A\r\n    #1, Letter: D:, Media: HDD, Bus: SATA, SN: WD-WCC4N0JYJYJY\r\n\r\n.PARAMETER CustomFieldName\r\n    The name of the custom field to save the results to.\r\n.INPUTS\r\n    None\r\n.OUTPUTS\r\n    None\r\n.NOTES\r\n    Minimum OS Architecture Supported: Windows 10\/Server 2016\r\n    Release Notes: 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#&gt;\r\n\r\n[CmdletBinding()]\r\nparam (\r\n    [Parameter()]\r\n    [String]$CustomFieldName\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        $p.IsInRole([System.Security.Principal.WindowsBuiltInRole]::Administrator)\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 ($env:customFieldName -and $env:customFieldName -ne 'null') {\r\n        $CustomFieldName = $env:customFieldName\r\n    }\r\n\r\n    # Get the drive type of all drives\r\n    $Disks = Get-PhysicalDisk | Where-Object { $_.BusType -notlike \"File Backed Virtual\" -and -not ($_.PhysicalLocation -like \"*USB*\" -or $_.BusType -like \"*USB*\") } | Select-Object -Property DeviceID, MediaType, BusType, SerialNumber\r\n    if ($($Disks | Where-Object { $_.MediaType -like \"Unspecified\" }).Count) {\r\n        Write-Host \"[Info] An Unspecified MediaType likely indicates this machine is a VM or there is an issue with that drive.\"\r\n    }\r\n    # Get the partitions with mounted drive letters\r\n    $Partitions = Get-Partition | Where-Object { $_.DriveLetter -ne $null } | Select-Object -Property DriveLetter, DiskNumber\r\n    # Join the two collections\r\n    $Drives = $Disks | ForEach-Object {\r\n        $Disk = $_\r\n        $Partition = $Partitions | Where-Object { $_.DiskNumber -eq $Disk.DeviceID }\r\n        [PSCustomObject]@{\r\n            DiskNumber   = $_.DeviceID\r\n            DriveLetter  = $Partition.DriveLetter | Where-Object { $_ }\r\n            MediaType    = $_.MediaType\r\n            BusType      = $_.BusType\r\n            SerialNumber = $_.SerialNumber\r\n        }\r\n    }\r\n    $($Drives | Out-String) | Write-Host\r\n\r\n    # Save the results to a custom field\r\n    if ($CustomFieldName) {\r\n        Write-Host \"[Info] Saving the results to the custom field. ($CustomFieldName)\"\r\n        $CustomField = $(\r\n            $Drives | ForEach-Object {\r\n                \"#:$($_.DiskNumber), Letter: $($_.DriveLetter), Media: $($_.MediaType), Bus: $($_.BusType), SN: $($_.SerialNumber)\"\r\n            }\r\n        ) | Ninja-Property-Set-Piped -Name $CustomFieldName 2&gt;&amp;1\r\n        if ($CustomField.Exception) {\r\n            Write-Host $CustomField.Exception.Message\r\n            Write-Host \"[Error] Failed to save the results to the custom field. ($CustomFieldName)\"\r\n        }\r\n        else {\r\n            Write-Host \"[Info] The results have been saved to the custom field. ($CustomFieldName)\"\r\n        }\r\n    }\r\n}\r\nend {\r\n    \r\n    \r\n    \r\n}<\/pre>\n<p>&nbsp;<\/p>\n\n<div class=\"blog-cta-new blog-cta-style-1\"><div class=\"cta-left\"><h2><\/h2><p><\/p><\/div><div class=\"cta-right\"><a class=\"button\" href=\"\"><\/a><\/div><\/div>\n<h2>An\u00e1lisis detallado<\/h2>\n<p>Vamos a desglosar el script paso a paso para entender su funcionalidad y c\u00f3mo consigue su objetivo.<\/p>\n<h3>Requisitos previos<\/h3>\n<p>El script requiere PowerShell versi\u00f3n 5.1 o superior. Comienza definiendo un .SYNOPSIS y un .DESCRIPTION, proporcionando una visi\u00f3n general de su prop\u00f3sito. Las secciones .EXAMPLE muestran los resultados esperados con y sin -CustomFieldParam.<\/p>\n<h3>Par\u00e1metros y configuraci\u00f3n inicial<\/h3>\n<p>El script acepta un par\u00e1metro, CustomFieldName, que especifica el nombre del campo personalizado donde se guardar\u00e1n los resultados. Tambi\u00e9n incluye una funci\u00f3n Test-IsElevated para comprobar si el script se est\u00e1 ejecutando con privilegios de administrador, necesarios para acceder a informaci\u00f3n detallada de la unidad.<\/p>\n<h3>Procesamiento de la informaci\u00f3n de la unidad<\/h3>\n<ol>\n<li><strong>Control de privilegios elevados<\/strong>. El script comprueba primero si se est\u00e1 ejecutando con los privilegios necesarios. Si no, termina con un mensaje de error.<\/li>\n<li><strong>Gesti\u00f3n de variables de entorno<\/strong>. Si se establece un nombre de campo personalizado a trav\u00e9s de una variable de entorno, anula el par\u00e1metro de script.<\/li>\n<li><strong>Recuperaci\u00f3n de informaci\u00f3n de la unidad<\/strong>. Usando Get-PhysicalDisk, el script recupera todas las unidades f\u00edsicas, filtrando las unidades virtuales y USB. A continuaci\u00f3n, selecciona las propiedades pertinentes: DeviceID, MediaType, BusType y SerialNumber.<\/li>\n<li><strong>Informaci\u00f3n de la partici\u00f3n<\/strong>. El script obtiene los detalles de la partici\u00f3n utilizando Get-Partition, centr\u00e1ndose en las particiones con letras de unidad asignadas.<\/li>\n<li><strong>Agregaci\u00f3n de datos<\/strong>. Fusiona la informaci\u00f3n de la unidad f\u00edsica y de la partici\u00f3n, creando una lista completa de unidades con sus respectivos detalles.<\/li>\n<\/ol>\n<h3>Salida y guardado de campos personalizados<\/h3>\n<p>El script env\u00eda la informaci\u00f3n de la unidad a la consola. Si se proporciona un CustomFieldName, formatea los datos e intenta guardarlos en el campo personalizado especificado utilizando un hipot\u00e9tico cmdlet Ninja-Property-Set-Piped. Gestiona los posibles errores durante este proceso y proporciona informaci\u00f3n sobre el \u00e9xito de la operaci\u00f3n.<\/p>\n<h2>Posibles casos de uso<\/h2>\n<p>Un MSP gestiona m\u00faltiples sistemas de clientes y necesita auditar peri\u00f3dicamente las configuraciones de hardware para garantizar un rendimiento \u00f3ptimo e identificar posibles problemas.<\/p>\n<p>Al implementar este script en los equipos cliente, el MSP puede automatizar la recopilaci\u00f3n de tipos de unidades y registrar los datos para futuras consultas. Esto permite identificar r\u00e1pidamente los sistemas que podr\u00edan beneficiarse de actualizaciones de hardware, como la sustituci\u00f3n de un disco duro por una unidad SSD para mejorar el rendimiento.<\/p>\n<h2>Comparaciones<\/h2>\n<p>En comparaci\u00f3n con los m\u00e9todos manuales o el uso de herramientas dispares, este script ofrece un enfoque unificado dentro del entorno PowerShell, lo que reduce la necesidad de aplicaciones externas. Aunque herramientas como Windows Management Instrumentation (WMI) o software de terceros pueden lograr resultados similares, la integraci\u00f3n de este script con campos personalizados y sus capacidades de automatizaci\u00f3n lo convierten en una soluci\u00f3n m\u00e1s <a href=\"https:\/\/www.ninjaone.com\/es\/eficiencia\" target=\"_blank\" rel=\"noopener\">eficiente<\/a> y escalable.<\/p>\n<h2>FAQ<\/h2>\n<ol>\n<li><strong>\u00bfNecesito privilegios administrativos para ejecutar este script?<\/strong> S\u00ed, el script requiere privilegios administrativos para acceder a la informaci\u00f3n detallada de la unidad.<\/li>\n<li><strong>\u00bfSe puede utilizar este script en m\u00e1quinas virtuales?<\/strong> Es posible que el script no proporcione resultados precisos en m\u00e1quinas virtuales, ya que el MediaType puede aparecer como \u00abNo especificado\u00bb<\/li>\n<li><strong>\u00bfQu\u00e9 ocurre si no se indica el nombre del campo personalizado?<\/strong> Si no se especifica el par\u00e1metro CustomFieldName, el script s\u00f3lo mostrar\u00e1 la informaci\u00f3n de la unidad en la consola.<\/li>\n<\/ol>\n<h2>Implicaciones<\/h2>\n<p>La auditor\u00eda peri\u00f3dica de los tipos de unidades puede tener implicaciones significativas para la seguridad y el rendimiento de TI. Por ejemplo, la identificaci\u00f3n de los discos duros m\u00e1s antiguos permite realizar sustituciones proactivas, reduciendo el riesgo de p\u00e9rdida de datos por fallo de la unidad. Adem\u00e1s, comprender la arquitectura de almacenamiento puede ayudar a optimizar las estrategias de copia de seguridad y garantizar que los datos cr\u00edticos se almacenan en el hardware m\u00e1s fiable.<\/p>\n<h2>Recomendaciones<\/h2>\n<ul>\n<li>Ejecuta siempre el script con privilegios elevados.<\/li>\n<li>Programa peri\u00f3dicamente la ejecuci\u00f3n del script en todos los sistemas gestionados para mantener actualizados los inventarios de hardware.<\/li>\n<li>Aseg\u00farate de que existen mecanismos adecuados de gesti\u00f3n y registro de errores para solucionar cualquier problema durante la ejecuci\u00f3n.<\/li>\n<\/ul>\n<h2>Reflexiones finales<\/h2>\n<p>Este script de PowerShell ofrece una soluci\u00f3n s\u00f3lida para que los profesionales de TI y los MSP recuperen y guarden los tipos de unidades de forma eficaz. Al automatizar este proceso, las organizaciones pueden mantener inventarios precisos de hardware, optimizar el rendimiento y mejorar sus estrategias generales de gesti\u00f3n de TI.<\/p>\n<p>Herramientas como <a href=\"https:\/\/www.ninjaone.com\/es\/\" target=\"_blank\" rel=\"noopener\">NinjaOne<\/a> pueden agilizar a\u00fan m\u00e1s este proceso mediante la integraci\u00f3n de estos scripts en flujos de trabajo de automatizaci\u00f3n m\u00e1s amplios, proporcionando una plataforma integral de gesti\u00f3n de TI que permite unas operaciones proactivas y eficientes.<\/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":"","_lmt_disable":""},"operating_system":[4212],"use_cases":[4259],"class_list":["post-353777","script_hub","type-script_hub","status-publish","hentry","script_hub_category-windows","use_cases-configuracion-general"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.ninjaone.com\/es\/wp-json\/wp\/v2\/script_hub\/353777","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=353777"}],"wp:attachment":[{"href":"https:\/\/www.ninjaone.com\/es\/wp-json\/wp\/v2\/media?parent=353777"}],"wp:term":[{"taxonomy":"script_hub_category","embeddable":true,"href":"https:\/\/www.ninjaone.com\/es\/wp-json\/wp\/v2\/operating_system?post=353777"},{"taxonomy":"use_cases","embeddable":true,"href":"https:\/\/www.ninjaone.com\/es\/wp-json\/wp\/v2\/use_cases?post=353777"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}