初めての質問で慣れておらず、失礼がありましたら、お許しください。  
タイトルに書いたような事象がおきております。  
下記のようなプログラムを作成し実行すると1回目は正常終了します。  
その後、C:\hoge1\hogeを読取専用(またはプログラムを別ユーザで実行)すると、Stop-
TranScriptでエラーが起きた後、catch以降の文が実行されてしまいます。  
どうもcatch内でエラーが起こると、後続の文を中断して、catch外の文が実行されてしまうように見えます。  
回避する方法があれば、アドバイスいただけるとありがたいです。(Win10_20H2で確認)

```

    Start-TranScript -Path C:\hoge1\hoge
    try {
        echo hoge > C:\hoge2\hogehoge   #存在しないフォルダ
    }
    catch {
        echo $_.Exception.Message
        Stop-TranScript
        exit 5
    }
    echo "なぜかここが実行される"
    
```
CC BY-SA 4.0
2022-04-08T14:02:44.207
88227
2022-04-15T12:48:25.040
52147
question
powershell
Powershellでtry-catchのcatch内でエラーが起きるとcatch外が実行されてしまう
PowerShellは他のシェルスクリプトと同様に、エラーが発生しても処理を継続します。この動作は [Common Parameter の
`-ErrorAction`](https://docs.microsoft.com/en-
us/powershell/module/microsoft.powershell.core/about/about_commonparameters?view=powershell-5.1#-erroraction)
で制御できます。  
デフォルトは `-ErrorAction Continue` ですが、`-ErrorAction Stop` を指定すれば停止します。

しかし、質問は `>` によるリダイレクトであり、

```

    echo hoge > C:\hoge2\hogehoge
    
```

は内部的には

```

    Write-Output hoge | Out-File C:\hoge2\hogehoge
    
```

となっています。

```

    Write-Output hoge | Out-File -ErrorAction Stop C:\hoge2\hogehoge
    
```

とすれば止まりますが、元のリダイレクト記法ではパラメーターを指定することができません。この場合でも、[Preference Variable の
`$ErrorActionPreference`](https://docs.microsoft.com/en-
us/powershell/module/microsoft.powershell.core/about/about_preference_variables?view=powershell-5.1#erroractionpreference)
で制御できます。実行前に

```

    $ErrorActionPreference = "Stop"
    echo hoge > C:\hoge2\hogehoge
    
```

で処理を止めることができます。
CC BY-SA 4.0
2022-04-09T01:51:56.750
88230
2022-04-09T01:51:56.750
4236
88227
answer