Introducere în PowerShell. Exemple de scripturi PowerShell pentru Windows

PowerShell 5.0 vine cu Windows 10, dar pentru sistemele de operare anterioare, noua versiune a fost lansată ca parte a Windows Management Framework 5.0 abia la sfârșitul lunii februarie și la a doua încercare. Astăzi voi vorbi despre unele dintre noile funcții, dar voi începe cu de ce ați putea avea nevoie de PowerShell.

De ce aveți nevoie de PowerShell

Nu are rost să înveți PowerShell chiar așa, iar acest lucru este valabil pentru orice limbaj - scripting, programare și chiar uman. La fel ca multe soluții Microsoft, PowerShell este creat cu o afacere în minte pentru a automatiza sarcinile de gestionare a computerelor și serverelor din organizații.

Limbajul de scripting se bazează pe platforma puternică de programare .NET, astfel încât PowerShell se extinde cu mult dincolo de administrare.

Odată a trebuit să șterg o coloană din multe registre de lucru Excel 2013. Lucrul manual a fost dezgustător, iar Google nu a oferit o soluție gata făcută. Am creat un topic pe forum (da, uneori pun întrebări și pe OSZone :). Mi se potrivea orice limbă, dar soluția, în mod neașteptat pentru mine, s-a dovedit a fi în PowerShell. După cum sa dovedit, puteți încărca Excel ca obiect COM și îl puteți manipula în continuare.

Ulterior, am folosit o modificare a acelui script de mai multe ori pentru a actualiza automat zeci de registre de lucru Excel care extrag date din alte fișiere. Acest lucru mi-a economisit mult timp și efort.

Cred că ideea este clară și puteți trece deja la noul PowerShell 5.0.

8 caracteristici utile

Evidențierea sintaxelor

Noua consolă este mult mai ușor de navigat!

Culoarea roșie și numerotarea liniilor, totuși, sunt dintr-o altă operă.

Căutare istorică în două direcții

Comenzi rapide de la tastatură: Ctrl + R și Ctrl + S
Cmdlet-uri: Get-PSReadlineKeyHandlerși Set-PSReadlineKeyHandler

La fel ca CMD, PowerShell are un istoric al sesiunii cu navigare cu săgeți, a GetHistory scoate un jurnal similar cu F7 . O listă completă de comenzi rapide de la tastatură legate de jurnal poate fi afișată astfel:

Get-PSReadlineKeyHandler | ? ($_.funcție -cum ar fi „*hist*”)

Rezultatele au două funcții noi de căutare a istoricului, care sunt afișate în imaginea de mai jos. Funcționează foarte simplu.


Spre deosebire de Get-History, care conține istoricul sesiunii curente, acest istoric este menținut la nivel global și persistă atunci când fereastra este închisă.

Mulțumesc pentru pont lui Anton Drovosekov și Konstantin Sidyakin de la grupul nostru VK.

Creați joncțiuni, legături simbolice și legături dure

Cmdlet-uri: Articol nou, Eliminați-element, Get-ChildItem

Am destule povești pe blogul meu, așa că nu am putut ignora posibilitatea de a le crea în PowerShell.

#Legătură simbolică către fișier New-Item -ItemType SymbolicLink -Path C:\test\MySymLinkFile.txt -Target C:\test\1.txt #Legătură simbolică către folder New-Item -ItemType SymbolicLink -Path C:\test\MySymLinkFolder -Target C:\Windows\ #File Hard Link New-Item -ItemType HardLink -Path C:\Test\MyHardLinkFile.txt -Target C:\test\1.txt #New-Item Connection -ItemType Jonction -Path C: \ Temp\MyJunctionDir -Target C:\Windows

Sincer să fiu, sintaxa comenzii mklink mai ușor de reținut, așa că ar putea fi mai rapid astfel:

Iex „mklink /d C:\test\MySymLinkFolder C:\Windows”

Creați un fișier temporar

cmdlet: Nou-Fișier temporar

În scripturi, este adesea necesar să se creeze un fișier temporar pentru a arunca unele informații acolo. Noul cmdlet este conceput pentru a face exact asta.

#Creați un fișier temporar New-TemporaryFile #Creați un fișier temporar și obțineți calea completă $tmpfile = (New-TemporaryFile).FullName $tmpfile

Rareori fac o instalare curată a sistemului principal, dar se întâmplă în mod regulat pe VM. Și OneGet este foarte convenabil pentru auto-instalarea rapidă a unui set cheie de programe.

Notă. Puteți utiliza acest modul fără a instala WMF 5.0. Previzualizarea modulului pentru PS 4.0 și 3.0 este disponibilă separat - martie 2016, iar pentru cele mai recente, căutați în Centrul de descărcări pentru Previzualizarea modulelor PowerShell PackageManagement.

Instalarea programelor

Acest exemplu instalează patru programe și un set complet de utilitare din depozitul Chocolatey. Primele trei comenzi sunt executate o dată, iar modificarea politicii trebuie confirmată. A patra comandă instalează în tăcere programele listate, iar a cincea pur și simplu economisește timp.

#Permite instalarea pachetelor semnate de pe Internet Set-ExecutionPolicy RemoteSigned #Set Chocolatey provider Get-PackageProvider –Name Chocolatey -ForceBootstrap #Make Chocolatey trusted Set-PackageSource -Name Chocolatey -Trusted #Instal programs Notepad,Plus fire, filcilla , sysinternals -Verbose -Force -ProviderName chocolatey #Adăugați calea la fișierele executabile (sysinternals) la PATH setx PATH "$env:path;C:\Chocolatey\bin" -m

Furnizorul descarcă în C:\Chocolatey\lib un pachet bazat pe scriptul chocolateyInstall.ps1. Descarcă programul de instalare de pe site-ul oficial în folderul %temp%\Chocolatey și îl rulează în modul de instalare silențioasă. Cel mai simplu exemplu este Notepad++.

Instalați-ChocolateyPackage „notepadplusplus” „exe” „/S” „https://notepad-plus-plus.org/repository/6.x/6.9/npp.6.9.Installer.exe”

Căutare program

Există multe programe în depozite, toate cele mai populare sunt cu siguranță acolo.

Găsiți pachetul „*zip*”,*commander*” -ProviderName Chocolatey

Dezinstalarea programelor

Totuși, odată cu eliminarea aplicațiilor, nu totul este atât de ușor.

Uninstall-Package -name filezilla

În mod ideal, dezinstalarea unui pachet ar trebui să elimine în tăcere programul, dar implementarea depinde de autorul pachetului și de capacitățile instalatorului. În practică, unele pachete nu conțin scripturi de dezinstalare, altele vin cu cârje sub formă de scripturi AutoHotkey, iar altele pur și simplu rulează dezinstalarea în mod interactiv, solicitându-vă să finalizați procesul manual. Cu toate acestea, dacă programul de instalare este MSI, dezinstalarea funcționează bine.

Link-uri legate de OneGet și instalarea silențioasă:

  • Ghid pas cu pas pentru instalarea programelor din PowerShell (Dmitry Bulanov)
  • Tipuri de instalatori și chei de instalare silențioasă (articolul meu din 2005 este destul de relevant :)
  • Site-ul de instalare automată Windows și forumul de instalare automată a software-ului

Discuție și sondaj

Pentru scripterii și administratorii de sistem experimentați, PowerShell 5.0 are alte caracteristici interesante (de exemplu, clase, prin analogie cu limbaje de programare orientate pe obiecte). Lista completă o puteți găsi pe această pagină TechNet (linkul duce intenționat la versiunea în limba engleză, deoarece versiunea în limba rusă nu conține încă informații despre 5.0).

Puteți marca fragmente de text care sunt interesante pentru dvs., care vor fi disponibile printr-un link unic în bara de adrese a browserului.

Despre autor

Evidențierea de sintaxă în PowerShell 5.0 este modulul PSReadLine implicit. În versiunile anterioare, îl puteți instala și înregistra ca descărcare în scriptul de profil (variabila $profile) sau îl puteți încărca singur atunci când este necesar

Import-modul psreadline

Este posibil mai detaliat despre instalarea silențioasă din scripturi? Nu cu mult timp în urmă am început să folosesc chocolatey, îmi place foarte mult, mai ales să actualizez toate programele cu o singură comandă. Până mi-am dat seama de instalarea silentioasă, am pus totul în modul manual, comandă-confirmare-instalare.

6yHTapb

Singurul lucru pentru care până acum aveam nevoie de PowerShell în win 10 este să ocolesc bug-ul cu butonul „proprietăți” care nu funcționează în setările de conexiune VPN. Set-VpnConnection -Name „Nume” -SplitTunneling $true.
Apropo, Vadim. Există vreo informație despre asta? Vorbim despre butonul din proprietățile conexiunii VPN - rețea - IP versiunea 4 - „proprietăți”. acolo, de obicei, puteți debifa caseta de selectare „utilizați gateway-ul în rețeaua de la distanță”. butonul în sine este activ, dar când este apăsat, nu se întâmplă nimic. Aici a fost util PowerShell.

Serghei Roșchin

Mulțumesc mult pentru Chocolatey
pe windows 7 am inteles ca functioneaza?

Lecron

Votând... folosesc aproape toate opțiunile. Unele dintre programe sunt portabile. Parte - instalată prin mânere de pe disc, pentru cei care știu să se actualizeze sau o revizuire serioasă a fost finalizată de mult. Dintre acestea, o parte din scenariu. Parte nouă. Piesa este deja preinstalată în imagine.
Din nou, clienții și sarcinile sunt diferite.

