Come abilitare i minidump in Windows utilizzando PowerShell

La pratica del debug e della risoluzione dei problemi dei sistemi informatici richiede spesso strumenti e script specializzati. Uno di questi metodi, fondamentale per molti esperti IT, è l’utilizzo dei file minidump. Questi file offrono un’istantanea della memoria attiva quando un computer si blocca, fornendo dati preziosi per l’analisi post-crash. Questo articolo esamina uno script PowerShell progettato per abilitare i minidump in modo automatico sui sistemi Windows.

Background

Per i professionisti IT e i provider di servizi gestiti (MSP), la capacità di acquisire e analizzare i dati sui crash di sistema è fondamentale. Questo aiuta a capire perché un sistema si è bloccato e a prevenire eventi futuri dello stesso genere. I file minidump, in particolare, forniscono dati sufficienti senza consumare molto spazio su disco, il che li rende la scelta preferita di molti esperti. Tuttavia, l’impostazione manuale per generare e abilitare i minidump può essere noiosa, ed è qui che entra in gioco l’automazione. Utilizzando script come quello che stiamo esaminando, i professionisti possono impostare in modo efficiente i loro sistemi per generare minidump quando necessario.

Lo script per abilitare i minidump

<#
.SYNOPSIS
    Turn on mini dumps if they are off, if other dumps are already enabled do not change the configuration.
.DESCRIPTION
    Turn on mini dumps if they are off, if other dumps are already enabled do not change the configuration.
    This will enable the creation of the pagefile, but set to automatically manage by Windows.
    Reboot might be needed.
.OUTPUTS
    None
.NOTES
    Minimum OS Architecture Supported: Windows 10, Windows 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 ()

begin {
    function Set-ItemProp {
        param (
            $Path,
            $Name,
            $Value,
            [ValidateSet("DWord", "QWord", "String", "ExpandedString", "Binary", "MultiString", "Unknown")]
            $PropertyType = "DWord"
        )
        # Do not output errors and continue
        $ErrorActionPreference = [System.Management.Automation.ActionPreference]::SilentlyContinue
        if (-not $(Test-Path -Path $Path)) {
            # Check if path does not exist and create the path
            New-Item -Path $Path -Force | Out-Null
        }
        if ((Get-ItemProperty -Path $Path -Name $Name)) {
            # Update property and print out what it was changed from and changed to
            $CurrentValue = Get-ItemProperty -Path $Path -Name $Name
            try {
                Set-ItemProperty -Path $Path -Name $Name -Value $Value -Force -Confirm:$false -ErrorAction Stop | Out-Null
            }
            catch {
                Write-Error $_
            }
            Write-Host "$Path$Name changed from $CurrentValue to $(Get-ItemProperty -Path $Path -Name $Name)"
        }
        else {
            # Create property with value
            try {
                New-ItemProperty -Path $Path -Name $Name -Value $Value -PropertyType $PropertyType -Force -Confirm:$false -ErrorAction Stop | Out-Null
            }
            catch {
                Write-Error $_
            }
            Write-Host "Set $Path$Name to $(Get-ItemProperty -Path $Path -Name $Name)"
        }
        $ErrorActionPreference = [System.Management.Automation.ActionPreference]::Continue
    }
    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
    }

    # Reference: https://learn.microsoft.com/en-US/troubleshoot/windows-server/performance/memory-dump-file-options
    $Path = "HKLM:SystemCurrentControlSetControlCrashControl"
    $Name = "CrashDumpEnabled"
    $CurrentValue = Get-ItemPropertyValue -Path $Path -Name $Name -ErrorAction SilentlyContinue
    $Value = 3

    # If CrashDumpEnabled is set to 0 or doesn't exist then enable mini crash dump
    if ($CurrentValue -eq 0 -and $null -ne $CurrentValue) {
        $PageFile = Get-ItemPropertyValue -Path "HKLM:SYSTEMCurrentControlSetControlSession ManagerMemory Management" -Name PagingFiles -ErrorAction SilentlyContinue
        if (-not $PageFile) {
            # If the pagefile was not setup, create the registry entry needed to create the pagefile
            try {
                # Enable automatic page management file if disabled to allow mini dump to function
                Set-ItemProp -Path "HKLM:SYSTEMCurrentControlSetControlSession ManagerMemory Management" -Name PagingFiles -Value "?:pagefile.sys" -PropertyType MultiString
            }
            catch {
                Write-Error "Could not create pagefile."
                exit 1
            }
        }
        Set-ItemProp -Path $Path -Name $Name -Value 3
        Write-Host "Reboot might be needed to enable mini crash dump."
    }
    else {
        Write-Host "Crash dumps are already enabled."
    }
    exit 0
}
end {}

 

