PowerShell Cookbook

Aceasta este o listă de elemente pe care colegii mei și cu mine le-am găsit utile în munca noastră. Nu se dorește a fi enciclopedică, ci mai degrabă un loc pentru a înregistra lucruri pe care un începător le-ar găsi utile, în special lucruri care ar putea dura mult timp pentru a le înțelege.

Această pagină a fost începută înainte ca O’Reilly să publice Windows PowerShell Cookbook de Lee Holmes. Recomand cartea lui O’Reilly, dar această pagină nu are legătură cu ea.

Vezi și PowerShell gotchas.

Schemă

  • Noțiuni de bază/instalație
    • Instalați PowerShell
    • Instalați biblioteca Community Extensions
    • Scăpați de mesajul „executarea scripturilor este dezactivată”
    • Pregătiți-vă „scripturile”:
    • . PowerShell locația unității PowerShell
    • Configurați-vă promptul de comandă
  • Sarcini diverse
    • Scrieți pe ecran
    • Promiteți utilizatorului să introducă date
    • .

    • Manipulați date
    • Întoarceți e-mailul
    • Sleep
    • Înumeră un director (recursiv)
    • Testă dacă un fișier există
    • Citește liniile unui fișier într-un fișier array
    • Scrieți într-un fișier
    • Renumiți un fișier
    • Ștergeți un fișier
    • Lucrați cu expresii regulate
    • Spargeți și uniți șiruri de caractere
    • Căutați un web pagină web
    • Citește și scrie în registru
    • Înțelege ghilimelele
    • Cronometrează o comandă
    • Text to speech
    • Accesează clipboard-ul Windows
    • Încarcă un fișier .NET assembly
    • Executați codul creat în timpul execuției
    • Executați un program cu un spațiu în calea sa

Noțiuni de bază/instalație

Instalați PowerShell

Puteți obține PowerShell de la:
https://www.microsoft.com/windowsserver2003/technologies/management/powershell/download.mspx

top

Instalarea bibliotecii Community Extensions

Biblioteca PowerShell Community Extensions (PSCX) este disponibilă aici:
https://www.codeplex.com/Wiki/View.aspx?ProjectName=PowerShellCX

Este o colecție utilă de cmdlet-uri și funcții. Instalează un meniu contextual „PowerShell Here” în WindowsExplorer care deschide o fereastră de comandă PowerShell în dosarul pe care faceți clic dreapta. De asemenea, PSCX oferă o mostră de fișier Profile.ps1.

După ce PSCX este instalat, tastați man about_pscx pentru a vedea o prezentare generală a cmdlet-urilor, furnizorilor, etc. care vin cu PSCX.

top

Scăpați de mesajul „execuția scripturilor este dezactivată”

Prima problemă pe care este posibil să o întâmpinați atunci când executați scripturi PowerShell este ceva de genul acesta:

PSH> .\myScript.ps1File D:\myScript.ps1 cannot be loaded. The fileD:\myScript.ps1 is not digitally signed. The script will not execute on thesystem. Please see "get-help about_signing" for more details..
At line:1 char:13 + .\myScript.ps1 <<<<

Acest lucru se datorează setării de securitate implicite din PowerShell care interzice rularea scripturilor malițioase.

Puteți modifica acest comportament procedând astfel:

PSH> set-executionPolicy RemoteSigned

Acum numai scripturile care provin din surse de la distanță vor necesita semnare digitală.

top

Configurați-vă „scripturile:” locația unității PowerShell

După ce ați scris un număr de scripturi PowerShell, s-ar putea să vi se pară util să le adunați într-un singur loc și să creați o unitate PSDrive numită scripts: pentru a le găsi rapid. Ați putea adăuga următoarele la profilul dvs. PSCX pentru a crea un astfel de PSDrive.

New-PSdrive -name scripts -PSprovider filesystem -root C:\bin\PowerShellScripts

top

Configurați promptul de comandă

Pentru a configura promptul de comandă, creați pur și simplu o funcție numită prompt și puneți-o în profilul dvs. De exemplu, următoarele vor determina afișarea directorului de lucru.

function prompt { "$pwd> " }

Rețineți că puteți pune orice cod doriți în interiorul funcției prompt și acel cod se va executa de fiecare dată când apăsați return.

top

Sarcini diverse

Scrieți pe ecran