Despre PowerShell... Cred că Microsoft a ratat semnul cu numele. La prima vedere, nu este clar ce s-a întâmplat. Shell de comandă/procesor sau limbaj de programare de scripting. Cuvântul Shell îl sugerează pe primul, dar apoi este timpul, deoarece este atât de cool, să îl facem implicit sau cel puțin să îl promovăm ca principal. Dar cazurile reale de utilizare sunt mai sugestive pentru al doilea, înlocuirea WSH.

  • Lecron: dar atunci e timpul, din moment ce e atât de cool, să o faci implicit sau măcar să o promovezi ca principală.

    În Win + X, puteți înlocui CMD cu PS (proprietățile barei de activități - navigare). Și o promovează ca principală de multă vreme - de mult timp nu a existat nimic nou pe TechNet despre CMD, doar PS.

    Desigur, publicul țintă este profesioniștii IT, dar același lucru se poate spune despre CMD și WSH. Dar nu văd niciun rău pentru publicul țintă al blogului meu. Găsesc folosirea PS acasă și la serviciu și nu are legătură cu administrarea..

    • Lecron

      Nu vorbesc despre rău. Și despre neînțelegeri și erorile corespunzătoare.
      Ce este? Cum vede Microsoft? Procesorul de comenzi, care funcționează de obicei în interactiv modul, care este, de asemenea poate

      Lucrul interactiv într-o singură sintaxă și semantică și scrierea secvențelor de acțiuni în altele este ridicol. Aceasta este problema principală. Atât de profund încât nici măcar tu nu îl observi, deși ai menționat-o indirect în articol. Sintaxa mklink nu este mai simplă, ci mai familiară. De la New-Item, cu unificat sintaxă, vă permite să creați foarte, foarte multe lucruri. Și acum, de fapt, sintaxa sa este mai simplă decât cunoașterea multor utilitare individuale, inclusiv numele lor.

      Promisiunea ținută - iată un modul pentru gestionarea managerilor de pachete, mergeți mai departe.

      Neinteles. Ce este un „modul de management al managerului”?

        • Lecron

          Cred că acolo a scotocit câinele. în furnizori. Când nu există o abordare unică a gestionării pachetelor. De fapt, utilizatorul trebuie să cunoască și să ia în considerare care dintre furnizori este utilizat. Și nu numai pentru utilizatori, ci și pentru menținători.

          Caracteristica, ca de obicei, este axată pe organizații, iar MSI și MSU sunt acceptate la maximum.

          Lecron

          Poate că nu am înțeles toată profunzimea acestei caracteristici, motiv pentru care afirmații atât de stupide.
          Va avea nevoie utilizatorul de gesturi suplimentare dacă proprietarul depozitului/pachetului își schimbă furnizorii? Sau creatorul pachetului își va schimba setările? Sau managerul de pachete se ocupă de toate acestea?

          Hmm... iată o funcție - luați-o, încercați-o, înțelegeți-o - aceasta vă va ajuta să eliminați câteva întrebări. Există un furnizor, are pachete în depozit. Ați eliminat un anumit pachet? Atunci nu o veți putea descărca de la acel furnizor. Dar pachetul deja descărcat rămâne local, poate fi gestionat în continuare.

          Lecron

          Apropo, iată o altă întrebare. Există o comandă Update-Package sau chiar mai bine Update-AllPackage?

          Buna ziua. Spuneți-mi dacă este posibil să restabiliți boot-ul sau bios-ul și cum să o fac? Bootloader-ul Windows 7 pro s-a prăbușit. Am schimbat deja setările în boot, dar Windows nu vrea să pornească. Anterior, Windows 8.1 a fost prezentat în serviciu, au blocat Windows 7 pro fără acordul meu. Ajută la rezolvarea problemei!

Alexei

Am auzit des despre ciocolată, de când mi s-a adus aminte, am decis în sfârșit să o testez. rezultatul nu a fost deosebit de impresionant.

puneți masiv un set de software deja în picioare pe PC. doar aproximativ 70% au fost găsite în depozit.
keys -y -accept-license -f -x - Am fumat mana pentru doar câteva minute, poate nu am înțeles.
rezultat:
software pe care nu l-am cerut: autoIT, autohotkey. De ce?
a rulat versiunea veche a Acrobat Reader DC, cheat engine;
nu s-a putut descărca dropbox virtualbox;
modul silențios nu a funcționat viber, wireshark, aliaj ușor - a trebuit să bifez casetele și să dau clic mai departe;
Skype l-a eliminat pe cel vechi, dar nu l-a instalat pe cel nou.
iar unele dintre comenzile rapide nu au fost create, acum trebuie să vă amintiți care dintre ele.

Avertizări:
— Adobereader
- vedere la vânt
firefox
— notepadplusplus
- teamviewer

Nu inteleg care este eroarea aici.

