15Sep

Geek School: scrivere il tuo primo script Full PowerShell

Alcune settimane fa, The Geek ti ha mostrato come puoi usare il prompt dei comandi per trovare quando è stato avviato il computer per ultimo. In quest'ultima installazione di Geek School per PowerShell, scriveremo un comando PowerShell riutilizzabile per fare la stessa cosa.

Leggere gli articoli precedenti della serie:

  • Imparare come automatizzare Windows con PowerShell
  • Imparare ad utilizzare i cmdlet in PowerShell
  • Imparare come utilizzare gli oggetti in PowerShell
  • Imparare la formattazione, il filtraggio e il confronto in PowerShell
  • Imparare a utilizzare i servizi remoti inPowerShell
  • Utilizzo di PowerShell per ottenere informazioni sul computer
  • Utilizzo di raccolte in PowerShell
  • Informazioni sull'utilizzo di processi in PowerShell
  • Informazioni su Estendere PowerShell
  • Apprendimento di PowerShell Variabili, input e output

Scrittura del primo script

La prima cosa che dobbiamo fare ètrovare un modo per accedere alle informazioni che stiamo cercando. Poiché abbiamo a che fare con le informazioni di gestione, probabilmente dovremmo dare un'occhiata all'utilizzo di WMI, che in effetti possiede una classe chiamata Win32_OperatingSystem che consente di visualizzare informazioni dettagliate sul sistema operativo, inclusa l'ultima volta che è stato avviato.

Ora che sappiamo dove possiamo trovare le informazioni che cerchiamo, aprite ISE e digitate quanto segue.

Get-WmiObject -Class Win32_OperatingSystem -ComputerName localhost |

Select-Object -Property CSName, LastBootUpTime

Nota: ho dovuto suddividere il mio codice su due righe in modo che tutto si adattasse allo screenshot, ma sentitevi liberi di scriverlo su una singola riga. Se scegli di dividerlo su due righe, assicurati che il carattere pipe sia l'ultimo carattere della riga 1.

Ora fai clic sul pulsante verde "Esegui script" o premi il tasto F5 sulla tastiera per testare il codice. I tempi WMI dell'

possono essere un po 'criptici. Con questo intendiamo se guardi la proprietà LastBootUpTime, dice 2013-03-19 alle 18:26:21, ma per qualche motivo i membri della WMI hanno deciso di concatenare tutto ciò in una singola stringa. Fortunatamente per noi, non dobbiamo preoccuparci di analizzare manualmente la stringa in quanto vi è un modo più semplice per farlo, anche se più avanzato. Dovrai modificare la parte Select-Object del codice per assomigliare a questa:

Select-Object -Property CSName, @{ n = "Last Booted";

e ={ [Management. ManagementDateTimeConverter]: : ToDateTime( $ _. LastBootUpTime)}}

Quello che stiamo facendo qui è la creazione di una proprietà personalizzata chiamata "Last Booted" e che specifica che il suo valore deve essere il risultato della chiamata a ToDateTime staticmetodo sulla proprietà LastBootUpTime dell'oggetto pipeline corrente. Il tuo codice dovrebbe ora apparire come questo.

L'esecuzione del codice ora produrrà un tempo di avvio molto più leggibile.

Ora che siamo soddisfatti delle funzionalità di base del nostro script, dobbiamo salvarlo. Per semplicità, salviamolo come segue:

C: \ Get-LastBootTime.ps1

Passare ora alla metà inferiore di ISE ed eseguire quanto segue:

C: \ Get-LastBootTime.ps1

Grande! Il nostro script funziona come previsto, tuttavia c'è ancora un problema con il nostro script. Abbiamo hardcoded il nome del computer per il quale vogliamo ottenere l'ultimo avvio. Invece dei valori di codifica, dovremmo piuttosto fornire un parametro in modo che chiunque usi lo script possa scegliere su quale computer viene eseguito lo script. Per farlo, vai all'inizio del tuo script e fai quanto segue.

param(
[stringa] $ ComputerName
)

Quindi sostituire il valore localhost hardcoded con $ ComputerName variabile. Il tuo script dovrebbe ora assomigliare a questo:

Salva il tuo script, quindi torna alla metà inferiore di ISE e visualizza la guida per il tuo script.

aiuto C: \ Get-LastBootTime.ps1

Impressionante, così ora possiamo specificare il nome del computer che vogliamo ottenere l'ultima volta di avvio per usare il nostro nuovo parametro ComputerName. Sfortunatamente, ci sono ancora alcune cose sbagliate. In primo luogo, il parametro ComputerName è facoltativo e, in secondo luogo, è il più brutto aiuto che abbia mai visto, quindi risolviamo rapidamente questi problemi. Per rendere obbligatorio il parametro ComputerName, modificare il contenuto del blocco param nel modo seguente.

[Parametro( obbligatorio = $ true)] [stringa] $ ComputerName

Per quanto riguarda la creazione di un file di guida migliore, il metodo più comune consiste nell'utilizzare la guida basata sui commenti. Ciò significa che aggiungiamo un commento extra lungo alla parte superiore di uno script.

& lt; #
. SYNOPSIS
Mostra l'ultimo avvio del PC.
. DESCRIPTION
Questa è una funzione wrapper WMI per ottenere il tempo di avvio del PC.
. PARAMETER ComputerName
Il nome del computer su cui si desidera eseguire il comando.
. EXAMPLE
Get-LastBootTime -ComputerName localhost
. LINK
www.howtogeek.com
# & gt;

Una volta terminato, dovresti ritrovarti con uno script simile a questo.

Passiamo ora a dare un'occhiata al nostro nuovo file di aiuto.

Ahhh, sembra fantastico! Ora che il nostro script è completo, abbiamo un'ultima cosa da fare: test. Per questo, uscirò dall'ISE e tornerò nella console PowerShell solo per assicurarci che non ci siano anomalie.

Se inizi con una semplice fodera e continui a costruire su di essa come abbiamo fatto in questa guida, ne avrai la possibilità in pochissimo tempo. Questo è tutto per questa volta gente, ci vediamo nella prossima installazione di Geek School.