Powershell

PowerShell – Introducere

PowerShell este cel mai puternic instrument de automatizare oferit de Microsoft.
Vă rugăm să rețineți că acest articol este bazat pe PowerShell 3, care il gasim „by default” în Windows 8 și Windows Server 2012 Dacă rulați Windows 7 sau Windows Server 2008 vă rugăm să descărcați actualizarea PowerShell 3 înainte de a continua. (Nota: PowerShell a ajuns deja la versiunea 4, dar versiunea 3 rămâne, deocamdată, cea mai răspândită)
Faceți cunoștință cu consola PowerShell și PowerShell ISE:
Există două modalități de a interacționa cu PowerShell: PowerShell Console și Integrated Scripting Environment – de asemenea, cunoscut sub numele de ISE. ISE a evoluat foarte mult de la versiunea care a fost livrată cu PowerShell 2 și poate fi deschis prin apăsarea combinației de taste Win + R pentru deschide fereastra Run, apoi tastați powershell_ise și apăsați tasta Enter.

1

3

După cum puteți vedea ISE este împărțit în 2 ferestre, astfel încât să puteți rapid vedea rezultatul comenzii executate, în jumătatea inferioară a ISE. Jumătatea inferioară a ISE, în care sunt afișate rezultatele comenzilor rulate, poate fi de asemenea utilizată ca un prompt REPL – la fel ca linia de comandă. V3 ISE adăugat în sfârșit suport pentru intellisense atât panoul de script precum și în consolă.

4

5

Alternativ, puteți interacționa cu PowerShell utilizând Consola PowerShell, pe care, de fapt, o vom folosi cel mai adesea. Consola PowerShell se comportă la fel ca linia de comandă – pur și simplu introduceți comenzi și ea vă dă rezultatele. Pentru a deschide PowerShell Console pentru Windows, apăsați din nou combinația de taste Win + R tastați powershell, apoi apăsați enter. De asemenea puteți deschide PowerShell din: Start- All Programs – Accessories – Windows PowerShell – Windows PowerShell.

6

7

Utilizarea consolei este simplă: introduceți comanda (comenzile PowerShell sunt numite cmdlets) și apăsați Enter pentru a o executa.
De asemenea, consola are și o funcție numită tab completion. Aceasta înseamnă ca puteți scrie doar o parte din comandă și apăsând TAB vi se vor sugera comenzile posibile.

8

9

Utilizarea sistemului de ajutor

În versiunile anterioare de PowerShell, fișierele de Help erau incluse atunci când Windows era instalat . Aceasta a fost o soluție bună in general, dar ne-a lăsat cu o problemă semnificativă. Când apăreau modificări majore, informațiile din paginile de Help instalate nu mai erau valabile. Pentru a rezolva această problemă, PowerShell 3 nu vine cu nici un fișier Help instalat, dar include un sistem de Help actualizabil. Acest lucru înseamnă că, înainte de a face ceva, să descărcați cele mai recente fișiere de Help. Puteți face acest lucru prin deschiderea unei Console PowerShell și inserati comanda:

Update-Help

10

11

FELICITĂRI!!! Tocmai ați rulat prima comandă PowerShell! :)
Dar adevărul este că această comandă update-help are mult mai multe opțiuni. Pentru a vizualiza Help-ul pentru o comandă, treci pur și simplu numele comenzii pe care doriți cu parametrul numelui comenzii Get-Help, de exemplu:

Get-Help –Name Update-Help

12

Vă veți întreba poate, de ce avem 2 seturi de informații și ce e cu parantezele care apar peste tot?
Ei bine, motivul pentru care există două seturide informații în partea de sintaxă, este pentru că ele reprezintă diferite moduri de a rula comanda. Acestea din punct de vedere tehnic sunt numite seturi de parametri și se pot folosi doar câte unul la un moment dat (nu se pot amesteca parametri din diferite seturi).
Cât despre paranteze:
• parantezele pătrate în jurul valorii unui nume de parametru și tipul său înseamnă că este un parametru opțional și comanda va funcționa bine fără el.
• parantezele pătrate în jurul numelui parametrului înseamnă că parametrul respectiv este un parametru pozitional.
• ceea ce găsim în dreptul unui parametru între paranteze unghiulare ne spune ce tip de date sunt solicitate.
În timp ar trebui fiecare să învețe să citească fișierele Help, iar în cazul în care nu sunteti siguri despre un anumit parametru doar adăugați -Full la sfârșitul comenzii get-help și veți avea lista completă referitoare la acea comandă sau parametru.

Get-Help –Name Update-Help –Full

13

