Potlačení vypisování chyb v PowerShellu


Potlačit chybové výpisy lze buď kompletně, což se dělá nastavením proměnné WarningPreference

$WarningPreference = 'SilentlyContinue'

Tím se potlačí vypisování chyb a skript dělá, jako by se nic nedělo. Nastavit lze i jiné hodnoty, například Stop, Inquire (zobrazí chybové hlášení a čeká na potvrzení pro pokračování) a Continue, které zobrazí chybu a pokračuje dál. Detaily viz. RTFM – About Reference Variables Microsoftu.

Další z mnohem využívanějších způsobů potlačení chyb spočívá v práci se streamem, kdy nějaký příkaz vygeneruje chybu, s kterou se pak pracuje dle nastavení. Jednoduše řečeno, budeme chyby přesměrovávat do „> $null“, jen trochu sofistikovaněji.

Typy streamů:

  • Stream 1 – Success Stream
  • Stream 2 – Error Stream
  • Stream 3 – Warning Stream
  • Stream 4 – Verbose Stream
  • Stream 5 – Debug Stream
  • Stream 6 – Information Stream
  •  * – All Streams

Tedy, chcete-li potlačit informační hlášení konkrétního příkazu, tak za příkaz přilepíte 6>$null. Chcete-li potlačit chyby uděláte to takto 2>$null atd.. viz. RTFM – About Redirection Microsoftu.

No a nakonec je tu taková vychytávka pro práci s pipeline, která se dá také použít. Nebudu se zde o problematice pipeline rozepisovat (koho to zajímá, může si o tom přečíst hezký článek), ale pokud ve funkci použijete bloky begin a process, které musí být pospolu, tak to co napíšete do bloku begin, bude platit pouze pro danou funkci. Tedy, pokud do beginu napíšete $WarningPreference = ‚SilentlyContinue‘, tak toto nastavení bude platit pouze v dané funkci a nikde jinde. Takto tedy lze potlačit vypisování chyb v rámci celé funkce.

function hello {
 begin{ $WarningPreference = 'SilentlyContinue' }
 process { write-host 'Hello :)'}
}