Come impostare un timeout di inattività con PowerShell in ambiente Windows

Bloccare un computer dopo un periodo di inattività è una misura di sicurezza che ogni professionista IT riconosce come essenziale. Soprattutto in ambienti condivisi o pubblici, questo assicura che una postazione di lavoro non presidiata non diventi una porta aperta per attività dannose. PowerShell, la spina dorsale di molte operazioni IT in ambienti Windows, offre un modo versatile per impostare un timeout di inattività. 

Background

Impostare un timeout di inattività non riguarda solo la sicurezza, ma anche la gestione delle risorse. I professionisti IT e i Managed Service Provider (MSP) spesso implementano questa funzione per risparmiare energia e ridurre l’usura dell’hardware oltre che come primo livello di sicurezza. Lo script fornito si addentra nel campo dell’automazione di questo processo, consentendo un approccio “imposta e dimentica” per impostare un timeout di inattività.

Lo script per impostare un timeout di inattività

#Requires -Version 5.1

<#
.SYNOPSIS
    Set the Inactivity(Lock Computer) timeout time if it already isn't set.
.DESCRIPTION
    Set the Inactivity(Lock Computer) timeout time if it already isn't set.
    Can be set regardless if the -Force parameter is used.
.EXAMPLE
     -Minutes 5
    This set the Inactivity(Lock Computer) timeout to 5 minutes, does not change if already set.
.EXAMPLE
     -Minutes 5 -Force
    This set the Inactivity(Lock Computer) timeout to 5 minutes, and forces the change if already set.
.EXAMPLE
    PS C:> Set-IdleLock.ps1 -Minutes 5
    This set the Inactivity(Lock Computer) timeout to 5 minutes
.OUTPUTS
    None
.NOTES
    Minimum OS Architecture Supported: Windows 10, Windows Server 2016
    Release Notes: Renamed script and added Script Variable support, updated Set-ItemProp
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).
.COMPONENT
    LocalUserAccountManagement
#>

[CmdletBinding()]
param (
    [Parameter()]
    [int]$Minutes,
    [switch]$Force = [System.Convert]::ToBoolean($env:force)
)

begin {
    if ($env:minutes -and $env:minutes -notlike "null") {
        $Minutes = $env:minutes
    }
    
    if(-not ($Minutes)){
        Write-Error "Minutes is required!"
        exit 1
    }

    if($Minutes -gt 9999 -or $Minutes -lt 0){
        Write-Error "Minutes must be between 0 and 9999 (including 0 and 9999)."
        exit 1
    }

    function Test-IsElevated {
        $id = [System.Security.Principal.WindowsIdentity]::GetCurrent()
        $p = New-Object System.Security.Principal.WindowsPrincipal($id)
        if ($p.IsInRole([System.Security.Principal.WindowsBuiltInRole]::Administrator))
        { Write-Output $true }
        else
        { Write-Output $false }
    }
    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
    }
}
process {
    if (-not (Test-IsElevated)) {
        Write-Error -Message "Access Denied. Please run with Administrator privileges."
        exit 1
    }
    
    $Path = "HKLM:SOFTWAREMicrosoftWindowsCurrentVersionPoliciesSystem"
    $IdleName = "InactivityTimeoutSecs"
    $Seconds = $Minutes * 60
    # Override "Check if already set"
    if (-not $Force) {
        # Check if already set
        if ($(Get-ItemProperty -Path $Path | Select-Object -Property $IdleName -ExpandProperty $IdleName -ErrorAction SilentlyContinue)) {
            $CurrentIdleSeconds = $(Get-ItemPropertyValue -Path $Path -Name $IdleName)
            # If value already set, do nothing.
            if ($CurrentIdleSeconds) { exit 0 }
        }
    }

    # Sets InactivityTimeoutSecs to $Minutes
    try {
        Set-ItemProp -Path $Path -Name $IdleName -Value $Seconds
        Write-Host "Set the Inactivity to $($Seconds/60) minutes."
    }
    catch {
        Write-Error $_
        exit 1
    }
}
end {
    
    
    
}

 

Analisi dettagliata

