Ottenere l’uptime del computer Utilizzando PowerShell
L’uptime del computer è una statistica importante nella gestione dei sistemi. Ecco alcuni dei modi in cui possiamo determinare l’uptime del sistema per un computer (si noti che questo elenco non è affatto esaustivo):
1. La scheda Prestazioni del Task Manager visualizza i tempi di attività del computer come giorni, ore, minuti e secondi.
2. Lo strumento della riga di comando Systeminfo visualizza l’ultima ora di avvio del computer.
3. L’ID evento più recente 6005 nel registro eventi di sistema del computer registra l’ultima ora di avvio del computer.
4., La classe WMI Win32_OperatingSystem ha una proprietà LastBootUpTime che contiene l’ultima ora di avvio del computer.
Ognuna di queste tecniche ha i suoi pro e contro. Ad esempio, il Task Manager fornisce una rapida visibilità per l’uptime di un singolo computer e il registro eventi contiene informazioni aggiuntive sull’evento 6005 che potrebbero fornire informazioni su un errore di sistema. Le prime tre scelte probabilmente non sono le migliori per scopi di automazione (ad esempio, interrogando un elenco di server per l’uptime), quindi diamo un’occhiata a WMI. In primo luogo, però, abbiamo bisogno di dare un’occhiata a come WMI restituisce le informazioni di uptime.,
Utilizzo di WMI per ottenere il tempo di attività del computer
Ci sono diversi modi in cui possiamo recuperare il tempo di attività di un computer utilizzando WMI. Uno dei modi più ovvi, prima di Windows PowerShell, era quello di utilizzare il comando WMIC. Ad esempio:
Questo comando recupera la proprietà LastBootUpTime dell’istanza della classe Win32_OperatingSystem sul computer., In PowerShell, useremo il cmdlet Get-WmiObject anziché WMIC:
Prova tu stesso questi comandi e vedrai che l’output non è necessariamente “user-friendly” perché la data e l’ora espresse nella proprietà LastBootUpTime sono formattate come una stringa datetime CIM (Common Information Model). Ad esempio:
Questa stringa datetime si traduce in maggio 12, 2016, 15:48:36 (3:48pm). 125599 è il numero di microsecondi (li ignoreremo) e -360 rappresenta il numero di minuti offset da GMT., In questo esempio, -360 significa che il tempo è 6 ore dietro GMT. (Allo stesso modo, +180 significherebbe “3 ore prima del GMT.”)
Per rendere la stringa datetime CIM più utilizzabile, avremo bisogno di convertirla in una data utilizzabile (un oggetto DateTime). Fortunatamente, PowerShell rende questo semplice: Il metodo statico ToDateTime del sistema.Gestione.ManagementDateTimeConverter. NET classe converte la stringa datetime CIM in un oggetto DateTime che possiamo usare più facilmente in PowerShell. Figura 1 mostra un esempio.,
Figura 1 – Conversione dell’ultima ora di avvio del computer in un DateTime
Nella Figura 1, la variabile dat DateTime contiene la data e l’ora dell’ultimo avvio del computer corrente. Per ottenere l’output dell’uptime (piuttosto che la data e l’ora dell’ultimo avvio), possiamo sottrarlo dall’ora corrente (Get-Date), che si traduce in un oggetto TimeSpan contenente la differenza. Figura 2 mostra un esempio di questo.,
Figura 2 – Conversione dell’ultimo tempo di avvio del computer in un tempo di attività leggibile
Il primo comando in Figura 2 crea un oggetto TimeSpan contenente la differenza tra la data e l’ora correnti e l’ultimo tempo di avvio (l’oggetto dat DateTime creato in Figura 1). Il secondo comando emette l’oggetto TimeSpan e il comando finale utilizza l’operatore-f per emettere il TimeSpan come una stringa formattata leggibile che ci dice che il computer corrente è attivo per 4 giorni, 19 ore, 56 minuti e 44 secondi.,
Ottenere l’ultimo tempo di avvio da un computer remoto
Gli esempi nelle figure 1 e 2 si rivolgono al computer locale. Come possiamo indirizzare un computer remoto? Fortunatamente WMI ci consente di recuperare informazioni su un computer remoto utilizzando il parametro-ComputerName. WMI ci consentirà anche di specificare credenziali alternative per un computer remoto in un oggetto PSCredential. Figura 3 mostra un esempio di ottenere l’ultimo tempo di avvio per un computer denominato server1.,
Figura 3 – di avere l’ultima avvio da un computer remoto
Il primo comando in Figura 3 viene PSCredential oggetto nella variabile $cred, e il secondo comando si ottiene il CIM datetime stringa contenente l’ultima fase di avvio per il computer server1 (avviso-ComputerName e -i parametri di Credenziali). Il terzo comando converte l’ultima ora di avvio in un oggetto DateTime e l’ultimo comando emette l’ultima ora di avvio per il computer.
Mettere tutto insieme – il Get-Uptime.,ps1 Script
Gli esempi mostrati nelle Figure 1 e 2 mostrano come ottenere l’ultimo tempo di avvio del computer e mostrano come una stringa di facile lettura, e Figura 3 mostra come ottenere l’ultimo tempo di avvio di un computer remoto. Naturalmente, non c’è bisogno di ricordare tutte le sfumature se incapsuliamo la logica in uno script facile da usare. Lo script Get-Uptime. ps1 fa tutto il duro lavoro per noi. La sintassi dello script è la seguente:
Il parametro-ComputerName è facoltativo e indica i computer per i quali si desidera ottenere le informazioni di uptime., Questo parametro supporta più oggetti, input pipeline e oggetti che hanno una proprietà ComputerName. Il nome del parametro-ComputerName è facoltativo. Se si omette questo parametro, l’impostazione predefinita è l’output delle informazioni di uptime per il computer corrente.
Il parametro-Credential fornisce credenziali alternative se si desidera interrogare uno o più computer remoti e l’account connesso corrente non ha accesso. L’esecuzione di query uptime non richiede privilegi di amministratore sul computer locale, ma è necessaria per i computer remoti.,
Lo script emette oggetti con tre proprietà: ComputerName (il nome del computer), LastBootTime (un DateTime contenente l’ultimo tempo di avvio del computer) e Uptime (una stringa di uptime di facile lettura).
Ottenere il tempo di attività per più computer
La figura 4 illustra ottenere il tempo di attività per tre computer remoti in due modi diversi.,
Figura 4 – Ottenere il tempo di attività per tre computer remoti due modi diversi
Il primo comando in Figura 4 specifica i tre computer come parametro per lo script Get-Uptime, e il secondo comando specifica i tre computer come input pipeline. Si noti che entrambi i comandi producono un output identico (tranne che le stringhe di uptime nell’output del secondo comando sono leggermente successive).
Poiché lo script supporta l’input della pipeline, è anche possibile utilizzare l’output del cmdlet Get-ADComputer per segnalare l’uptime per tutti i computer in un’unità operativa., Ad esempio, considera il seguente comando:
(ho diviso il comando su più righe per renderlo più facile da leggere.) Questo comando recupera i nomi di tutti i computer nei server OU, seleziona solo la proprietà Name di ciascun computer (Select-Object-ExpandProperty), ordina l’elenco dei nomi dei computer e infine ottiene l’uptime da ciascun computer.
Computer Uptime Made Easy
Computer uptime è una metrica importante. Ci sono una varietà di modi per ottenere uptime, ma non un modo semplice in PowerShell. Il Get-Uptime.,ps1 script colma questa lacuna e rende facile ottenere uptime del computer, non importa se si desidera ottenere uptime del computer corrente o uptime per i computer remoti.