Come recuperare e salvare in modo efficiente le informazioni sui tipi di unità con PowerShell

La gestione efficiente delle risorse hardware è fondamentale per i professionisti IT e per i Managed Service Provider (MSP). Un compito che si presenta spesso è quello di identificare i tipi di unità installate in un sistema.

Che si tratti di distinguere tra SSD e HDD o che si tratti di registrare i dettagli delle unità a scopo di inventario, disporre di un metodo affidabile per recuperare e salvare queste informazioni è importantissimo. In questo articolo analizzeremo uno script PowerShell progettato per questo scopo, spiegandone le funzionalità, i potenziali casi d’uso e le best practice.

Background

I professionisti IT hanno spesso bisogno di raccogliere dettagli sull’hardware per vari motivi, come il monitoraggio delle prestazioni, la gestione dell’inventario e la risoluzione dei problemi. Lo script PowerShell fornito è stato creato per recuperare informazioni sulle unità fisse, in particolare sulle unità a stato solido (SSD) e sulle unità a disco rigido (HDD), e per salvare i risultati in un campo personalizzato.

Questo script è particolarmente utile in ambienti in cui l’automazione e la precisione sono fondamentali, dato che offre una soluzione semplificata a un’attività amministrativa comune.

Lo script per recuperare e salvare le informazioni sui tipi di unità:

#Requires -Version 5.1

<#
.SYNOPSIS
    Get the drive types of all fixed SSD and HDD drives.
.DESCRIPTION
    Gets the drive types of all fixed SSD and HDD drives and can save the results to a custom field.

.EXAMPLE
    (No Parameters)
    ## EXAMPLE OUTPUT WITHOUT PARAMS ##
    DiskNumber DriveLetter MediaType BusType SerialNumber
    ---------- ----------- --------- ------- ------------
    0          C:          SSD       SATA    50026B768B3A4E3A
    1          D:          HDD       SATA    WD-WCC4N0JYJYJY

PARAMETER: -CustomFieldParam "ReplaceMeWithAnyMultilineCustomField"
    The name of the custom field to save the results to.
.EXAMPLE
    -CustomFieldParam "ReplaceMeWithAnyMultilineCustomField"
    ## EXAMPLE OUTPUT WITH CustomFieldParam ##
    DiskNumber DriveLetter MediaType BusType SerialNumber
    ---------- ----------- --------- ------- ------------
    0          C:          SSD       SATA    50026B768B3A4E3A
    1          D:          HDD       SATA    WD-WCC4N0JYJYJY
    [Info] Saving the results to the custom field. (ReplaceMeWithAnyMultilineCustomField)
    [Info] The results have been saved to the custom field. (ReplaceMeWithAnyMultilineCustomField)

Custom Field Output:
    #0, Letter: C:, Media: SSD, Bus: SATA, SN: 50026B768B3A4E3A
    #1, Letter: D:, Media: HDD, Bus: SATA, SN: WD-WCC4N0JYJYJY

.PARAMETER CustomFieldName
    The name of the custom field to save the results to.
.INPUTS
    None
.OUTPUTS
    None
.NOTES
    Minimum OS Architecture Supported: Windows 10/Server 2016
    Release Notes: Initial Release
By 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.
    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. 
    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. 
    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. 
    Warranty Disclaimer: The script is provided “as is” and “as available”, 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. 
    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. 
    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. 
    EULA: If you are a NinjaOne customer, your use of the script is subject to the End User License Agreement applicable to you (EULA).
#>

[CmdletBinding()]
param (
    [Parameter()]
    [String]$CustomFieldName
)

