Formazione e Tecnologia
Cambiare le impostazioni di alimentazione del computer con uno script Powershell e un RMM.

Cambiare le impostazioni di alimentazione del computer con uno script Powershell e un RMM.

Devi collegarti da remoto ad un computer e lo trovi spento, ma sai benissimo che dovrebbe essere acceso, il problema della situazione incresciosa è che di default ogni computer, a prescindere che sia portatile o fisso, viene mandato in standby dopo una decina di minuti.

I nuovi default di controllo di alimentazione sono tarati per spegnere il computer anche se collegato alla rete elettrica, si tratta probabilmente di una solerte politica di qualche sviluppatore green.

Il guaio è per chi deve lavorare da casa in reperibilità e si aspetta di potersi collegare al proprio computer quando contattato per intervenire, ma questa possibilità gli viene negata per via di un flag in un pannello.

Nel nostro caso ci viene interdetta la possibilità di svolgere qualsiasi operazione di manutenzione fuori orario, compresa l’installazione dei computer da remoto, dove raggiungere il cliente significa imbarcarsi in un viaggio di circa 650 km.

Il problemino è comunque di facile risoluzione, basta modificare un’impostazione nella gestione di alimentazione ed evitare che il computer si spenga se collegato alla rete elettrica, mantenendo invece attivo lo spegnimento del monitor, che è causa di alti consumi.

La configurazione di queste impostazioni può essere automatizzata e gestita a sua volta da remoto attraverso una semplice procedura realizzata da un RMM, evitando di dimenticarsene in fase di installazione, il tutto usando un semplice comando di Microsoft Windows.

Tabella dei Contenuti

Il comando e i suoi parametri alias

Il comando da utilizzare è il noto powercfg, un comando di vecchissima generazione ancora ampiamente utilizzato per le modifiche delle configurazione di alimentazione dei computer, questo comando, oltre a permettere di creare, modificare e rimuovere profili di alimentazione, fornisce la possibilità di agire in modo rapido e diretto sugli otto elementi di base che gestiscono ibernazione e standby.

Il pannello di configurazione delle impostazioni di alimentazione in Windows.

Il pannello di configurazione delle impostazioni di alimentazione in Windows.

Gli alias sono divisi in alimentazione a batteria e direttamente da rete elettrica, permettendo in questo modo di ottenere il migliore bilanciamento necessario per un valido equilibrio energetico e il lavorare senza trovarsi con il computer spento.

  • Spegnimento del monitor – monitor-timeout-ac e monitor-timeout-dc;
  • Sospensione del disco – disk-timeout-ac e disk-timeout-dc;
  • Standby del computer – standby-timeout-ac e standby-timeout-dc;
  • Ibernazione del computer – hibernate-timeout-ac e hibernate-timeout-dc.

Il comando può essere eseguito indistintamente da una finestra Command o da una finestra Powershell. La sintassi è semplice:

  • powercfg.exe -X -[parametro] [tempo in minuti]

Il pannello di configurazione di Microsoft Windows che gestisce l’alimentazione e la sospensione permette di disattivare permanentemente gli spegnimenti, per ottenere questa impostazione con il comando è sufficiente impostare il tempo a zero.

Per impedire la sospensione con il computer alimentato dalla rete elettrica, condizione tipica dei computer fissi, la sintassi del comando diventa:

  • powercfg.exe -X -standby-timeout-ac 0

Il comando può essere utilizzato per eseguire delle configurazioni ulteriori sfruttando i profili, ma questo tipo di approccio non è al momento il nostro obiettivo.

La nostra scelta di configurazione

Nel corso del tempo abbiamo scolpito nella pietra quella che per noi è la migliore configurazione, partendo dalle esigenze lavorative e dai molteplici bollettini di malfunzionamenti innescati dalle varie combinazioni di sospensione.

LEGGI ANCHE -  Powershell e SSH per potenziare l'RMM e non solo