pe un sistem curat în orice scenariu, va trebui să descărcați restul software-ului manual, sau să instalați unul care nu mai este suportat din arhivă.
plus rar, dar în unele locuri în timpul instalării trebuie să selectați anumite configurații - compoziția pachetelor etc. aici este implementat doar prin scripturi pentru fiecare produs, ceea ce nu economisește mult timp acasă. deoarece toate aceste opțiuni se pot schimba și se pot schimba de la o versiune la alta, trebuie să urmați și să rescrieți scripturile. nu suna foarte bine.
dacă ar putea scana registry și să-l adauge la baza de date sau la software-ul gui pentru selecție, ar fi mai ușor. în caz contrar, mai întâi trebuie să petreceți timp compilând o listă pentru instalare - pentru a fi sigur, am verificat fiecare produs pentru a indica numele corect al pachetului.

  • Serghei

    PS C:\Utilizatori\Gerald> Find-Package "*paint.net*" -ProviderName Chocolatey Nume Versiune Sursa Rezumat ---- ------- ------ ------- vopsea .net 4.0.6 chocolatey Paint.NET este un software de manipulare a imaginilor și a fotografiilor conceput pentru a fi utilizat pe computere care...

    Literal, astăzi, am dat peste Habrahabr pentru prima dată la menționarea Chocolatey și chiar acolo în lista ta de corespondență. S-a dovedit că asta este! M-am gândit că va fi un înlocuitor uimitor cu scripturi pentru instalarea automată a software-ului gratuit de la ninite.com, dar din păcate. Relevanța software-ului nu este acceptată la nivel paranoic, iar problemele sunt descrise de participanții de mai sus.

    Vitalia

    Cred că filozofia UNIX este mai bună pentru consolă:


    Scrieți programe care funcționează împreună.
    Scrieți programe care acceptă fluxuri de text deoarece este o interfață generică.

    • Vitaly, Windows include un utilitar de consolă pentru ZIP? Și acest lucru se face pentru a simplifica scripturile în PowerShell, nu este nevoie să intri în CMD, ajutor integrat etc.

      • Lecron

        Și de ce să urcăm în cmd, dacă ambele shell-uri și ambele trebuie să lanseze în mod independent fișierele executabile și să le gestioneze intrarea și ieșirea?
        Nu am nicio obiecție cu privire la includerea unei astfel de funcționalități, mai ales dacă este făcută cu înțelepciune, ca interfață cu zlib, și nu o altă umflare a bazei de cod - un lucru în explorator, altul în shell, un alt terț în cmd .

        Vitalia

        Nu, nu este inclus.
        Dar pe găzduirea mea, prima dată când am încercat să folosesc zip, am primit ceva de genul „zip nu este instalat. Instalați cu apt-get install zip".

        Urcă în cmd? S-a spus mai sus că PS ar trebui să ruleze binare.

        Referinţă? Pe Linux, comanda man %util_name% sau %util_name% -?, primul oferă un manual detaliat, al doilea ca o scurtă referință asupra parametrilor. Se pare că funcționează peste tot.

        În cele din urmă, shell-ul Linux este atât simplu, cât și puternic și există multe alternative pentru că nu este nimic complicat, doar rulează programe, gestionează fluxul de ieșire și interpretează cea mai simplă sintaxă.

        strafer

        Vadim Sterkin: Vitaliy, Windows include un utilitar de consolă pentru ZIP?

        Mi-e rușine să întreb: nu a fost mai ușor să-l adaugi decât să înregistrezi funcționalitatea încorporată?

  • Herz Mein

    > de ce shell, cu mijloace proprii de a lucra cu arhive

    Dacă există o astfel de oportunitate inerentă claselor .Net, atunci de ce să nu o folosești? Este doar o abordare diferită de bash sau cmd, care sunt interpreți de linie de comandă. CLI. Și PowerShell este mai degrabă un depanator pentru scripturi, IMHO.

    artem

    Lecron Ce este? Cum vede Microsoft? Procesorul de comenzi, care funcționează de obicei în interactiv modul, care este, de asemenea poate citiți comenzi dintr-un fișier numit script? Sau ca un limbaj de scripting care are propriul REPL? De acord, diferența este mare?

    Este clar că sarcinile sunt diferite. Dar nu văd niciun conflict între ei. Acestea. este foarte posibil să acoperiți ambele nevoi cu un singur instrument. Pentru asta se străduiește PowerShell. Unele lucruri merg bine, altele nu atât de bine. Dar viziunea este clară.

    artem

    Vadim Sterkin:
    Și l-au promovat ca principal de mult timp - nu a fost nimic nou despre CMD pe TechNet de mult timp, doar PS.

    În curând, cred. CMD (shell-ul în sine) este acum dezvoltat relativ activ. Deși înainte de asta timp de zece ani nu s-au atins deloc.

    artem

    Vitalia Scrieți programe care fac un lucru și îl fac bine.

    Nu văd contradicții. În PowerShell, fiecare cmdlet face un singur lucru (cu rare excepții). Cine spune că „Expand-Archive” poate arde DVD-uri sau poate prepara cafea – să-mi arunce primul cu piatra.

    Vitalia Scrieți programe care funcționează împreună.

    Aici, PowerShell face toate shell-urile pe care le cunosc, pentru că. operează pe obiecte, nu pe text. Acestea. „a lucra împreună” (trecerea datelor între cmdleturi) este mult mai eficient. Nu este nevoie să pierzi timpul analizând textul și încercând să explici următoarei echipe ce este exact acest text.

    Vitalia Scrieți programe care acceptă fluxuri de text deoarece este o interfață generică.

    Fluxurile sunt, de asemenea, acceptate. Și dacă este necesar să transferați testul, nu există probleme cu aceasta.

    Adică, PowerShell urmează destul de bine filozofia de mai sus.

    Vitalia De exemplu, de ce să introduceți PS „Crearea de conexiuni, legături simbolice și rigide” cu propria sa sintaxă, dacă există mklink? De ce există „Crearea și despachetarea arhivelor” dacă există zip și analogii săi?

    Da, deoarece cmdleturile indicate sunt „analogicul zip”. De fapt, a răspunde la această afirmație este foarte ușor. Trebuie doar să realizați că cmdleturile nu sunt caracteristici încorporate în shell, ci că sunt comenzi externe. Și totul cade imediat la loc. La urma urmei, este normal să avem comenzi pentru a efectua niște acțiuni, nu? Acest lucru este valabil pentru PowerShell, precum și pentru orice alt shell.

    Da, există un număr mic de cmdlet-uri care vin cu shell-ul implicit. Dar din punct de vedere ideologic, ele nu sunt diferite de acele cmdleturi care apar separat la instalarea componentelor Windows corespunzătoare sau sunt furnizate complet de dezvoltatori terți.

    • Lecron

      artem: La urma urmei, este normal să avem comenzi pentru a efectua niște acțiuni, nu? Acest lucru este valabil pentru PowerShell, precum și pentru orice alt shell.

      Shell - cât de mult în acest cuvânt ... a început să se distorsioneze sub influența MS.
      Tot timpul m-am gândit că comenzile nu depind de mediul de lansare, iar comenzile încorporate în mediu sunt necesare doar pentru a servi capacitățile mediului însuși, și nu obiecte terțe. A greșit?
      Din acest punct de vedere, PS începe să semene cu ACDSee și Nero.

      Vitalia

      Aici, PowerShell face toate shell-urile pe care le cunosc, pentru că. operează pe obiecte, nu pe text. Acestea. „a lucra împreună” (trecerea datelor între cmdleturi) este mult mai eficient.

      Mă îndoiesc că toate utilitarele terțe suportă aceleași obiecte. Dar textul este susținut de orice utilitar care funcționează pe linia de comandă.

      Trebuie doar să realizați că cmdleturile nu sunt caracteristici încorporate în shell, ci că sunt comenzi externe. Și

      Atunci de ce aceste cmdleturi au propria lor sintaxă? Ei bine, nu se pare că acestea sunt comenzi externe.

      • artem

        Vitalia: Mă îndoiesc că toate utilitarele terțe suportă aceleași obiecte.

        Utilități terță parte - nu, desigur. Dar cmdleturile terță parte sunt ușoare. Aș spune că 80 la sută din cmdleturile terță parte funcționează destul de bine cu obiecte.

        Dacă nu există nicio cmdlet și trebuie să rulați utilitarul (fișier executabil), atunci, desigur, trebuie să îl introduceți text ca intrare. Dar textul este ușor de obținut de la obiect (prin extinderea proprietății dorite, de exemplu). Înțeleg că acest lucru sună abstrus, dar după ce am câștigat o masă critică de experiență, se dovedește a fi complet intuitiv.

        Vitalia: Atunci de ce aceste cmdleturi au propria lor sintaxă? Ei bine, nu se pare că acestea sunt comenzi externe.

        Nu pot decât să fiu de acord cu asta. „Nu pare” este cuvântul potrivit :)

        După cum am spus mai sus, PowerShell este nevoie de puțin pentru a se obișnui. Și acum voi spune ceva urât față de evangheliștii noștri și MVP, dar abuzul de aliasuri (dir în loc de Get-ChildItem, md în loc de New-Item -ItemType „Directory”, semn procentual în loc de Foreach-Object sau întrebare în loc de Where-Object și așa mai departe, și, de asemenea, săriți peste numele parametrilor când funcționează implicit) nu fac decât să încurce persoanele nepregătite. Din această cauză, printre altele, „dependența” mea de PowerShell a durat ani de zile. Mi se pare că dacă toate exemplele de comenzi publicate pe bloguri și forumuri ar conține sintaxa completă, atunci începătorii ar experimenta mult mai puține dureri anale.

    De fapt, folosesc 2 opțiuni: implementarea unui backup făcut imediat după configurarea sistemului, sau instalarea propriei mele versiuni de Windows 7, unde includ toate setările și programele necesare.
    Și cu Win10, managerul de pachete nu l-a stăpânit încă, deși prezența lui provoacă un mare entuziasm.
    Obișnuiam să mă joc cu diferiți manageri de pachete sub Windows, dar dintr-un motiv sau altul, toate erau incomode tocmai în ceea ce privește „timp de învățare” / „timp de descărcare manuală”. S-a dovedit a fi mai ușor să-ți faci propriul ansamblu decât să sculptezi scenarii.

    Evgheni Kazantsev

    O întreprindere minunată, am văzut cum să instalez un pachet de prog-uri necesare cu un singur script, am folosit ninite, nu am fost deosebit de impresionat, acum folosesc WPI descărcat de pe torrente, plus că sunt multe altele și auto-instalare reală, minus că trebuie să ai încredere în autorul repack-ului.
    Nu am înțeles un lucru, cum să ACTUALIZEZ programele instalate complet automat, care este caracteristica de bază principală a oricărui manager de pachete? Cum să faci ca același notepad ++ să se înregistreze automat ca aplicație implicită, fără a intra în setări teribil de incomode „nou, sunt moderne”? Cum funcționează sistemul de dependență și este acolo?

    Și dacă îl aranjați ca un script sau o funcție? De exemplu, așa (fără a verifica existența și fără a se converti în căi complete, ceea ce este necesar):

    Param ( $create, $extract, $path, $zip) add-type -assembly system.io.compression.filesystem function create-zip ($path, $zip) ( ::createfromdirectory($path, $zip) ) extract-zip ($zip, $cale) ( ::extracttodirectory($zip, $cale) ) if ($create) (create-zip $cale $zip ) if ($extract) ( extract-zip $zip $cale )

    Sunați în consecință:

    .\test -c -p "C:\Some\Folder" -z "D:\Folder\out.zip" # Pentru a crea .\test -e -p "C:\Some\Folder" -z "D: \Folder\out.zip" # Pentru a extrage

    • Care este decorul aici? Folosești clase .NET direct în funcția ta. Cmdletul elimină necesitatea de a face referire la clase. Aceasta este diferența. Cam la fel ca între un programator și un specialist IT.

      artem

      Troleibuz dintr-o pâine.jpg

      După cum am înțeles, nimeni nu se ceartă cu faptul că funcțiile pot face orice :) Avantajul, evident, este că acum nu mai trebuie să scrieți o funcție separată special pentru această acțiune. Aceasta înseamnă că, în primul rând, va fi mai ușor pentru oameni să-l folosească (mai ales dacă nu știu să scrie funcții sau nu își permit să le importe de fiecare dată), iar în al doilea rând, va exista mai multă standardizare. Aceasta este o binecuvântare de netăgăduit. De acord, este o prostie când în cinci scripturi de la cinci autori diferiți trebuie să despachetezi arhive și toată lumea rezolvă această problemă puțin diferit. (De exemplu, la un moment dat o variantă prin obiectul Windows Explorer nedocumentat com era populară).

    lesha

    Lucrez pe Windows și Mac, iar dacă am configurat un server, atunci Linux. OS X a fost complet reinstalat de câteva ori, dar totul este simplu acolo - am ales data în TimeMachine 10-15 minute și sistemul este gata.
    Pe Windows am majoritatea programelor portabile, instalez doar chrome, in rest nici pachetul de software Adobe nu este actualizat, asa ca din versiunea CC se descarca prin Cretive Cloud. Nu văd rostul de a îngrădi o grădină cu automatizare. PowerShell ar putea fi frumos, dar nu am nimic de automatizat pe Windows, iar pentru Linux și OS X există bash, pe care îl folosesc de mult timp.
    Dacă un prieten întreabă „reinstalează Windu pentru mine, altfel ceva este defect”, instalez sistemul de pe o unitate externă în modul meu „proprietar” și las restul să se stabilească singur.

  • Aproape toți administratorii sunt familiarizați cu Windows PowerShell în zilele noastre. Mulți l-au descărcat, au experimentat cu el și au rezolvat sarcini non-standard care sunt uneori efectuate în shell-ul de comandă Windows prin cmd.exe. Cu toate acestea, PowerShell este mult mai mult decât un shell de comandă asemănător DOS. Este un mediu de linie de comandă și de scriptare construit pe Microsoft .NET Common Language Runtime (CLR) și .NET Framework. În PowerShell, lucrați cu obiecte .NET. Structurile de foldere pe care le vedeți sau serviciile pe care le accesați sunt în esență instanțe ale obiectelor care reprezintă acele foldere și servicii; aceasta este diferența dintre produsul în cauză și alte shell-uri de comandă care sunt capabile doar să proceseze texte. Astfel, PowerShell este mult mai puternic și mai eficient decât shell-urile de comandă tradiționale.

    Pentru a ajuta cititorii să profite din plin de acest instrument, am pregătit o serie de articole care explică cum să efectuați diverse sarcini folosind PowerShell. În prima „lecție” voi vorbi despre cum să începeți să utilizați PowerShell și cum să executați comenzile de bază. De asemenea, voi explica cum să obțineți ajutor în PowerShell la crearea acestor comenzi și cum să utilizați aliasuri în comenzi.

    Primii pasi

    PowerShell nu este livrat cu Windows în acest moment, dar asta se va schimba cu Windows Server 2008. Link-uri către resurse de unde puteți descărca PowerShell și informații despre shell sunt disponibile pe pagina Web Windows PowerShell (www.microsoft.com/powershell). Trebuie să aveți instalat .NET Framework 2.0 pe sistemul dumneavoastră înainte de a putea descărca PowerShell. Procesul de instalare PowerShell este rapid și ușor. Trebuie doar să vă asigurați că versiunea de PowerShell pe care o instalați este compatibilă cu sistemul dvs. de operare. Microsoft lansează versiuni pentru Windows Server 2008 beta 3, Windows Vista, Windows XP SP2 și Windows Server 2003. Am folosit versiunea PowerShell pentru Windows XP pentru acest articol.

    Odată ce instalarea PowerShell este finalizată, puteți începe imediat. Pentru a porni PowerShell, selectați Toate programele din meniul Start, apoi selectați Windows PowerShell 1.0 și Windows PowerShell. Când apare fereastra PowerShell, promptul de comandă afișează folderul de lucru curent (pe sistemul meu, este directorul C). Acum puteți începe să scrieți și să executați comenzile PowerShell.

    Lucrul cu echipe

    Dezvoltatorii PowerShell au echipat acest shell cu un limbaj de scripting special construit conform standardului .NET Framework. Comanda PowerShell, cmdlet este similară cu o funcție prin faptul că efectuează o anumită sarcină, cum ar fi preluarea conținutului unui folder sau actualizarea unei intrări de registry.

    Există peste 100 de comenzi încorporate în shell-ul PowerShell. Puteți crea comenzi suplimentare, dar trebuie să utilizați un limbaj standard .NET, cum ar fi Visual Basic .NET sau C#. Articolele PowerShell vor acoperi doar comenzile încorporate. Fiecare opțiune de comandă este o combinație verb-substantiv; acest lucru se datorează faptului că Microsoft a dorit să utilizeze o schemă de denumire consecventă pentru a facilita învățarea și extinderea PowerShell. Verbul indică acțiunea care trebuie efectuată, iar substantivul indică tipul de obiect către care va fi direcționată acțiunea. De exemplu, comanda Get-ChildItem citește o listă de articole din directorul sau containerul de lucru curent, cum ar fi registry. Pentru a rula o comandă, trebuie să o introduceți la linia de comandă PowerShell și să apăsați Enter. Rezultatele sunt afișate sub linia de comandă. Acesta este tot ce trebuie să știți despre executarea comenzilor elementare.

    Probabil că nu în toate cazurile se știe dacă există o comandă pentru rezolvarea sarcinii de efectuat și uneori este dificil să păstrezi în memorie numele unei anumite comenzi. O listă cu toate comenzile poate fi vizualizată rulând comanda Get-Command. Ecranul 1 arată o parte din această listă; acolo puteți vedea numele și sintaxa comenzilor, dar nu o descriere a ceea ce face exact comanda corespunzătoare. Puteți utiliza comanda Get-Help pentru a obține aceste informații.

    Comenzi pentru a obține ajutor

    PowerShell este livrat cu un set de fișiere de ajutor pe care utilizatorul le poate accesa direct din fereastra de comandă PowerShell folosind comanda Get-Help. Pentru a obține informații de ajutor despre o anumită comandă, utilizați comanda Get-Help cu parametrul -name. Acest parametru este urmat de numele comenzii pentru care doriți să obțineți informații. La fel ca opțiunile de comandă a procesorului cmd.exe, opțiunile de comandă PowerShell oferă informațiile de care comenzile au nevoie pentru a-și face treaba. Dar, spre deosebire de opțiunile de comandă cmd.exe (care pot începe cu o cratimă, o bară oblică sau niciun caracter principal), opțiunile de comandă PowerShell încep întotdeauna cu o cratimă, confirmând și mai mult coerența schemei de denumire PowerShell.

    Acum să vedem cum funcționează totul. Să ne uităm la un exemplu. Una dintre sarcinile tipice ale unui administrator de sistem este să citească fișierele text. După ce ați revizuit lista de comenzi furnizată de comanda Get-Command, ajungeți la concluzia că comanda Get-Content poate îndeplini această sarcină, dar nu sunteți sigur. Pentru a afișa informații de ajutor despre comanda Get-Content, rulați următoarea comandă:

    Get-Help -name Get-Content

    După cum arată figura 2, această comandă returnează o descriere a comenzii și informații despre sintaxă. Comanda returnează conținutul elementului, care în acest caz indică orice tip de fișier din sistem. În trecut, un administrator ar fi trebuit să folosească comanda For pentru a lucra cu fișiere batch sau cu un File-SystemObject într-un script Windows Script Host (WSH), dar într-un mediu PowerShell, trebuie pur și simplu să rulați comanda Get-Content . Pentru a obține informații mai detaliate despre sintaxă, trebuie să adăugați opțiunea -full la comandă.

    Get-Help -name Get-Content -full

    Rețineți că opțiunea -full nu ia o valoare corespunzătoare. Parametrii de acest tip se numesc parametri de comutare, deoarece par să schimbe comportamentul comenzilor.

    Figura 3 prezintă unele dintre informațiile returnate de această comandă. Administratorul va trebui să deruleze fereastra de pe computerul său sau să o redimensioneze astfel încât să poată fi vizualizat tot conținutul. Secțiunea PARAMETRI conține informațiile necesare pentru a include parametrii într-o comandă. Observați cele două categorii importante de informații pentru fiecare parametru: Necesar și Poziție.

    Informațiile din categoria Necesar indică dacă parametrul este obligatoriu sau opțional. Când variabila obligatorie este setată la adevărat, parametrul trebuie inclus în comandă. Dacă variabila Required este setată la false, acest parametru este opțional.

    Valoarea categoriei Poziție vă permite să judecați dacă parametrului ar trebui să i se dea un nume sau dacă se poate face referire prin poziția sa. Când variabila Poziție este setată la named, rezultă că atunci când vă referiți la acest parametru, trebuie să specificați numele acestuia. Când valoarea variabilei Poziție este exprimată ca număr, parametrul poate fi referit prin numele său sau pur și simplu i se poate da valoarea parametrului în poziția corectă.

    De exemplu, după cum arată Figura 3, comanda Get-Content necesită specificarea parametrului -path. Cu toate acestea, valoarea acestui parametru poate fi specificată în prima poziție fără a introduce numele parametrului, ca în exemplul următor:

    Get-Content c:sample.txt

    Dacă valoarea parametrului conține spații, valoarea trebuie să fie cuprinsă între ghilimele.

    În secțiunea PARAMETRI, numele fiecărui parametru este urmat de informații incluse între paranteze unghiulare (). Aceste informații indică tipul de date care ar trebui să fie valoarea parametrului. După cum arată Figura 3, valoarea parametrului -path trebuie să fie un șir. Dacă un șir de cuvinte este urmat de un set de paranteze (), aceasta înseamnă că o matrice de șiruri poate fi utilizată ca valoare a parametrului.

    În cazul utilizării parametrilor comutatorului care nu iau valori, datele vor fi de tip citit. Cu acest tip de date, de exemplu, este definit parametrul -force al comenzii Get-Content. Această opțiune elimină restricțiile care ar putea împiedica executarea comenzii. Anularea are loc numai atunci când parametrul este inclus în comandă.

    O altă caracteristică PowerShell legată de parametri de reținut este caracteristica de completare automată a numelui parametrului. Utilizatorul trebuie doar să introducă suficiente litere pentru a alcătui numele parametrului, astfel încât să poată fi distins de alți parametri. Da, echipa

    Get-Content c:sample.txt -force

    este echivalent cu comanda

    Get-Content c:sample.txt -fo

    Pe lângă furnizarea de informații despre parametrii necesari pentru a construi comenzi, fișierul de ajutor pentru comanda Get-Content include exemple care ilustrează utilizarea comenzii, sfaturi utile în secțiunea Note și resurse pentru mai multe informații. Este plăcut să rețineți că fișierele de ajutor sunt furnizate pentru toate comenzile - există chiar fișiere de ajutor pentru concepte generale.

    Obține ajutor cu concepte

    PowerShell vine cu un set de fișiere de ajutor care oferă o prezentare generală a diferitelor concepte. Fiecare fișier începe cu caracterele „about_” și se termină cu un nume de secțiune. Pentru a vizualiza o listă alfabetică a secțiunilor despre, executați comanda

    Pentru a vizualiza informații despre un anumit subiect, includeți pur și simplu numele complet al subiectului în valoarea parametrului. De exemplu, pentru a citi un fișier despre controlul fluxului de date, trebuie să executați comanda

    Obțineți ajutor despre_controlul_fluxului

    Figura 4 prezintă unele dintre datele care pot fi obținute ca rezultat. După cum putem vedea, fișierul conține o prezentare generală a pașilor implicați în implementarea controlului fluxului de date în scripturile PowerShell.

    Folosind aliasuri

    Unele nume de comenzi pot fi destul de lungi, ceea ce poate fi enervant dacă trebuie să tastați comenzi de la tastatură din nou și din nou. Din fericire, dezvoltatorii PowerShell au oferit posibilitatea de a folosi aliasuri pentru a se referi la comenzi. Un alias este un nume alternativ care este de obicei mult mai scurt decât numele real al comenzii. PowerShell include o serie de aliasuri încorporate, pe lângă care utilizatorii își pot crea propriile aliasuri.

    Pentru a vedea aliasurile disponibile în sesiunea curentă, executați comanda Get-Alias ​​​​. Sesiunea curentă se referă la conexiunea curentă la procesorul PowerShell. Când pornește PowerShell, utilizatorul începe o nouă sesiune; această sesiune continuă până când utilizatorul închide PowerShell, terminând conexiunea. Pe lângă toate aliasurile încorporate și comenzile asociate acestora, Get-Alias ​​​​afișează toate aliasurile create în timpul sesiunii curente, precum și aliasurile setate în profiluri, care sunt setări de configurare definite de utilizator care sunt încărcate în PowerShell de fiecare dată când shell este pornit. Ne vom uita la profiluri într-unul dintre articolele următoare.

    Dacă doriți să vedeți aliasurile asociate cu o anumită comandă, definiți mai precis comanda Get-Alias ​​​​. De exemplu, pentru a vedea aliasurile asociate cu Get-ChildItem, executați comanda

    Get-Alias ​​​​|
    Unde-Obiect($_.definiție `
    --match „Get-ChildItem”)

    Această comandă include mai multe elemente, pe care le voi acoperi în detaliu în lecțiile următoare. Deocamdată, tot ce trebuie să știți este că rezultatul comenzii Get-Alias ​​este direcționat către comanda Where-Object, care filtrează orice rezultate care nu se potrivesc cu Get-ChildItem. Dacă doriți să vedeți aliasurile atribuite unei alte comenzi, înlocuiți numele Get-ChildItem cu numele acelei comenzi.

    După cum arată figura 5, PowerShell include trei alias-uri pentru apelarea comenzii Get-ChildItem, gci, ls și dir. Oricare dintre acestea poate fi folosit în locul numelui comenzii. Astfel, fiecare dintre următoarele patru comenzi listează conținutul directorului C:Windows:

    Get-ChildItem c:windows
    dir c:windows
    ls c:windows
    gci c:windows

    Pentru a crea un alias în cadrul sesiunii curente, utilizați comanda Set-Alias ​​​​. De exemplu, pentru a crea un alias cnt pentru a accesa Get-Content, executați comanda

    Set-Alias ​​​​cnt Get-Content

    După aceea, ori de câte ori trebuie să rulați comanda Get-Content, puteți utiliza aliasul cnt. Acest alias poate fi folosit până la sfârșitul sesiunii (adică până la închiderea shell-ului PowerShell). Rețineți că atunci când definiți un alias, nu există nicio opțiune de includere a parametrilor; poate fi folosit doar numele comenzii. Dacă doriți să definiți o referință la o comandă și parametrii acesteia, trebuie să creați o funcție specială.

    perspective

    Deci, în prima lecție, v-am prezentat componentele fundamentale necesare pentru a începe explorarea și utilizarea comenzilor PowerShell, care constau din una sau mai multe comenzi. În articolele viitoare, vă voi arăta cum să utilizați aceste comenzi, precum și cum să creați scripturi care profită din plin de caracteristicile PowerShell. Pentru moment, începeți să lucrați cu comenzi. Utilizați fișierul de ajutor PowerShell pentru a crea comenzi și a învăța concepte individuale. Experimentați cu diferite opțiuni și învățați cum să creați și să utilizați aliasuri. Nu va trece mult până când veți fi gata să utilizați PowerShell în sarcinile zilnice.

    Robert Sheldon ([email protected]) este consultant tehnic și autor a numeroase cărți despre tehnologiile și bazele de date Microsoft Windows.

    Este posibil ca utilizatorii experimentați ai sistemului de operare Windows 10 să fi auzit de utilitarul pentru linia de comandă PowerShell. Poate fi familiar și celor cu experiență cu Windows 7 și 8.1. După ani de utilizare a aplicației de linie de comandă Windows și a fișierelor .bat, este timpul să cunoaștem un instrument mai puternic.

    PowerShell este un plus valoros la lista de instrumente Windows, iar amploarea sa mare poate deranja unii utilizatori. Este un limbaj de scripting sau un shell de comandă? Nu vă faceți griji: în ciuda posibilităților vaste, oricine poate stăpâni PowerShell.

    Pasul 1: Instalare

    În primul rând, avem nevoie de utilitarul PowerShell în sine. Dacă rulați Windows 10, aveți deja instalat PowerShell 5. Actualizarea Windows 10 Anniversary folosește versiunea 5.1, dar nu există nicio diferență vizibilă. Windows 8 și 8.1 folosesc PowerShell 4, care este, de asemenea, suficient. Instalarea PowerShell pe Windows 7 nu va fi o problemă, dar mai sunt câțiva pași suplimentari de urmat. În special, trebuie să instalați suplimentar .Net Framework. Puteți instala Windows Management Framework, care include PowerShell.

    PowerShell are două interfețe. Utilizatorii avansați pot opta pentru o interfață grafică completă cunoscută sub numele de Integrated Scripting Environment (ISE). Pentru începători, cel mai bine este să utilizați consola PowerShell, o interfață text simplă în stil linie de comandă Windows sau chiar DOS 3.2.

    Pentru a rula PowerShell ca administrator pe Windows 10, faceți clic pe butonul Start și derulați prin lista de aplicații la Windows PowerShell. În Windows 8.1, căutați Windows PowerShell în folderul System din Windows. În Windows 7, shell-ul se află în folderul Accesorii. Ca utilizator obișnuit, PowerShell poate fi lansat exact în același mod, folosind butonul stâng al mouse-ului în loc de cel drept.

    Puteți utiliza căutarea pe orice versiune de Windows. Pentru ușurință în utilizare, puteți fixa PowerShell în bara de activități.

    Pasul 2: Comenzi vechi Windows

    Sintaxa comenzii Windows în PowerShell funcționează în mod obișnuit. De exemplu, CD modifică folderele, dir afișează o listă cu toate fișierele și folderele din dosarul curent.

    În funcție de modul în care porniți consola PowerShell, puteți începe de la c:\Windows\system32 sau în c :\Utilizatori\ . Exemplul din captura de ecran folosește comanda CD..(cu un spațiu) pentru a urca câte un nivel, apoi rulați comanda dir pentru a afișa o listă de fișiere și foldere dintr-un director C:\.

    Pasul 3: Instalarea fișierelor de ajutor

    Comenzi ca CDși dir nu sunt comenzi PowerShell active. Acestea sunt așa-numitele aliasuri (alias-uri) - înlocuitori pentru comenzile reale PowerShell. Aliasurile sunt utile pentru cei cu multă experiență cu linia de comandă. Cu toate acestea, ele nu ating adâncimea PowerShell.

    Pentru a începe cu PowerShell, tastați Ajutorși comanda de care aveți nevoie. Captura de ecran arată comanda .

    Echipă Ajutor spune ca dir este un alias pentru o comandă PowerShell Get-ChildItem. Dacă formați get-childitemîn PS C:\>, veți vedea la fel ca atunci când utilizați comanda dir.

    După cum se indică în partea de jos a capturii de ecran, fișierele de ajutor pentru PowerShell nu sunt instalate automat. Pentru a le obține, rulați PowerShell ca administrator și tastați update-help. Instalarea fișierelor de ajutor va dura câteva minute, este posibil să lipsească un număr de module - de exemplu, Help for NetWNV și SecureBoot nu au fost instalate în acest caz. Când totul este gata, sistemul complet de ajutor va oferi întotdeauna sfaturile potrivite.

    Acum tastați comanda obține ajutorși orice comandă de care sunteți interesat ("cmdlet" în limba PowerShell, în cmdlet-uri ruse), va fi afișată descrierea acesteia. De exemplu, get-help get-childitem oferă o listă de opțiuni get-childitem. De asemenea, puteți afișa diferite opțiuni posibile. De exemplu

    get-help get-childitem -exemple

    produce șapte exemple detaliate de utilizare get-childitem. Echipă

    get-help get-childitem -detaliat

    include aceste șapte exemple și explicații detaliate ale fiecărui parametru din cmdlet get-childitem.

    Pasul 4: Obțineți ajutor pentru setări

    Pe captură de ecran este posibil să fi observat două liste mai jos SINTAXĂ pentru get-childitem. Având două sintaxe diferite înseamnă că puteți folosi două moduri de a rula un cmdlet. Cum să păstrăm sintaxa separată una de cealaltă și ce înseamnă parametrii? Răspunsul este simplu dacă știi trucul.

    Pentru detalii despre parametrii cmdlet-ului get-childitem sau orice alt parametru de utilizare -deplin:

    get-help get-childitem -full

    Aceasta oferă o listă cu ceea ce puteți face cu cmdletul și ce se va întâmpla. Uită-te la captura de ecran.

    Vizualizarea descrierii parametrilor vă permite să observați acest lucru get-childitem face posibilă obținerea unui obiect copil(cum ar fi un nume de subdosar sau un nume de fișier) în locația specificată, cu sau fără potrivirea anumitor caractere. De exemplu:

    get-childItem „*.txt” -recurse

    returnează o listă de fișiere „*.txt” din folderul curent și toate subfolderele (datorită -recurs). Întrucât

    get-childitem „HKLM:\Software”

    returnează o listă cu toate cheile de registry de nivel superior în HKEY_LOCAL_MACHINE\Software.

    Dacă ați încercat vreodată să intrați în registry folosind linia de comandă Windows sau fișierele .bat, veți putea aprecia funcționalitatea acestei opțiuni de acces.

    Pasul 5: Învățarea numelor

    Există un motiv pentru care cmdleturile afișate până acum arată similare: get-childitem, update-help, get-help folosiți același model verb-substantiv. Această convenție se aplică tuturor cmdlet-urilor PowerShell în care verbul vine înaintea substantivului unic. Acest lucru îi va atrage pe cei care au suferit la un moment dat de inconsecvența numelor de comandă în VB și VBA.

    Aruncă o privire la cele mai comune cmdleturi:

    setați locația: setează locația curentă de lucru într-o anumită locație

    obţine-conţinut: obțineți conținutul fișierului

    obţine-element: obțineți fișiere și foldere

    element de copiere: copiază un obiect dintr-o locație în alta

    eliminare-articol: șterge fișiere și foldere

    : Primește procesele care rulează pe computerul local sau la distanță

    obțineți serviciul: Primește serviciile care rulează pe computerul local sau la distanță

    invoke-webrequest: primește conținut dintr-o pagină web de pe internet

    Pentru a vedea cum funcționează un anumit cmdlet, utilizați obține ajutor ca în cazul

    get-help copy-item -full

    Pe baza descrierii din ajutor, puteți înțelege de ce are nevoie cmdletul. De exemplu, dacă doriți să copiați toate fișierele și folderele din Documenteîn c:\temp, utilizare

    element de copiere c:\users\ \documents\* c:\temp

    Introducând această comandă, veți vedea câteva caracteristici interesante ale mediului PowerShell. De exemplu, dacă tastați copie-iși apăsați butonul Tab, PowerShell se va umple Copiați elementul. Dacă un cmdlet este scris greșit și PowerShell nu îl poate recunoaște, se oferă o descriere completă a ceea ce a mers prost.

    Încercați acest cmdlet:

    invoke-webrequest askwoody.com

    Veți primi o listă scurtă de titluri, imagini, link-uri și alte conținuturi ale paginii web. Fi atent la obține ajutor la listă invoke-webrequest, care „returnează o colecție de formulare, linkuri, imagini și alte elemente HTML importante” - exact ceea ce ar trebui să fie afișat pe ecran.

    Unele cmdleturi ajută la gestionarea PowerShell în sine:

    obţine-comandă: lista tuturor cmdlet-urilor disponibile

    obţine-verb: lista tuturor verbelor disponibile

    limpede-gazdă: Ștergeți ecranul programului gazdă

    Parametrii diferiți vă permit să reduceți comenzile și să restrângeți gama de opțiuni utile. De exemplu, pentru a vedea o listă cu toate cmdleturile care funcționează cu serviciile Windows, tastați

    get-command *-service

    Vor fi afișate toate verbele disponibile cu un substantiv serviciu. Iată lista lor:

    Obțineți service

    Serviciu nou

    Reporniți serviciul

    Reluați serviciul

    Set Service

    pornire-serviciu

    Opriți serviciul

    Suspendați serviciul

    Puteți combina aceste cmdleturi cu altele.

    Pasul 6: Utilizarea țevilor

    Dacă sunteți familiarizat cu linia de comandă Windows sau cu fișierele batch, atunci știți despre redirecționare și conducte. Redirecționarea (simbolul >) și conductele (simbolul |) preiau rezultatul unei acțiuni și îl atașează în altă parte. De exemplu, puteți redirecționa rezultatul unei comenzi dirîntr-un fișier text sau transmiteți rezultatul comenzii ping la echipa găsi pentru a filtra rezultate interesante, cum ar fi

    dir > temp.txt

    ping askwoody.com | găsiți „pachete” > temp2.txt

    Aici, în echipa a doua găsi caută o sfoară pachete, preluat de la adresa askwoody.com prin comandă pingși îmbină toate liniile care se potrivesc într-un fișier numit temp2.txt.

    Prima dintre aceste comenzi funcționează bine în PowerShell. Pentru a rula a doua comandă, aveți nevoie de ceva de genul

    ping askwoody.com | selectați pachete de șiruri | out-file temp2.txt

    Utilizarea redirecționării și a conductelor extinde foarte mult capacitățile liniei de comandă Windows: în loc să derulați la nesfârșit ecranul în căutarea unui șir de text, puteți filtra comenzile Windows dorite.

    Powershell are suport teavași nu se limitează la text. PowerShell vă permite să treceți un întreg obiect de la un cmdlet la altul, unde obiectul este o combinație de date (numite proprietăți) și acțiuni (metode) care pot folosi acele date.

    Partea dificilă începe când obiectele sunt aliniate. Obiectele furnizate de un cmdlet trebuie să se potrivească cu tipul de obiecte acceptate de cmdlet-ul primitor. Textul este un tip de obiect foarte simplu, așa că dacă lucrați cu text, alinierea obiectelor este o sarcină simplă. Alte obiecte nu sunt atât de elementare.

    Cum să-l înțelegi? Utilizați cmdlet obţine-membru. Dacă doriți să știți prin ce tip de obiect se ocupă un cmdlet, rulați-l obţine-membru. De exemplu, dacă încercați să înțelegeți procesele care rulează pe un computer și ați restrâns opțiunile la cmdleturi , iată cum să cunoașteți rezultatul cmdlet-urilor:

    obține procesul | obţine-membru

    Rularea acestui cmdlet produce o listă lungă de proprietăți și metode pentru , dar chiar la începutul listei puteți vedea tipul de obiect care creează :

    TypeName: System.Diagnostics.Process

    Captura de ecran de mai jos arată și proprietățile intitulat get-process Handle, Nume, NPM, PM, SI, VMși WS.

    Dacă doriți să manipulați rezultatul pentru a lucra cu acest cmdlet (în loc să afișați o listă lungă de procese active pe monitor), trebuie să găsiți o altă comandă care să ia ca intrare Sistem.Diagnosticare.Proces. Utilizați din nou PowerShell pentru a găsi cmdletul potrivit:

    get-command -Parametertype System.Diagnostics.Process

    Acest cmdlet produce o listă de cmdleturi care pot fi procesate Sistem.Diagnosticare.Proces.

    Unele cmdleturi sunt cunoscute pentru că acceptă aproape orice tip de date. Principalul dintre ei este . Acest cmdlet trece prin el însuși fiecare obiect trimis prin conductă, unul câte unul și îi aplică criteriile de selecție specificate. Există un marker special numit $_ , care vă permite să utilizați fiecare articol din conductă, unul câte unul.

    Să presupunem că doriți să obțineți o listă cu toate procesele care rulează pe computer cu numele „svchost”, adică doriți să potriviți proprietatea Nume proces svchost. Utilizați comanda:

    obține procesul | unde-obiect ($_.Name -eq „svchost”)

    Cmdlet privind fiecare obiect Sistem.Diagnosticare.Proces, compară .Nume acest obiect cu „svchost”; dacă există potriviri, acestea sunt afișate pe monitor. Uită-te la captura de ecran.

    Pasul 7: Analizați comenzile PowerShell utile

    Până acum, știți deja suficient pentru a putea deteriora computerul, așa că aveți grijă. Să vedem, de exemplu, comenzile PowerShell solicitate frecvent.

    Aceste comenzi funcționează numai pe Windows 10 și numai atunci când rulează PowerShell ca administrator. Sunt concepute pentru a reinstala aplicațiile Windows 10 preinstalate și pot fi utile celor care au dezinstalat mai întâi aceste programe și apoi au decis să le returneze. Comenzile arată astfel:

    Get-AppXPackage | Foreach (Add-AppxPackage -DisableDevelopmentMode -Înregistrați „$($_.InstallLocation)\AppXManifest.xml”)

    Dacă executați această comandă, ignorați avertismentele indicate în roșu, iar când comanda este finalizată, reporniți computerul; toate programele preinstalate în Windows 10 vor apărea la locul lor.

    Iată cum funcționează această comandă. Get-AppXPackage verifică toate pachetele de aplicații din profilul utilizatorului. Chiar dacă dezinstalați o aplicație, aceasta rămâne în lista de profil a utilizatorului.

    Cmdlet Get-AppXPackage returnează un obiect TypeName Microsoft.Windows.Appx.PackageManager.Commands.AppxPackage, care include numele complet calificat al pachetului de aplicație și locația fișierului manifest XML corespunzător. Dacă rulați cmdletul get-appxpackage, veți vedea o listă lungă de pachete de aplicații. Captura de ecran arată o descriere a aplicației Xbox.

    Cmdlet Pentru fiecare circulă prin fiecare obiect în AppXPackage, trimițându-le la cmdlet Add-AppxPackage. Conform obține ajutor pentru Add-AppxPackage, există două comutatoare cu cheie:

    • Intrerupator -Inregistreaza-te utilizat pentru a înregistra instalările existente de pachete de aplicații, puteți seta opțiuni Dezactivați modul de dezvoltareși Inregistreaza-te
    • Intrerupator -Dezactivați modul de dezvoltare spune Windows să reînregistreze un pachet de aplicații existent care a fost dezactivat, neînregistrat sau corupt.

    linia " $($_.InstallLocation)\AppXManifest.x ml" descrie unde se află fișierul manifest.xml. Dacă te uiți la fișiere AppXManifest.xml, veți vedea o listă complexă de ID-uri de aplicație, executabile și un număr mare de elemente vizuale asociate cu aplicația.

    După repornire, toate pachetele de aplicații adăugate sunt descărcate și instalate din Windows Store.

    În ultimii ani, Microsoft a încercat în mod activ să facă din acesta un instrument administrativ cheie. Aproape toate produsele noi de server Microsoft necesită utilizarea , și o serie de sarcini de întreținere a sistemului nu pot fi efectuate fără linia de comandă, așa că fiecare administrator Windows ar trebui să cunoască elementele de bază ale PowerShell. Iată zece dintre cele mai utile comenzi.

    1. Obțineți ajutor

    Primul cmdlet pe care fiecare administrator ar trebui să-l cunoască este Get-Help. Poate fi folosit pentru a obține informații de ajutor pentru orice altă comandă. De exemplu, pentru a vedea sintaxa completă pentru comanda Get-Process, puteți utiliza următoarea comandă:

    Get-Help -Nume Get-Process

    Get-Help poate fi folosit și cu substantive și verbe simple. De exemplu, pentru a obține o listă de comenzi cu verbul Get, puteți utiliza următoarea comandă:

    Obține-Ajutor -Nume Obține-*

    2.Set-ExecutionPolicy

    Deși PowerShell oferă posibilitatea de a crea și executa scripturi, această opțiune este dezactivată implicit pentru a preveni executarea codului rău intenționat. Puteți gestiona permisiunile de execuție a scripturilor cu comanda Set-ExecutionPolicy. Sunt disponibile patru niveluri de securitate:

    Restricţionat- execuția scriptului este interzisă. Această opțiune este setată implicit. Comenzile în acest caz pot fi executate numai în modul interactiv.

    Toate semnate- Numai scripturile semnate de un editor de încredere sunt permise să ruleze.

    Semnat de la distanță- Este permisă execuția oricăror scripturi create local, în timp ce scripturile create pe sisteme la distanță sunt executate numai dacă sunt semnate de un editor de încredere.

    Nerestricționat- este permisă executarea absolută a oricăror scenarii.

    Pentru a aplica o anumită politică de execuție a scripturilor, puteți utiliza comanda Set-ExecutionPolicy cu numele politicii. De exemplu, puteți permite execuția nerestricționată a scriptului cu următoarea comandă:

    Set-ExecutionPolicy Unrestricted

    3.Get-ExecutionPolicy

    Când începeți să lucrați pe un server necunoscut, mai întâi ar trebui să aflați ce politică de scriptare este în vigoare asupra acestuia. Puteți afla acest lucru cu comanda Get-ExecutionPolicy.

    4. Obțineți service

    Puteți utiliza comanda Get-Service pentru a obține o listă cu toate serviciile instalate pe sistem. Pentru a verifica starea unui anumit serviciu, puteți completa comanda cu comutatorul -Name cu numele serviciului (sunt permise caracterele metalice).

    5. ConvertTo-HTML

    PowerShell vă permite să obțineți o mulțime de informații utile despre sistem, dar uneori nu este suficient doar să vizualizați aceste informații într-o fereastră de prompt de comandă. Uneori devine necesar să se creeze un raport pentru a-l trimite altui administrator. În acest caz, puteți utiliza comanda ConvertTo-HTML, redirecționând ieșirea oricărei alte comenzi către aceasta. Când faceți acest lucru, trebuie să utilizați comutatorul -Property pentru a lista proprietățile pe care doriți să le includeți în raportul HTML și să specificați numele fișierului.

    Să luăm ca exemplu comanda Get-Service, care vă permite să obțineți o listă de servicii și să o folosiți pentru a crea un raport HTML care listează numele și starea fiecărui serviciu instalat pe sistem. Pentru a face acest lucru, puteți utiliza următoarea comandă:

    Obțineți serviciu | ConvertTo-HTML -Nume proprietate, stare > C:\services.htm

    6. Export-CSV

    Rapoartele pot fi salvate nu numai în HTML, ci și exportate în format CSV pentru vizualizare în Microsoft Excel. Sintaxa comenzii folosită în acest scop este similară cu ConvertTo-HTML. Asigurați-vă că specificați un nume de fișier pentru a salva raportul. De exemplu, puteți exporta o listă de servicii într-un fișier CSV cu următoarea comandă:

    Obțineți serviciu | Export-CSV c:\service.csv

    7.Selectare-Obiect

    Când rulați comanda de mai sus, raportul CSV va include o cantitate imensă de informații, dar uneori este util să limitați cantitatea de informații. Puteți face acest lucru cu comanda Select-Object, care vă permite să specificați ce proprietăți trebuie incluse în raport. De exemplu, pentru a genera un raport CSV care listează numele și stările tuturor serviciilor de sistem, puteți utiliza următoarea comandă:

    Obțineți serviciu | Selectare-Nume obiect, stare | Export-CSV c:\service.csv

    8Get-EventLog

    Comanda Get-EventLog poate fi folosită pentru a analiza jurnalele de evenimente. Oferă o serie de opțiuni suplimentare, dar pentru a vă face o idee despre cum funcționează, trebuie doar să specificați comutatorul -Log și numele fișierului jurnal. De exemplu, pentru a vizualiza jurnalul unei aplicații, puteți utiliza următoarea comandă:

    Get-EventLog -Log „Numele aplicației”

    În practică, această comandă este rar folosită. Cel mai adesea, alte comenzi sunt folosite în schimb pentru a filtra datele și a le salva în format CSV sau HTML.

    9.GetProcess

    În timp ce comanda Get-Service listează toate serviciile de sistem, comanda Get-Process listează toate procesele care rulează în prezent.

    10. Opriți procesul

    Când un proces se blochează, puteți afla numele sau ID-ul acestuia folosind comanda Get-Process și apoi opriți procesul cu comanda Stop-Process, specificând numele sau ID-ul acestuia. De exemplu, procesul „Notepad.exe” pentru Notepad poate fi încheiat cu una dintre următoarele comenzi:

    Stop-Process -Name notepad Stop-Process -ID 2668

    Doar nu uita asta

    A trecut mai bine de un an de la lansarea Windows 7 și Server 2008.

    Programatorii, administratorii de sistem și utilizatorii avansați au găsit multe utilizări pentru fereastra albastră asemănătoare cu linia de comandă.

    Utilizatorii începători, în cea mai mare parte, nici măcar nu știu ce este PowerShell (PS).

    Dar scripturile pentru PowerShell vă permit să automatizați, aproape 100% din acțiunile și scripturile efectuate în sistemul de operare prin linia de comandă și interfața grafică.

    Să ne familiarizăm cu principalele caracteristici ale acestui program, acordând mai multă atenție funcțiilor de creare și rulare a scripturilor (microprograme).

    Există o multitudine de manuale și documentație despre program, inclusiv în limba rusă. Obiectivul articolului– pentru a oferi utilizatorului cunoștințe conceptuale, puse in actiune, și dacă merită să faceți cunoștință cu interpretul și execuția scripturilor în el mai aproape, fiecare va decide singur.

    Ce este Windows PowerShell?

    PowerShell- Un interpret bazat pe .NET Framework, dotat cu propriul limbaj de scripting.

    Primul înseamnă că funcționează în modul text: intri, rulezi o comandă, iar pe ecran vezi rezultatul execuției acesteia.

    Așa cum a fost în MS-DOS și versiuni mai vechi de UNIX.

    Al doilea simplifică, accelerează și automatizează foarte mult administrarea, întreținerea sistemelor, aplicațiilor, proceselor și serviciilor conexe de către administratori și utilizatorii obișnuiți.

    În comparație cu alți interpreți, PS este diferit:

    • integrare cu. - vă permite să creați scripturi puternice prin încorporarea codului de program în ele;
    • toate datele returnate sunt obiecte, nu date de tip text/șir (șir), ceea ce implică transferul lor către alte scripturi și orice procesare.

    PowerShell versiunea 2 are următoarele caracteristici, dintre care unele le vom considera mai detaliat:

    • Abilitatea de a reprezenta comenzi ca cmdlet-uri– sunt lansate în interiorul interpretului, în caz contrar comanda este executată într-un proces separat.
    • Folosind conducte- concepute pentru a transfera date de la o comandă la alta menținând în același timp structura și tipul acestora.
    • Transfer de date integrat cu mai multe fire prin rețea cu setarea priorității și reluarea conexiunii.
    • Suport pentru parametrii poziționali și numiți.
    • munca de fundal– apel asincron de comenzi și lansare de scripturi pe mașini la distanță.
    • Configurarea sesiunilor limitate cu clienți la distanțăși rulează scripturi pe ele.
    • Module- o modalitate de a organiza scripturile atunci când acestea devin autosuficiente și rulează în propriul container fără a afecta mediul modulului.
    • Prezența unui handler de erori.
    • Mediu grafic pentru limbaj: Sintaxă, depanare, evidențiere, completare automată a comenzii cu suport Unicode și marcaje.
    • Adăugarea punctelor de întrerupere la linii, comenzi, operații și variabile pentru depanarea scripturilor.
    • Blocați și comentariile inline.
    • Suport pentru crearea de aliasuri pentru unele cmdleturi, care sunt convertite în comenzi obișnuite în momentul execuției.
    • Creați sesiuni limitate, unde puteți executa o listă strict specificată de comenzi și multe altele.

    Codul sursă PowerShell pus la dispoziția tuturor: orice membru al comunității este liber să-și creeze propriile extensii pentru a crește funcționalitatea interpretului de linie de comandă.

    Puteți începe să stăpâniți limbajul de scripting integrat fără abilități de programare.

    Este puțin probabil să fie posibil să se creeze un script complex, dar aproape toată lumea va putea efectua secvențe de acțiuni primitive.

    Deși, fără cunoștințe despre conceptele de bază ale PowerShell, este puțin probabil să se facă ceva în fereastra interpretorului de comenzi. Să începem cu ei.

    Cmdleturi

    Cmdleturi- comenzi PS originale, în spatele cărora sunt ascunse o varietate de funcții. Comenzile încorporate în interpret sunt implementate conform principiului „verb-substantiv”, de exemplu, Get-Process (obținerea unei liste de procese). Această soluție vă permite să înțelegeți esența echipei deja din numele acesteia (în engleză).

    Unele cmdleturi acceptă primirea/transferul de date și matrice de informații, păstrând în același timp structura și tipul acestora. Acest lucru funcționează pe principiul unei conducte (acesta va fi discutat în secțiunea următoare). Indiferent de ce, cmdleturile rulează și procesează obiectele într-o ordine strictă.

    Pentru a implementa cmdlet-uri, pot fi utilizate orice API .NET acceptate create în oricare dintre limbile .NET.

    Astfel, utilizatorului i se acordă acces la funcțiile specifice ale programului.

    Cmdleturile pot accesa informațiile necesare direct sau prin căi unice (litere de unitate și căi de director).

    Prin cmdleturi, puteți lucra cu sistemul de fișiere și obiectele depozit de certificate, aplicațiile și serviciile instalate.

    Transportor

    Când creați scripturi nu foarte primitive sau pentru a efectua orice operații cu datele obținute ca urmare a scriptului, uneori trebuie să efectuați și unele acțiuni.

    Există un transportor pentru asta. Ca și în UNIX, concatenează comenzile prin trecerea ieșirii unui cmdlet la intrarea altuia, neschimbată, păstrându-și tipul.

    Nu necesită nici un container sau analiza caracter cu caracter a informațiilor.

    Informațiile transmise pot include și o funcție. După ce munca comenzilor combinate este finalizată, funcția de conversie a informațiilor într-un formular text (conversia datelor în șiruri de caractere) este numită folosind formatarea textului.

    Scripturi

    În ciuda faptului că shell-ul vă permite să automatizați multe acțiuni, trebuie să introduceți comenzi manual, ceea ce nu este foarte convenabil.

    Mai ales când aceleași operațiuni trebuie efectuate în mod constant.

    Da, și fără factorul uman nu se poate: greșelile de scriere, erorile, tastele atinse accidental la scrierea liniilor de cod, corectarea sau tastarea unei linii noi necesită o atitudine mai prietenoasă față de utilizator.

    Pentru a efectua lanțuri monotone de acțiuni în PS, sunt implementate scripturi - fișiere text cu o secvență de comenzi pe înțelesul interpretului din interior.

    Scripturile din PowerShell vor simplifica și automatiza și mai mult munca pe PC și întreținerea acestuia, mai ales dacă scriptul conține ramuri, condiții, operațiuni logice și bucle.

    Dar aici „nu tot ce strălucește este aur”: scrierea propriului scenariu sau încărcarea unuia gata făcut (deși se potrivește puțin cu propriile obiective) nu va funcționa atât de ușor.

    Dacă înMicrosoftera permis oricat de multe necazuri făcut scenarii pentruPowerShell , scris de escroci și nedoritori în scopuri egoiste sau huliganiste.

    Pentru a rula pe Windows PS, trebuie să treceți controlul lansării acestuia.

    Dacă nu este trecut, iar scriptul ar trebui să fie executat, va trebui să modificați configurația obiectelor responsabile de securitatea macro-urilor.

    Înainte de a utiliza scripturi

    Când operează VBS, există multe probleme de care dezvoltatorii PowerShell au scăpat complet dacă securitatea scripturilor nu este redusă pentru a satisface solicitările de script ale utilizatorilor sau pentru a rezolva probleme legate de nivelul de securitate al sistemului de operare.

    Rularea scriptului descărcat pe computerul utilizatorului este o modalitate simplă și eficientă de a distribui software rău intenționat sau de a fura informații personale de către intruși.

    Totul se întâmplă din cauza ignoranței elementare a conținutului fișierului script (ps1)și dorința de a-și rezolva rapid problemele în detrimentul muncii altora. Obiectele care controlează nivelul de securitate al execuției scriptului creează un mediu în care scriptul nu poate fi rulat.

    Lansarea intenționată a macrocomenzilor are loc după schimbarea nivelului de securitate, dacă utilizatorul dă voie, realizând ce face și știind cu siguranță ce este în fișierul *.ps1.

    Din cauza inconvenientului configurației de securitate pentru persoanele care trebuie să implementeze și să ruleze propriile scripturi, este posibil să se schimbe configurația.

    Aici puteți reduce protecția la minimum și puteți manevra în mod rezonabil între capacitatea de a deschide găuri pentru penetrare și confortul în lucrul cu PowerShell.

    Shell are trei niveluri de securitate:

    • fișierele cu extensia ps1 nu sunt identificate de sistem ca executabil și sunt desemnate ca necunoscute sau text (faceți dublu clic pentru a deschide în editorul de text implicit utilizat pe computer);
    • shell-ul vă permite să executați scripturi după ce ați specificat calea completă către acestea, fișierele script din directorul curent nu sunt căutate, ceea ce face imposibilă executarea macrocomenzilor aflate în directorul curent;
    • rulează politica de execuție a scriptului încorporată, care este responsabil pentru adăugarea celui necesar la lista de scripturi permise.

    Nici să nu te gândești la schimbarea configurației, coborându-l cel puțin la al doilea nivel, fără a te familiariza cu elementele de bazăPowerShell, până când începi să înțelegi cel puțin superficial conținutul lui *.ps1.

    Există, de asemenea, conceptul de politică de execuție, care este conceput pentru a preveni execuția accidentală a scripturilor. Există până la cinci setări ale politicii de lansare:

    • limitat - instalat implicit, sunt executate doar scripturi semnate de Microsoft care permit obținerea de informații despre shell-ul hardware și software al computerului;
    • fișiere șterse semnate– toate macrocomenzile pot fi executate, dar fișierele trimise prin poștă trebuie să fie semnate;
    • semnat digital de o sursă de încredere– toate scripturile semnate sunt executate;
    • nelimitat- rulați orice macrocomandă;
    • ocolire- sunt destinate programatorilor care își creează propriul sistem de securitate și nu îl folosesc pe cel prevăzut în shell.

    Puteți verifica starea actuală a politicii de pornire cu comanda „Get-ExecutionPolicy”.Indiferent de politica de securitate, utilizatorul nu va putea rula un script care conține comenzi pe care nu are suficiente privilegii pentru a le executa.

    Rularea PowerShell

    Este timpul să trecem de la teorie la practică. Deci, pentru a executa scripturi, trebuie să obțineți o semnătură digitală sau (a doua opțiune este mai simplă).

    Există mai multe moduri de a afișa o fereastră PowerShell.

    Se prezintă sub două forme:

    • consola clasica;

    • PowerShell ISE - adaugă suport pentru file, sintaxă, ajutor contextual, meniuri contextuale și principale, ceea ce facilitează foarte mult munca în interpret.

    start

    Cel mai simplu mod de a apela PS este prin Start.

    1. Deschiderea meniului(în Windows 7, faceți clic pe „Toate programele”).
    2. Accesați directorul Windows PowerShellși faceți clic pe pictograma dorită.

    Orez. 6 - Lansarea PS prin dialogul „Run”.

    Win+X

    În Windows 10 PS poate fi apelat din meniul WinX. Faptul este că implicit, făcând clic pe comandă "Linie de comanda" deschide CMD. Poate fi înlocuit cu PowerShell.

    Deschideți „Proprietăți” din bara de activități, în fila „Navigație”, bifați caseta de lângă singura opțiune și salvați setările.

    Puteți apela PowerShell prin linia de comandă scriind „powershell” în ea sau rulând fișierul executabil de-a lungul căii: %WINDIR%\ System32\ WindowsPowerShell\v1.0 pentru sisteme pe 32 de biți și la %WINDIR%\ syswow64\ WindowsPowerShell\v1.0 pentru Windows pe 64 de biți de orice ediție.

    Orez. 8 - Lansarea PS din directorul în care este stocat fișierul executabil

    • Serghei Savenkov

      un fel de recenzie „rare”... parcă s-ar grăbi undeva