[Powershell]スクリプトを必ずSTAで実行させる

超まとめ

powershellがSTA/MTA環境にかかわらずSTAで実行させるためのコード例です。

説明

Powershell v2.0ではデフォルトがMTAであるため、STAなCOMを使用しようとするとSTAで起動し直す必要があります。
それが面倒なので、スクリプト側で強制的にSTAで実行するようにしてみました。

$onStartUp = [Threading.Thread]::CurrentThread.GetApartmentState()
Write-Host "on start up: $onStartUp"
 
$myScriptName = & {$MyInvocation.ScriptName}
Write-Host "my script name: $myScriptName"

 if( ([Threading.Thread]::CurrentThread.GetApartmentState()) -eq "MTA"){
    "re-run"
    powershell -sta -File $myScriptName
}else{
    #ここにコードを書く
}

備考

powershell v3.0からはstaがデフォルトになったようです。

2 Replies to “[Powershell]スクリプトを必ずSTAで実行させる”

  1. Excellent posts from you, man. I’ve figured out your idea and you’re simply quite great.
    I love what you have here, really like what you’re saying and also the way by which you
    say it. You make it enjoyable. I cant wait to read a lot more from you.
    This is genuinely a wonderful website.

コメントを残す