Un elemento che manteniamo attivo in computer a batteria e su rete elettrica è lo spegnimento del monitor, valutando le modalità di lavoro abbiamo stimato il timeout ottimale a 10 minuti.

La decisione è nata dal fatto che difficilmente una persona di fronte allo schermo del computer trascorre più di 10 minuti senza spostare il mouse, se ciò accade l’attenzione non è focalizzata sul computer e quindi lo schermo può essere disattivato. L’accesso a file e contenuti multimediali attraverso i programmi preposti inibisce questo timeout. Non è da confondere con la funzione di screen saver di Microsoft Windows, che blocca il desktop riproducendo un motivo grafico.

  • powercfg.exe -X -monitor-timeout-ac 10
  • powercfg.exe -X -monitor-timeout-dc 10

La sospensione del disco è spesso causa di malfunzionamenti con alcune tipologie di software e di fatto di scarsa utilità, per minimizzare impatti sugli utenti la nostra scelta è stata di disattivarla, a discapito della durata della batteria nel caso di portatili.

  • powercfg.exe -X -disk-timeout-ac 0
  • powercfg.exe -X -disk-timeout-ac 0

Lo standby o sospensione del computer è la configurazione a cui prestiamo maggiore attenzione. Per i computer portatili è un elemento fondamentale quando si lavora con l’alimentazione a batteria, per questa casistica abbiamo scelto un timeout di 20 minuti.

Considerando che la batteria dei portatili ha tipicamente un’autonomia di tre ore, ottimizzabile attraverso i bilanciamenti dei profili e in particolare la luminosità del video e le prestazioni del processore, un timeout di 20 minuti rende fluido il lavoro e permette di mandare in sospensione il computer nel caso in cui l’utente si allontani o sia impegnato in altre attività.

Nel caso di computer alimentati da rete elettrica, tra i quali rientrano i computer fissi, la sospensione è una caratteristica fastidiosa; pertanto, la nostra scelta è di disattivarla.

  • powercfg.exe -X -standby-timeout-ac 0
  • powercfg.exe -X -standby-timeout-dc 20

L’ibernazione ha molteplici risvolti, la sua attivazione determina un effettivo spegnimento del computer con il salvataggio delle informazioni relativi ai processi attivi e allo stato del kernel in un file denominato hiberfil.sys.

Questa modalità di risparmio energetico ha tre impatti fondamentali:

  • occupazione di spazio del disco per il file contenente il dump di memoria;
  • rischio di un avvio anomalo all’uscita dall’ibernazione, questo passaggio ripristina lo stato precedente, tuttavia alcuni programmi in uso possono andare in crash o perdere i collegamenti con i loro driver, portando a problemi con il lavoro;
  • applicazione parziale o del tutto assente degli aggiornamenti di sistema operativo a causa del ripristino del dump, che non tiene conto degli aggiornamenti caricati.

La nostra decisione è stata quella di disattivare completamente questa funzionalità.

  • powercfg.exe -X -hibernate-timeout-ac 0
  • powercfg.exe -X -hibernate-timeout-dc 0

Gestione con uno script

La realizzazione di uno script richiede il semplice inserimento del comando con la configurazione di interesse al suo interno e quindi eseguirlo direttamente, attraverso un RMM o in altro modo.

Per disporre di uno strumento versatile la nostra scelta è stata quella di realizzare uno script, da usare con Datto RMM, contenente tutte le opzioni di configurazione. Questa scelta ci permette di intervenire in qualsiasi momento per applicare la configurazione desiderata, senza dover rieditare lo script ogni volta.

LEGGI ANCHE -  Conoscere il livello di connettività internet nel corso della giornata

La configurazione degli script permette anche di lasciare inalterate le impostazioni presenti ed andare ad operare solo su quelle di interesse.

Acquisizione dei parametri dal RMM

I parametri necessari sono molti, a causa del numero di elementi da configurare.