begin {
    function Test-IsElevated {
        $id = [System.Security.Principal.WindowsIdentity]::GetCurrent()
        $p = New-Object System.Security.Principal.WindowsPrincipal($id)
        $p.IsInRole([System.Security.Principal.WindowsBuiltInRole]::Administrator)
    }
}
process {
    if (-not (Test-IsElevated)) {
        Write-Error -Message "Access Denied. Please run with Administrator privileges."
        exit 1
    }
    if ($env:customFieldName -and $env:customFieldName -ne 'null') {
        $CustomFieldName = $env:customFieldName
    }

    # Get the drive type of all drives
    $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
    if ($($Disks | Where-Object { $_.MediaType -like "Unspecified" }).Count) {
        Write-Host "[Info] An Unspecified MediaType likely indicates this machine is a VM or there is an issue with that drive."
    }
    # Get the partitions with mounted drive letters
    $Partitions = Get-Partition | Where-Object { $_.DriveLetter -ne $null } | Select-Object -Property DriveLetter, DiskNumber
    # Join the two collections
    $Drives = $Disks | ForEach-Object {
        $Disk = $_
        $Partition = $Partitions | Where-Object { $_.DiskNumber -eq $Disk.DeviceID }
        [PSCustomObject]@{
            DiskNumber   = $_.DeviceID
            DriveLetter  = $Partition.DriveLetter | Where-Object { $_ }
            MediaType    = $_.MediaType
            BusType      = $_.BusType
            SerialNumber = $_.SerialNumber
        }
    }
    $($Drives | Out-String) | Write-Host

    # Save the results to a custom field
    if ($CustomFieldName) {
        Write-Host "[Info] Saving the results to the custom field. ($CustomFieldName)"
        $CustomField = $(
            $Drives | ForEach-Object {
                "#:$($_.DiskNumber), Letter: $($_.DriveLetter), Media: $($_.MediaType), Bus: $($_.BusType), SN: $($_.SerialNumber)"
            }
        ) | Ninja-Property-Set-Piped -Name $CustomFieldName 2>&1
        if ($CustomField.Exception) {
            Write-Host $CustomField.Exception.Message
            Write-Host "[Error] Failed to save the results to the custom field. ($CustomFieldName)"
        }
        else {
            Write-Host "[Info] The results have been saved to the custom field. ($CustomFieldName)"
        }
    }
}
end {
    
    
    
}

 

Analisi dettagliata

Analizziamo lo script passo per passo per capire la sua funzionalità e le modalità attraverso le quali raggiunge il suo obiettivo.

Prerequisiti

Lo script richiede PowerShell versione 5.1 o superiore. Inizia definendo una .SYNOPSIS e una .DESCRIPTION, utili per fornire una panoramica del suo scopo. Le sezioni .EXAMPLE mostrano i risultati attesi con e senza -CustomFieldParam.

Parametri e configurazione iniziale

Lo script accetta un parametro, CustomFieldName, che specifica il nome del campo personalizzato in cui verranno salvati i risultati. Include anche una funzione Test-IsElevated per verificare se lo script è in esecuzione con privilegi di amministratore, necessari per accedere a informazioni dettagliate sull’unità.

Elaborazione delle informazioni sull’unità

  1. Controllo dei privilegi elevati: Lo script verifica innanzitutto se è in esecuzione con i privilegi necessari. In caso contrario, termina con un messaggio di errore.
  2. Gestione delle variabili d’ambiente: Se il nome di un campo personalizzato è impostato tramite una variabile d’ambiente, questa sovrascrive il parametro dello script.
  3. Recupero delle informazioni sulle unità: Utilizzando Get-PhysicalDisk, lo script recupera tutte le unità fisiche, escludendo le unità virtuali e USB. Quindi seleziona le proprietà rilevanti: DeviceID, MediaType, BusType e SerialNumber.
  4. Informazioni sulla partizione: Lo script recupera i dettagli della partizione utilizzando Get-Partition, concentrandosi sulle partizioni con lettere di unità assegnate.
  5. Aggregazione dei dati: Unisce le informazioni sulle unità fisiche e sulle partizioni, creando un elenco completo di unità con i rispettivi dettagli.

Salvataggio dell’output e dei campi personalizzati

Lo script invia le informazioni sull’unità alla console. Se viene fornito un CustomFieldName, formatta i dati e tenta di salvarli nel campo personalizzato specificato, utilizzando un ipotetico cmdlet Ninja-Property-Set-Piped. Gestisce i potenziali errori durante questo processo e fornisce un feedback sul successo dell’operazione.

Casi d’uso potenziali

Un MSP gestisce più sistemi di clienti e deve verificare regolarmente le configurazioni hardware per garantire prestazioni ottimali e identificare potenziali problemi.

Distribuendo questo script sui computer client, l’MSP può automatizzare la raccolta delle informazioni sui tipi di unità e registrare i dati per riferimenti futuri. Ciò consente di identificare rapidamente i sistemi che potrebbero beneficiare di aggiornamenti hardware, come la sostituzione di un HDD con un SSD per migliorare le prestazioni.

Confronti

Rispetto ai metodi manuali o all’utilizzo di strumenti diversi, questo script offre un approccio unificato all’interno dell’ambiente PowerShell, riducendo la necessità di applicazioni esterne. Anche se strumenti come Windows Management Instrumentation (WMI) o software di terze parti possono ottenere risultati simili, l’integrazione di questo script con i campi personalizzati e le sue capacità di automazione lo rendono una soluzione più efficiente e scalabile.