Questo script PowerShell serve a impostare un timeout di inattività su Windows. Ecco come funziona:

  • Prerequisiti: Lo script per impostare un timeout di inattività inizia comunicando all’utente che sarà richiesta almeno la versione 5.1 di PowerShell.
  • Parametri: Vengono impostati due parametri: $Minutes, che è obbligatorio e indica la durata dell’inattività per attivare il blocco del computer, e $Force che, se usato, forza il timeout di inattività anche se già impostato.

Funzioni:

  • Test-IsElevated: Controlla se lo script per impostare un timeout di inattività viene eseguito con privilegi di amministratore.
  • Set-ItemProp: Gestisce la creazione o la modifica della chiave di registro.

Fasi del processo:

  • Initial Check: Verifica che l’utente abbia i privilegi necessari.
  • Registry Path: Indirizza verso la posizione in cui è impostato il timeout di inattività.
  • Condition Check: Se l’opzione -Force non viene utilizzata, controlla se il timeout è già impostato. Se è impostato, esce senza apportare modifiche.
  • Setting Timeout: Se le condizioni sono soddisfatte, il timeout di inattività viene impostato o modificato.

Casi d’uso potenziali

Immagina di lavorare nel laboratorio informatico pubblico di un’università. Diversi studenti utilizzano questi computer nel corso della giornata. Per garantire la riservatezza del lavoro di ogni studente, il reparto informatico potrebbe utilizzare questo script per impostare un timeout di inattività. Impostando un timeout di inattività, ad esempio di 5 minuti, si garantisce che, se uno studente dimentica di disconnettersi, il sistema si blocchi automaticamente impedendo un successivo accesso non autorizzato.

Confronti

Sebbene esistano metodi via GUI per impostare un timeout di inattività, ad esempio attraverso il Pannello di controllo di Windows, questo script offre un vantaggio in termini di scalabilità. Per le distribuzioni massive su numerosi computer, utilizzare uno script come questo è più efficiente. Esistono altri metodi per impostare un timeout di inattività che possono coinvolgere le impostazioni dei Criteri di gruppo, ma non hanno la granularità e la rapidità di applicazione che può offrire uno script PowerShell.

Domande frequenti

  • Perché utilizzare PowerShell per questa impostare un timeout di inattività? PowerShell consente l’automazione, la scalabilità e la distribuzione rapida, soprattutto su più sistemi.
  • Il privilegio di amministratore è sempre richiesto? Sì, per modificare le impostazioni del sistema, per esempio per impostare un timeout di inattività, è necessario disporre dei privilegi di amministratore.
  • È possibile impostare un timeout di inattività per periodi più lunghi? Questo script consente di impostare un timeout di inattività fino a 9999 minuti, ma è essenziale trovare un equilibrio tra usabilità e sicurezza.

Implicazioni

Sebbene lo scopo immediato sia quello di migliorare la sicurezza, un timeout di inattività sbagliato può interferire con il lavoro, soprattutto se impostato su un periodo di inattività troppo breve. D’altra parte, un timeout troppo lungo potrebbe compromettere la sicurezza. Inoltre, le impostazioni di inattività diventano fondamentali negli ambienti ad alta sicurezza, dove lasciare un terminale aperto potrebbe avere gravi conseguenze.

Raccomandazioni

  • Effettua dei test prima dell’applicazione: Esegui sempre gli script in un ambiente di prova prima di distribuirli su larga scala.
  • Trova un equilibrio tra sicurezza e usabilità: Sebbene i timeout più brevi siano più sicuri, non dovrebbero ostacolare le attività quotidiane.
  • Resta sempre aggiornato: Controlla e regola periodicamente i timeout di inattività in base alle esigenze dell’organizzazione.

Considerazioni finali

NinjaOne offre una soluzione completa per il monitoraggio e la gestione dell’IT e, se integrata con script come questo, fornisce un solido controllo dell’ambiente IT. Che si tratti di impostare timeout di inattività o di gestire altri aspetti dell’infrastruttura IT, NinjaOne rimane un partner affidabile per operazioni efficienti, sicure e ottimizzate.

Passi successivi

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

Scopri qualcosa in più su NinjaOne Endpoint Management, fai un tour dal vivo o inizia la tua prova gratuita della piattaforma NinjaOne.

Categorie:

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.