La sintassi riportata è quella adottata da Datto RMM e che può essere modificata per l’impiego con altri prodotti RMM.

				
					$MonitorTimeoutAC = $ENV:MonitorTimeoutAC 
$MonitorTimeoutDC = $ENV:MonitorTimeoutDC
$DiskTimeoutAC = $ENV:DiskTimeoutAC
$DiskTimeoutDC = $ENV:DiskTimeoutDC
$StandbyTimeoutAC = $ENV:StandbyTimeoutAC
$StandbyTimeoutDC = $ENV:StandbyTimeoutDC
$HibernateTimeoutAC = $ENV:HibernateTimeoutAC
$HibernateTimeoutDC = $ENV:HibernateTimeoutDC

				
			

I parametri interessano le impostazioni temporali dell’elemento o la sua disattivazione, il valore accettato è un numero intero rappresentante il tempo in minuti del timeout da impostare, o nel caso del valore zero la disattivazione del tipo specifico di spegnimento.

Per lasciare inalterati i valori esistenti abbiamo aggiunto la sigla DNE, corrispondente a “Do Not Edit”, che se intercettata dallo script salta l’esecuzione del comando sullo specifico elemento.

Controllo dei parametri

Il controllo della correttezza dei valori inseriti è fondamentale per evitare che il comando inneschi un errore di esecuzione per parametri scorretti.

				
					if (!($MonitorTimeoutAC -match "^\d+$") -and $MonitorTimeoutAC -ne "DNE") {
  Set-DRMMError -FErrorMessage "ERROR - The MonitorTimeoutAC parameter is not filled in correctly. A numerical value or the abbreviation DNE (Do not edit) is required."
}
if (!($MonitorTimeoutDC -match "^\d+$") -and $MonitorTimeoutDC -ne "DNE") {
  Set-DRMMError -FErrorMessage "ERROR - The MonitorTimeoutDC parameter is not filled in correctly. A numerical value or the abbreviation DNE (Do not edit) is required."
}
if (!($DiskTimeoutAC -match "^\d+$") -and $DiskTimeoutAC -ne "DNE") {
  Set-DRMMError -FErrorMessage "ERROR - The DiskTimeoutAC parameter is not filled in correctly. A numerical value or the abbreviation DNE (Do not edit) is required."
}
if (!($DiskTimeoutDC -match "^\d+$") -and $DiskTimeoutDC -ne "DNE") {
  Set-DRMMError -FErrorMessage "ERROR - The DiskTimeoutDC parameter is not filled in correctly. A numerical value or the abbreviation DNE (Do not edit) is required."
}
if (!($StandbyTimeoutAC -match "^\d+$") -and $StandbyTimeoutAC -ne "DNE") {
  Set-DRMMError -FErrorMessage "ERROR - The StandbyTimeoutAC parameter is not filled in correctly. A numerical value or the abbreviation DNE (Do not edit) is required."
}
if (!($StandbyTimeoutDC -match "^\d+$") -and $StandbyTimeoutDC -ne "DNE") {
  Set-DRMMError -FErrorMessage "ERROR - The StandbyTimeoutDC parameter is not filled in correctly. A numerical value or the abbreviation DNE (Do not edit) is required."
}
if (!($HibernateTimeoutAC -match "^\d+$") -and $HibernateTimeoutAC -ne "DNE") {
  Set-DRMMError -FErrorMessage "ERROR - The HibernateTimeoutAC parameter is not filled in correctly. A numerical value or the abbreviation DNE (Do not edit) is required."
}
if (!($HibernateTimeoutDC -match "^\d+$") -and $HibernateTimeoutDC -ne "DNE") {
  Set-DRMMError -FErrorMessage "ERROR - The HibernateTimeoutDC parameter is not filled in correctly. A numerical value or the abbreviation DNE (Do not edit) is required."
}
if ($FastStart -notin "true","false") {
  Set-DRMMError -FErrorMessage "ERROR - The FastStart parameter is not filled in correctly."
}

				
			