Domande frequenti

  1. Ho bisogno di privilegi amministrativi per eseguire questo script? Sì, lo script richiede privilegi di amministrazione per accedere alle informazioni dettagliate sull’unità.
  2. Questo script può essere utilizzato su virtual machine? Lo script potrebbe non fornire risultati accurati sulle virtual machine, poiché il MediaType può essere elencato come “Unspecified”.
  3. Cosa succede se il nome del campo personalizzato non viene fornito? Se il parametro CustomFieldName non è specificato, lo script mostrerà le informazioni sull’unità soltanto nella console.

Implicazioni

La verifica regolare dei tipi di unità può avere implicazioni significative per la sicurezza e le prestazioni dell’IT. Per esempio, l’identificazione degli HDD più vecchi consente di effettuare sostituzioni proattive, riducendo il rischio di perdita di dati a causa di un guasto dell’unità. Inoltre, la comprensione dell’architettura di storage può aiutare a ottimizzare le strategie di backup e a garantire che i dati critici siano archiviati sull’hardware più affidabile.

Raccomandazioni

  • Esegui sempre lo script con privilegi elevati.
  • Pianifica regolarmente l’esecuzione dello script su tutti i sistemi gestiti per mantenere aggiornati gli inventari hardware.
  • Assicurati che ci siano un’adeguata gestione degli errori e meccanismi di logging per la risoluzione di eventuali problemi durante l’esecuzione.

Considerazioni finali

Questo script PowerShell offre ai professionisti IT e agli MSP una soluzione affidabile per recuperare e salvare i tipi di unità in modo efficiente. Automatizzando questo processo, le organizzazioni possono mantenere inventari hardware accurati, ottimizzare le prestazioni e migliorare le strategie complessive di gestione IT.

Strumenti come NinjaOne possono semplificare ulteriormente questo processo integrando script come questo in flussi di lavoro di automazione più ampi, e fornendo una piattaforma di gestione IT completa che supporti operazioni proattive ed efficienti.

Passi successivi

La creazione di un team IT efficiente ed efficace richiede una soluzione centralizzata che funga da principale strumento per la fornitura di servizi. NinjaOne consente ai team IT di monitorare, gestire, proteggere e supportare tutti i dispositivi, ovunque essi si trovino, senza la necessità di una complessa infrastruttura locale.

Per saperne di più sulla distribuzione remota di script con NinjaOne, fai un tour dal vivo, o inizia la tua prova gratuita della piattaforma NinjaOne.

Categorie:

Ti potrebbe interessare anche

×

Guarda NinjaOne in azione!

Inviando questo modulo, accetto La politica sulla privacy di NinjaOne.

Termini e condizioni NinjaOne

Cliccando sul pulsante “Accetto” qui sotto, dichiari di accettare i seguenti termini legali e le nostre condizioni d’uso:

  • Diritti di proprietà: NinjaOne possiede e continuerà a possedere tutti i diritti, i titoli e gli interessi relativi allo script (compreso il copyright). NinjaOne ti concede una licenza limitata per l’utilizzo dello script in conformità con i presenti termini legali.
  • Limitazione d’uso: Puoi utilizzare lo script solo per legittimi scopi personali o aziendali interni e non puoi condividere lo script con altri soggetti.
  • Divieto di ripubblicazione: In nessun caso ti è consentito ripubblicare lo script in una libreria di script appartenente o sotto il controllo di un altro fornitore di software.
  • Esclusione di garanzia: Lo script viene fornito “così com’è” e “come disponibile”, senza garanzie di alcun tipo. NinjaOne non promette né garantisce che lo script sia privo di difetti o che soddisfi le tue esigenze o aspettative specifiche.
  • Assunzione del rischio: L’uso che farai dello script è da intendersi a tuo rischio. Riconosci che l’utilizzo dello script comporta alcuni rischi intrinseci, che comprendi e sei pronto ad assumerti.
  • Rinuncia e liberatoria: Non riterrai NinjaOne responsabile di eventuali conseguenze negative o indesiderate derivanti dall’uso dello script e rinuncerai a qualsiasi diritto legale o di equità e a qualsiasi rivalsa nei confronti di NinjaOne in relazione all’uso dello script.
  • EULA: Se sei un cliente NinjaOne, l’uso dello script è soggetto al Contratto di licenza con l’utente finale (EULA) applicabile.