Linux のシェル風に考えていて それぞれ別プロセスだと思ってたのに同じだった

$pid

を a.ps1 に保存して PowerShell で実行する

PS C:\Users\user9\Desktop> $pid
16640
PS C:\Users\user9\Desktop> .\a.ps1
16640
PS C:\Users\user9\Desktop> & .\a.ps1
16640
PS C:\Users\user9\Desktop> powershell .\a.ps1
7948

最初のが実行元の PID で直接 ps1 ファイルを指定したり & を使ったりしても同じ PID が表示される
コマンドに powershell を指定すれば PowerShell プロセスが起動するので別の PID

変数のスコープが終わってるし 困ることないかと思ってたけど GC されないことで Excel プロセスが残るとか カレントディレクトリのずれが引き継がれるとかあった

echo "pw cwd" (Get-Location).path
echo ".net cwd" ([IO.Directory]::GetCurrentDirectory())

cd でカレントディレクトリ移動後に↑のスクリプトを実行すると

pw cwd
C:\Users\user9\Desktop\dir1\dir2
.net cwd
C:\Users\user9\Desktop

スクリプト内では cd してないから PowerShell と .NET のカレントディレクトリが一致してると思いきや 同じプロセスなのでスクリプトを実行してる環境のずれが引き継がれてる

こういうのがあるし 基本は別プロセスで実行するようにしたほうがよさそう