I controlli dalla riga 1 alla riga 24 verificano che il parametro inserito sia un numero o che sia presente la sigla DNE, in caso contrario sospendono l’esecuzione della procedura riportando lo specifico errore.

LEGGI ANCHE -  ShellBag - un viaggio allucinante nei ricordi di Windows

Il cmdlet Set-DRMMError è parte di uno specifico modulo da noi rilasciato sui computer in gestione, che esegue il codice necessario a generare gli aventi di errore in Datto RMM.

Applicazione delle configurazioni

L’esecuzione della stringa di comando è la semplice ripetizione del comando con il relativo parametro concatenato al valore temporale indicato nei parametri, fatta eccezione per gli elementi esclusi dalla modifica.

Di conseguenza le condizioni verificano che il parametro non abbia il valore DNE e in tal caso applicano la configurazione specificata.

				
					if ($MonitorTimeoutAC -ne "DNE") {
  (powercfg.exe -x -monitor-timeout-ac $MonitorTimeoutAC)
}
if ($MonitorTimeoutDC -ne "DNE") {
  (powercfg.exe -x -monitor-timeout-dc $MonitorTimeoutDC)
}
if ($DiskTimeoutAC -ne "DNE") {
  (powercfg.exe -x -disk-timeout-ac $DiskTimeoutAC)
}
if ($DiskTimeoutDC -ne "DNE") {
  (powercfg.exe -x -disk-timeout-dc $DiskTimeoutDC)
}
if ($StandbyTimeoutAC -ne "DNE") {
  (powercfg.exe -x -standby-timeout-ac $StandbyTimeoutAC)
}
if ($StandbyTimeoutDC -ne "DNE") {
  (powercfg.exe -x -standby-timeout-dc $StandbyTimeoutDC)
}
if ($HibernateTimeoutAC -ne "DNE") {
  (powercfg.exe -x -hibernate-timeout-ac $HibernateTimeoutAC)
}
if ($HibernateTimeoutDC -ne "DNE") {
  (powercfg.exe -x -hibernate-timeout-dc $HibernateTimeoutDC)
}

				
			

Conclusioni

Lo script realizzato è molto essenziale e grezzo, tuttavia permette di operare sulle configurazioni di Power Managment in modo rapido, così da poter correggere in modo semplice e veloce delle anomalie di configurazione.

Nel contesto d’uso di un RMM questo approccio permette di impostare un certo tipo di configurazioni in particolari giorni della settimana e di tipo diverso in altri, agendo attraverso delle pianificazioni dei job su gruppi di computer.

Purtroppo, non è altrettanto immediato leggere i valori di configurazione impostati ed agire sulla base di quanto rilevato, questo tipo di operazioni richiedere l’utilizzo di profili di configurazione dell’alimentazione, con un considerevole rischio di errori, anche legati alla build del sistema operativo su cui ci si trova ad operare.

Per maggiori informazioni sull’uso e la realizzazione degli script di automazione leggi questo articolo e contattaci senza impegno.

I componenti distribuiti sono forniti senza alcuna garanzia. Non vi sono garanzie che il software soddisfi le vostre esigenze o sia esente da errori. In nessun caso gli sviluppatori saranno responsabili per eventuali danni.

I componenti proposti sono stati collaudati nel modo più esaustivo possibile e sono utilizzati in modo regolare in ambienti di produzione, durante il loro utilizzo non si sono verificate anomalie di funzionamento.

Archivi
Prossimi eventi

Non ci sono eventi imminenti.

Iscriviti alla nostra Newsletter
Seleziona lista (o più di una):
Manteniamo i tuoi dati privati e NON li condividiamo con terze parti. Per maggiori informazioni, consulta la nostra Privacy Policy.
Confermo di aver letto la Policy sul trattamento dei dati