PowerShellでJavaScript

JavaScriptのコードをPowerShellで実行する。
COMオブジェクトのScriptControlを使い、string型で表したJavaScriptのコードを実行し、その結果をPowerShellで受け取るサンプル。
ScriptControlを使うので、環境はWin x86に限定される。

今回はこちらのサイトを参考にした。

  • https://stackoverflow.com/questions/37711112/in-excel-vba-on-windows-for-parsed-json-variables-what-is-this-jscripttypeinfo/37711113
  • https://stackoverflow.com/questions/39552612/runtime-error-parameter-mismatch-using-callbyname-and-invoke
$control = New-Object -ComObject "ScriptControl";
$control.Language = "JavaScript";

# 今回は例としてJSONをCOMオブジェクトデータとして取得してみる
$control.Eval("function Parse(strObj) { return eval(strObj); };");


Add-type -AssemblyName "Microsoft.VisualBasic";


$obj = $control.CodeObject.Parse("[{mykey: 'value1'}, {mykey: 'value2'}]");
$len = [Microsoft.VisualBasic.Interaction]::CallByName($obj, "length", [Microsoft.VisualBasic.CallType]::Get);

for($i = 0; $i -lt $len; ++$i) {
    $elem = [Microsoft.VisualBasic.Interaction]::CallByName($obj, $i, [Microsoft.VisualBasic.CallType]::Get);
    $valMyKey = [Microsoft.VisualBasic.Interaction]::CallByName($elem, "mykey", [Microsoft.VisualBasic.CallType]::Get);
    Write-Host "MyKey value is ${valMyKey}";
}

実行速度はともかくとして、ScriptControlにJavaScriptを噛ませば、COM経由でそのデータにアクセスすることができる。
JSONだとあまり恩恵がないかもしれないが、HTML等に付いているJavaScriptを動かさなければならない時には便利。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です