PowerShell - Definindo $ ErrorActionPreference para o script inteiro

Estive testando o PowerShell (v3.0) pela primeira vez hoje e fiquei extremamente frustrado com a maneira estranha como alguns de seus conceitos de tratamento de erros são implementados.

Escrevi o seguinte trecho de código (usando o Remote PowerShell Module)

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 $_
}

(Este é apenas um trecho)

Aparentemente, o comportamento padrão do PowerShell é NÃO detectar erros que não terminem. Então, adicionei a seguinte linha na parte superior do meu script, conforme recomendado por várias pessoas:

$ErrorActionPreference = "Stop"

Executar isso no PowerShell ISE realmente capturou todos os erros. No entanto, a execução após o comando do terminal ainda não captura meus erros.

Do 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.

Na linha de comando:

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

Não faço ideia por que o comportamento das Variáveis de Preferência se comporta de maneira diferente, dependendo de onde elas são chamadas, principalmente porque o ISE parece executar exatamente o mesmo comando?

Com base em outros comentários, alterei a seguinte linha:

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

Para:

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

Usando esse método, consegui capturar erros da linha de comando e do ISE, mas não quero especificar o comportamento do erro em cada cmdlet que chamo, principalmente porque a captura de erros é essencial para o bom funcionamento do o código. (Além disso, o fato de esse método funcionar apenas serve para me confundir ainda mais)

Qual é a maneira correta de definir o comportamento de tratamento de erros para o escopo de um script e / ou módulo inteiro?

Além disso, aqui está minha $ 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