Accedi a oltre 300 script nel Dojo di NinjaOne

Ottieni l’accesso

Analisi dettagliata

Lo script PowerShell per abilitare i minidump inizia controllando se il sistema ha i privilegi di amministratore. Questo è fondamentale perché le modifiche al registro di sistema, effettuate da questo script per abilitare i minidump, richiedono tali autorizzazioni. 

Il percorso principale del Registro di sistema che ci interessa è HKLM:SystemCurrentControlSetControlCrashControl. All’interno di questo percorso, c’è una chiave di registro specifica, CrashDumpEnabled che regola lo stato di generazione dei crash dump. 

Se questa chiave è impostata su 0 o non esiste, significa che i crash dump non sono abilitati. Lo script provvederà quindi ad abilitare la creazione di minidump. Inoltre, lo script controlla la presenza di un pagefile e ne crea uno se manca, poiché è un prerequisito per abilitare i minidump.

Situazioni d’uso potenziali

Immagina un professionista IT, Bob, che lavora in un’organizzazione di medie dimensioni. In seguito a diversi crash inspiegabili del sistema, Bob è sotto pressione per individuare la causa principale del problema. Invece di procedere macchina per macchina, Bob distribuisce questo script su tutti i computer dell’organizzazione per abilitare i minidump. Questo approccio proattivo garantisce che la prossima volta che si verificherà un crash, Bob avrà un file minidump pronto per l’analisi. Ottimo lavoro, Bob!

Approccio alternativo

Utilizzando metodi tradizionali, generare e abilitare i minidump comporta la navigazione in più menu di Windows o la modifica manuale del registro di sistema, operazioni che richiedono tempo e sono soggette a errori. Questo script per abilitare i minidump si distingue per l’automazione del processo, riducendo così la possibilità di errore umano e garantendo una configurazione coerente su più macchine.

Domande frequenti

  • Quali sono i prerequisiti per utilizzare questo script per abilitare i minidump?
    Lo script per abilitare i minidump supporta Windows 10 e Windows Server 2016 o versioni più recenti. 
  • È necessario un riavvio dopo l’esecuzione dello script per abilitare i minidump?
    Potrebbe essere necessario un riavvio per completare l’abilitazione dei mini-crash dump. 
  • Cosa succede se il mio sistema ha già abilitato i crash dump?
    Lo script per abilitare i minidump lo riconoscerà e non apporterà modifiche.

Implicazioni

Abilitare i minidump è un’arma a doppio taglio. Se da un lato offre dati preziosi per il debug, dall’altro potrebbe comportare la manipolazione di informazioni sensibili. I professionisti IT dovrebbero prendere in considerazione la possibilità di criptare questi file o di assicurarsi che siano archiviati in luoghi sicuri.

Suggerimenti

  • Testare sempre lo script per abilitare i minidump in un ambiente controllato prima di distribuirlo. 
  • Esaminare e cancellare regolarmente i file minidump per risparmiare spazio su disco e mantenere la privacy.

Considerazioni finali

L’integrazione di soluzioni automatizzate, come lo script per abilitare i minidump descritto, semplifica le attività di gestione IT. Piattaforme come NinjaOne migliorano ulteriormente questo aspetto, offrendo un controllo centralizzato e una suite di strumenti personalizzati per le esigenze dei professionisti IT, e garantendo che i sistemi rimangano ottimizzati e sicuri. 

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ù su NinjaOne Endpoint Management, fai un tour dal vivo, o inizia la tua prova gratuita della piattaforma NinjaOne.

Ti potrebbe interessare anche

Guarda una demo×
×

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.