PowerShell - ustawienie $ ErrorActionPreference dla całego skryptu

Po raz pierwszy udostępniam PowerShell (v3.0) po raz pierwszy i stałam się niezmiernie sfrustrowana dziwnym sposobem implementacji niektórych z jego koncepcji obsługi błędów.

Napisałem następujący fragment kodu (używając modułu Remote Registry PowerShell)

try
{
    New-RegKey -ComputerName $PCName -Key $Key -Name $Value
    Write-Host -fore Green ($Key + ": created")
}
catch
{
    Write-Host -fore Red "Unable to create RegKey: " $Key
    Write-Host -fore Red $_
}

(To tylko fragment)

Najwyraźniej domyślnym zachowaniem PowerShell jest NIE łapanie błędów, które nie kończą się. Dodałem następujący wiersz na górze mojego skryptu, zgodnie z zaleceniami różnych osób:

$ErrorActionPreference = "Stop"

Wykonanie tego w PowerShell ISE rzeczywiście wykryło wszystkie błędy. Jednak wykonanie następującego polecenia z terminala nadal nie przechwytuje moich błędów.

Z ISE:

PS C:\windows\system32> C:\Data\Scripts\PowerShell\Error.ps1
Errorhandling:  Stop
SOFTWARE\MySoftware does not exist. Attempting to create
Unable to create RegKey:  SOFTWARE\MySoftware
Key 'SOFTWARE\MySoftware' doesn't exist.

Z linii poleceń:

PS C:\Data\Scripts\PowerShell> .\Error.ps1
Errorhandling:  Stop
SOFTWARE\MySoftware does not exist. Attempting to create
New-RegKey : Key 'SOFTWARE\MySoftware' doesn't exist.
At C:\Data\Scripts\PowerShell\Error.ps1:17 char:13
+             New-RegKey -ComputerName $PCName -Key $Key -Name $Value
+             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Write-Error], WriteErrorException
    + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,New-RegKey

SOFTWARE\MySoftware: created

Nie mam pojęcia, dlaczego zachowanie zmiennych preferencji zachowuje się inaczej w zależności od tego, skąd są wywoływane, zwłaszcza że ISE wydaje się wykonywać dokładnie to samo polecenie?

W oparciu o inne opinie zmieniłem następujący wiersz:

New-RegKey -ComputerName $PCName -Key $Key -Name $Value

Do:

New-RegKey -ComputerName $PCName -Key $Key -Name $Value -ErrorAction Stop

Korzystając z tej metody, udało mi się przechwycić błędy zarówno z wiersza poleceń, jak i ISE, ale nie chcę określać zachowania błędu w każdym wywołaniu Cmdlet I, zwłaszcza, że ​​łapanie błędów jest niezbędne do prawidłowego funkcjonowania kod. (Plus fakt, że ta metoda działa tylko po to, aby mnie jeszcze bardziej zmylić)

Jaki jest właściwy sposób definiowania zachowania związanego z obsługą błędów dla całego skryptu i / lub modułu?

Również tutaj jest moja $ PSVersionTable:

PS C:\Data\Scripts\PowerShell> $PSVersionTable

Name                           Value
----                           -----
PSVersion                      3.0
WSManStackVersion              3.0
SerializationVersion           1.1.0.1
CLRVersion                     4.0.30319.18408
BuildVersion                   6.2.9200.16481
PSCompatibleVersions           {1.0, 2.0, 3.0}
PSRemotingProtocolVersion      2.2

questionAnswers(1)

yourAnswerToTheQuestion