Utilizați Write-Host pentru a scrie ieșirea. Puteți specifica opțional -foregroundcolor pentru a colora ieșirea. De exemplu, erorile și avertismentele pot fi evidențiate cu roșu.

Exemplu:

Write-Host "Hello world" -foregroundcolor red

top

Invitați utilizatorul la intrare

Utilizați Read-Host.

Exemplu:

$a = Read-Host "Enter your name"Write-Host "Hello" $a

top

Manipulează datele

Cmodelul get-date returnează un obiect DateTime. Fără niciun argument, acesta returnează ora și data curentă. Cu un argument de tip șir de caractere, nu este nevoie de ghilimele, analizează șirul într-o dată.

Exemplu: Aflați numărul de zile și ore scurse de la bicentenarul SUA.

(get-date) - (get-date 7/4/1976)

De asemenea, puteți transforma șirurile de caractere în obiecte DateTime folosind cast .

top

Send email

Utilizați cmdlet Send-SmtpMail din PowerShell Community Extensions.

Exemplu:

Send-SmtpMail -SmtpHost wotan.mdacc.tmc.edu -from [email protected] -to [email protected] -body "hello world"

top

Sleep

Utilizați cmdlet Start-Sleep. Durează câteva secunde în mod implicit, dar are o opțiune -milliseconds.

Exemplu:

Write-Host "hello"; Start-Sleep 5; Write-Host "world"

top

Listează un director (recursiv)

Puteți utiliza comanda dir, care este de fapt un alias pentru Get-ChildItem. Pentru a lista un director în mod recursiv, trebuie doar să adăugați opțiunea -recurse.

Exemplu:

dir f:\bin -recurse

top

Testați dacă există un fișier

Utilizați test-path.

top

Citiți liniile unui fișier într-un array

Utilizați get-content.

Exemplu:

$a = (get-content foo.txt)

top

Scrieți într-un fișier

Utilizați Out-File. Dacă nu doriți o ieșire Unicode, specificați -encoding ASCII

Exemplu:

$foo | out-file -encoding ASCII foo.txt

top

Redenumiți un fișier

Utilizați Rename-Item sau aliasul său ren.

top

Ștergeți un fișier

Utilizați Delete-Item sau aliasul său del.

top

Lucrați cu expresii regulate

Vezi Expresii regulate în PowerShell și Perl.

top

Despărțiți și uniți șiruri de caractere

Cirurile de caractere au o metodă split. Argumentul pentru split() este un șir de caractere care conține caracterele pe care se împarte. Funcția ::split este mai generală. Primul său argument este șirul de despărțit, iar al doilea argument este o expresie regulată pe care să se facă despărțirea.

Exemplu:

$a.split("`t ")

va despărți șirul $aîntr-o matrice de șiruri, despărțind ori de câte ori există o tabulație sau un spațiu.

Exemplu:

$a = "123,456,apple"; ::split($a, ",(?!\d)")

va despărți $ape virgule care nu sunt urmate de cifre. Astfel, divizarea ar returna „123,456” și „măr”.

Dacă șirul pe care îl divizați este o cale Windows, este posibil să doriți să utilizați comanda specializată Split-Path.

Pentru a uni un array într-un singur șir, utilizați metoda ::join. Primul argument este caracterul de separare, iar al doilea este matricea.

Exemplu:

$a = 1, 2, 3;#note: this is an array, not a string$b = ::join("*", $a)

Acum $b conține „1*2*3”.

top

Prindeți o pagină web

Utilizați fie Get-Url din PSCX, fie obiectul net.webclient din .NET. Primul este mai succint, dar cel de-al doilea permite mai multe opțiuni.

Exemplu:

$w = Get-Url "https://www.w3.org"

$w = (new-object net.webclient).DownloadString("https://www.w3.org")

Codul (new-object net.webclient) creează un obiect .NET WebClient cu multe metode utile. De exemplu, puteți apela DownladFile pentru a salva direct pe disc, mai degrabă decât pe un șir de caractere. Există, de asemenea, metodele UploadData și UploadFile.

top

Citire și scriere în registru

Puteți naviga în registru așa cum ați face-o în sistemul de fișiere, deși există câteva detalii care trebuie cunoscute.

Care hive din registru este ca o unitate de disc. Astfel, de exemplu, pentru a explora HKEY_CURRENT_USER, puteți cd HKCU: și apoi folosi cd pentru a coborî în arbore. Folosiți Get-ItemProperty pentru a citi și Set-ItemProperty pentru a scrie. De asemenea, puteți folosi Remove-ItemProperty pentru a șterge.

