Interpretarea acțiunilor de eroare pentru comenzile Windows PowerShell
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.