Interpretarea acțiunilor de eroare pentru comenzile Windows PowerShell

Finalizat

Când o comandă PowerShell generează o eroare, acea eroare poate fi unul dintre cele două tipuri, fie o eroare de terminare , fie o eroare de neterminare . O eroare de terminare apare atunci când Windows PowerShell stabilește că nu este posibil să continuați procesarea după eroare și comanda se oprește. O eroare de non-terminare apare atunci când Windows PowerShell stabilește că este posibil să continuați procesarea după eroare. Când apare o eroare care nu se termină, rularea scriptului sau a conductei va continua. Erorile care nu termină sunt mai frecvente decât erorile de terminare.

Luați în considerare următoarea comandă:

Get-WmiObject -Class Win32_BIOS -ComputerName LON-SVR1,LON-DC1

Dacă presupuneți că computerul LON-SVR1 nu este disponibil în rețea, Get-WmiObject generează o eroare atunci când încearcă să interogheze acel computer. Cu toate acestea, comanda ar putea continua cu următorul computer, LON-DC1. Prin urmare, eroarea este o eroare care nu se termină.

$ErrorActionPreference

Windows PowerShell are o variabilă globală încorporată numită $ErrorActionPreference. Când o comandă generează o eroare care nu se termină, comanda verifică acea variabilă pentru a decide ce ar trebui să facă. Variabila poate avea una dintre următoarele patru valori posibile:

  • Continuați este implicit și îi spune comenzii să afișeze un mesaj de eroare și să continue să ruleze.
  • SilentlyContinue îi spune comenzii să nu afișeze niciun mesaj de eroare, ci să continue rularea.
  • Inquire îi spune comenzii să afișeze o solicitare care întreabă utilizatorul ce să facă.
  • Stop spune comenzii să trateze eroarea ca terminare și să oprească rularea.

Pentru a seta variabila $ErrorActionPreference , utilizați următoarea sintaxă:

$ErrorActionPreference = 'Inquire'

Notă

Fiți selectiv în ceea ce privește utilizarea SilentlyContinue pentru $ErrorActionPreference. S-ar putea să credeți că acest lucru vă face scriptul mai bun pentru utilizatori, dar ar putea îngreuna depanarea.

Dacă intenționați să captați o eroare în script, astfel încât să puteți gestiona eroarea, comenzile trebuie să utilizeze acțiunea Oprire . Puteți bloca și gestiona doar erorile de terminare.

-Parametru ErrorAction

Toate comenzile Windows PowerShell au parametrul –ErrorAction . Acest parametru are aliasul –EA. Parametrul acceptă aceleași valori ca $ErrorActionPreference, iar parametrul înlocuiește variabila pentru acea comandă. Dacă vă așteptați să apară o eroare la o comandă, utilizați –ErrorAction pentru a seta acțiunea de eroare a acelei comenzi la Stop. Acest lucru vă permite să prindeți și să gestionați eroarea pentru acea comandă, dar lăsați toate celelalte comenzi să utilizeze acțiunea în $ErrorActionPreference. Un exemplu este:

Get-WmiObject -Class Win32_BIOS -ComputerName LON-SVR1,LON-DC1 -ErrorAction Stop

Singura dată când veți modifica $ErrorActionPreference este atunci când vă așteptați la o eroare în afara unei comenzi Windows PowerShell, cum ar fi atunci când rulați o metodă precum următoarea:

Get-Process –Name Notepad | ForEach-Object { $PSItem.Kill() }

În acest exemplu, metoda Kill() poate genera o eroare. Dar, deoarece nu este o comandă Windows PowerShell, nu are parametrul –ErrorAction . În schimb, ați seta $ErrorActionPreference la Stop înainte de a rula metoda, apoi să setați variabila înapoi la Continue după ce rulați metoda.