Exemplu:

Comenzile de mai jos vor lista conținutul nodului de registru care configurează shell-ul cmd.exe. Prin setarea CompletionChar la 9, activăm completarea tabulației.

cd HKCU:\Software\Microsoft\Command ProcessorGet-ItemProperty .Set-ItemProperty . -name CompletionChar -Value 9

Acest articol TechNet intră în mai multe detalii.

top

Înțelegerea ghilimelelor

PowerShell are patru tipuri de ghilimele: ghilimele simple și duble obișnuite, și ghilimele simple și duble here-strings. În interiorul ghilimelelor duble și al șirurilor duble here-strings, numele variabilelor sunt înlocuite cu valorile lor și sunt interpretate secvențele de evacuare PowerShell. În ghilimelele simple și în here-strings simple, numele variabilelor nu sunt extinse, iar secvențele de evacuare nu sunt interpretate. De exemplu, fragmentul de cod

 $a = "bar" 'foo`t$a', "foo`t$a"

va produce ieșirea

 foo`t$a foo bar

pentru că în interiorul ghilimelelor duble, `t se extinde la o tabulație și $a se extinde la „bar”.

PowerShell here-strings sunt ca și here-documents în Perl. În interiorul unui here-string, ghilimelele duble și simple nu sunt speciale, ci sunt citate literal. De asemenea, salturile de linie sunt păstrate.

Un here-string începe fie cu @", fie cu @' și se termină cu aceleași simboluri în ordine inversă. Trebuie să existe o linie nouă după markerul de deschidere și înainte de markerul de închidere.

Exemplu

 $a = "bar" $b = @" foo "baz" 'qux' $a "@ $b

produce

 foo "baz" 'qux' bar

și

 $a = "bar" $b = @' foo "baz" 'qux' $a '@ $b

produce

 foo "baz" 'qux' $a

Rețineți că nu trebuie să existe spațiu alb după ghilimelele care deschid un here-string. În caz contrar, veți primi mesajul „Unrecognized token in source text.”

Deși au un aspect asemănător, sirurile here-strings din PowerShell și sirurile verbatim din C# sunt destul de diferite. Tabelul următor rezumă diferențele.

.

C# verbatim strings PowerShell here-.strings
Poate conține întreruperi de linie Trebuie să conțină întreruperi de linie
Doar varianta cu ghilimele duble Variantele cu ghilimele simple și duble
Începe cu @” Începe cu @” (sau @’) plus o pauză de linie
Se termină cu „ Se termină cu o pauză de linie urmată de „@ (sau ‘@’)
Nu poate conține un-.scăpate ghilimele duble Poate conține ghilimele
Dezactivează secvențele de scăpare C# ‘@ dezactivează secvențele de scăpare PowerShell, dar „@ nu

top

Cronometrează o comandă

Utilizați Measure-Command pentru a cronometra cât timp durează finalizarea unei sarcini.

top

Text to speech

Utilizați Out-Speech din PSCX.

top

Accesați clipboard-ul Windows

Utilizați cmdlet-urile PSCX Get-Clipboard și Out-Clipboard pentru a citi din și a scrie în clipboard.

top

Încărcați un ansamblu .NET

Puteți apela LoadWithPartialName. De exemplu, pentru a încărca ansamblul pentru Team Foundation Server API, veți executa

::LoadWithPartialName("Microsoft.TeamFoundation.Client")

Vezi și Resolve-Assembly din PSCX.

top

Executarea codului creat în timp de execuție

Comanda Invoke-Expression este analogă cu eval în Perl sau JavaScript. Invoke-Expression $str execută codul conținut în șirul de caractere $str.

top

Executarea unui program cu un spațiu în calea sa

Puneți ghilimele în jurul căii de acces și puneți o ampersandă în față. De exemplu,

& "C:\Program Files\WinEdt Team\WinEdt\WinEdt.exe"

va lansa executabilul WinEdt.exe care are două spații în calea sa completă.

Rețineți că nu puteți omite ampersand-ul. Spre deosebire de cmd.exe, PowerShell nu presupune că toate șirurile de caractere sunt comenzi. Fără ampersandă, o cale citată este doar un șir de caractere.

top

.

Lasă un răspuns

Adresa ta de email nu va fi publicată.