15Sep

Școala Geek: Scrierea primului tău script PowerShell Full

Acum câteva săptămâni, The Geek ți-a arătat cum poți folosi promptul de comandă pentru a găsi când computerul a fost pornit ultimul.În ultima instalare a școlii Geek pentru PowerShell, vom scrie o comandă PowerShell reutilizabilă pentru a face același lucru.

Asigurați-vă că citiți articolele anterioare din seria:

  • Aflați cum să automatizați Windows cu PowerShell
  • Învățați să utilizați cmdlets în PowerShell
  • Învățați cum să utilizați obiecte în PowerShell
  • Învățați formaterea, filtrarea și compararea în PowerShell
  • Aflați cum să utilizați Remoting înPowerShell
  • Utilizarea PowerShell pentru a obține informații despre computer
  • Lucrul cu colecții în PowerShell
  • Aflați cum să utilizați locuri de muncă în PowerShell
  • Aflați cum să extindeți PowerShell
  • Învățarea variabilelor PowerShell, intrare și ieșire

Scrierea primului script

Primul lucru pe care trebuie să-l facem estegăsiți o modalitate de a accesa informațiile pe care le căutăm. Deoarece avem de-a face cu informații de management, probabil că trebuie să aruncăm o privire la utilizarea WMI, care are într-adevăr o clasă numită Win32_OperatingSystem, care vă permite să vizualizați informații verbose despre sistemul dvs. de operare, inclusiv ultima dată când a pornit.

Acum că știm unde găsim informațiile pe care le căutăm, deschideți ISE și tastați următoarele.

Get-WmiObject -Class Win32_OperatingSystem -ComputerName localhost |

Select-Object-Proprietăți CSName, LastBootUpTime

Notă: A trebuit să îmi împărțesc codul pe două linii, astfel încât să se potrivească în totalitate pe ecran, dar nu ezitați să-l tastați pe o singură linie. Dacă alegeți să o împărțiți pe două rânduri, asigurați-vă că caracterul conductei este ultimul caracter de pe linia 1.

Acum, faceți clic pe butonul verde "Run Script" sau apăsați tasta F5 de pe tastatură pentru a testa codul.

WMI ori poate fi un pic cam criptic. Asta înseamnă că dacă te uiți la proprietatea LastBootUpTime, se spune că 2013-03-19 la 18:26:21, dar din anumite motive băieții WMI au decis să concateze toate acestea într-un singur șir. Din fericire pentru noi, nu trebuie să ne facem griji cu privire la parsarea manuală a șirului, deoarece există o modalitate mai ușoară de a face acest lucru, deși mai avansată.Va trebui să modificați partea de selectare a obiectului din cod pentru a arăta astfel:

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

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

Ceea ce facem aici este crearea unei proprietăți personalizate numită "Last Booted" și specificarea faptului că valoarea sa trebuie să fie rezultatul apelarea staticului ToDateTimepe proprietatea LastBootUpTime a obiectului curent al conductei. Codul dvs. ar trebui să arate așa.

Rularea codului va da acum un timp de boot mult mai ușor de citit.

Acum că suntem mulțumiți de funcționalitatea de bază a scriptului nostru, trebuie să îl salvăm. Pentru simplificare, hai să o salvăm după cum urmează:

C: \ Get-LastBootTime.ps1

Acum treceți la jumătatea inferioară a ISE și executați următoarele:

C: \ Get-LastBootTime.ps1

Excelent! Scriptul nostru funcționează așa cum era de așteptat, însă există încă o problemă cu scenariul nostru. Am codificat numele computerului pe care vrem să-l primim ultimul timp de încărcare.În loc de valorile hardcode, ar trebui să oferim mai degrabă un parametru, astfel încât oricine utilizează scriptul să poată alege ce computer să ruleze împotriva scriptului. Pentru a face acest lucru, mergeți în partea de sus a scriptului dvs. și faceți următoarele.

param(
[șir] $ ComputerName
)

Apoi, înlocuiți valoarea localhost hardcoded cu variabila $ ComputerName. Scriptul dvs. ar trebui să arate astfel:

Salvați scriptul, apoi mergeți înapoi în jumătatea inferioară a ISE și vizualizați ajutorul pentru scriptul dvs.

ajuta C: \ Get-LastBootTime.ps1

Awesome, deci acum putem specifica numele calculatorului pe care dorim sa-l primim ultimul timp de pornire pentru folosirea noului nostru parametru ComputerName. Din păcate, există încă câteva lucruri greșite.În primul rând, parametrul ComputerName este opțional și, în al doilea rând, acesta este cel mai urât ajutor pe care l-am văzut vreodată, deci să rezolvăm repede aceste probleme. Pentru a face ca parametrul ComputerName să fie obligatoriu, modificați conținutul param blocului la următoarele.

[Parametru( obligatoriu = $ true)] [șir] $ ComputerName

În ceea ce privește crearea unui fișier de ajutor mai bun, metoda cea mai comună este de a folosi ajutorul bazat pe comentarii. Asta inseamna ca adaugam un comentariu extra lung la partea de sus a scenariului.

<
. SYNOPSIS
Afișează când a pornit PC-ul.
. DESCRIPTION
Aceasta este o funcție WMI wrapper pentru a obține timpul la care a pornit ultimul PC.
. PARAMETER ComputerName
Numele computerului pe care doriți să-l rulați comanda împotriva.
. EXAMPLE
Get-LastBootTime -ComputerName localhost
. LINK
www.howtogeek.com
# & gt;

Odată ce totul se termină, ar trebui să terminați cu un script care arată în felul acesta.

Să mergem acum și să verificăm noul nostru fișier de ajutor.

Ahhh, arata grozav! Acum că scriptul nostru este complet, avem un ultim lucru de făcut: testarea. Pentru asta, voi ieși din ISE și mă voi întoarce în consola PowerShell doar pentru a ne asigura că nu există anomalii.

Daca incepeti cu o linie simpla si pur si simplu continuati sa construiti pe ea asa cum am facut in acest ghid, veti primi atarna de ea in cel mai scurt timp. Asta e tot pentru oamenii de această dată, te văd în următoarea instalare a Școlii Geek.