Ultimul lucru pe care trebuie să îl știți despre sistemul de Help este modul în care îl puteți folosi pentru a descoperi comenzi, ceea ce este de fapt foarte simplu. Vedeți voi, PowerShell acceptă metacaractere aproape oriunde, de aceea utilizarea lor împreună cu comanda Get-Help vă permite să descoperiți cu ușurință comenzi. De exemplu, mă interesează comenzile legate de Windows Services:

Get-Help –Name *service*

14

Sigur, toate aceste informații ar putea să nu fie la îndemâna tuturor, dar credeți-mă, e bine să vă faceți timp să învețați cum să folosiți sistemul de Help. Veți avea nevoie de el tot timpul, chiar și programatorii avansați, care lucrează cu scripturi de ani de zile, îl folosesc.

Securitate

Acest articol nu ar fi complet, fără a menționa partea de securitate. Cea mai mare îngrijorare pentru echipa PowerShell a fost că PowerShell va devin cel mai vulnerabil punct de atac pentru hackeri. Așa că au luat o serie de măsuri de securitate pentru a se asigura că acest lucru nu se întâmplă. Haideți să aruncăm o privire la aceste măsuri:
– Cea mai simplă formă de protecție vine de la faptul că extensia fișierului PS1 (extensia folosită pentru un script PowerShell) nu este înregistrată ca aparținând PowerShell, deci PowerShell nu poate deschide/rula un fișier .ps1. De fapt, dacă dăm dublu click pe un fișier .ps1 vom observa că se deschide cu ajutorul Notepad, fără a rula scriptul.
– În al doilea rând, nu puteți rula script-urile doar tastând numele scriptului, va trebui să specificați calea completă a scriptului. Deci, dacă ați vrut să rulați un script pe unitatea C va trebui să tastați:

C: \ scriptulmeu.ps1

Sau, dacă sunteți deja în rădăcina unității C se poate scrie:

. \ scriptulmeu.ps1

Și nu în cele din urmă, PowerShell are ceva numit politici de executare (Execution Policy), care vă vor opri să executați un script vechi. De fapt, în mod implicit, nu puteți executa nici un script și trebuie să schimbați politica de executare dacă doriți să fie permisă rularea scriptului respectv. Există 4 mari politici de executare:

• Restricted: Aceasta este configurată by default în PowerShell. Această setare înseamnă că un script nu poate rula, indiferent de semnătura acestuia. Singurul lucru care poate fi rulat în PowerShell cu această setare este o comandă individuală.
• AllSigned: Această setare permite rularea de script-uri în PowerShell. Scriptul trebuie să aibă o semnătură digitală asociată la un editor de încredere.
• RemoteSigned: Această setare vă permite sa rulați script-uri, dar numai daca script-ul de configurare și fișierele care sunt descărcate de pe Internet au o semnătură digitală asociată la un editor de încredere. Script-urile rulate de pe computerul local nu trebuie să dețină sennături digitale.
• Unrestricted: Permite scripturilor nesemnate să ruleze, inclusiv toate script-urile și fișierele de configurare descărcate de pe Internet. Aceasta va include fișiere din Outlook și Messenger. Riscul aici constă în executarea script-urilor, fără nici o semnătură sau securitate. Nu este recomandată această setare

Pentru a verifica care este Politica de Execuție curentă (Execution Policy), deschideți PowerShell si tastați comanda:

Get-ExecutionPolicy

15

Dacă am fi avut altă setare – și având în vedere ca RemoteSigned Policy este una din cele mai frecvente (si recomandate) setări- vă voi arăta cum setam Execution Policy pentru această setareȘ

Set-ExecutionPolicy RemoteSigned

16

Și aici încheiem partea introductivă legată de ce este și cum folosim PowerShell.

Pe măsura ce timpul îmi va permite, o sa revin cu completări legate de acest subiect.


Listarea utilizatorilor din AD in functie de data crearii lor

Daca aveti nevoie sa listati utilizatorii din AD in functie de data crearii lor (de la primul user creat pana in prezent, sau puteti sa ii filtrati si numai pentru o anumita perioada data), folosit scriptul urmator:


$Start = Get-Date -Day 01 -Month 01 -Year 2014 -Hour 00
$End = Get-Date -Day 09 -Month 11 -Year 2015 -Hour 23 -Minute 59
Get-ADUser -Filter * -Properties whenCreated | ? { ($_.whenCreated -gt $Start) -and ($_.whenCreated -le $End) } | Format-Table Name,WhenCreated,DistinguishedName -Autosize –Wrap > C:/User.csv

Partea cu > C:/User.csv este ca sa va exporte lista pe C:/ intr-un fisier .csv. Daca nu doriti asta ci vreti sa vedeti lista in consola, omiteti aceasta parte.

Enjoy

Leave a Reply