$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 のカレントディレクトリが一致してると思いきや 同じプロセスなのでスクリプトを実行してる環境のずれが引き継がれてる
こういうのがあるし 基本は別プロセスで実行するようにしたほうがよさそう