Windows 11 24H2から、動作しなくなったJScriptの事例を紹介します。
Windows 11 24H2では動作しないサンプルコード
以下のコードはJScriptで生成したJSONオブジェクトをVBScriptで参照し、その要素を出力するサンプルです。
function jsonParse() {
return eval(
'(' +
' {"layer" :' +
' [ ' +
' { "key" : 1, "value" : "aaa" }, ' +
' { "key" : 2, "value" : "bbb" } ' +
' ]' +
' }' +
')'
);
}
Option Explicit
Rem --- Initialize -------------------------------------------------------------
dim objJson
Set objJson = jsonParse()
dim obj
for each obj in objJson.layer
wscript.StdOut.writeline "[" & obj.key & "]=" & obj.value
next
wscript.quit(0)
どんなことが起きるのか・・・
Windows 11 24H2でサンプルコードを実行すると「for each」の行で「オブジェクトでサポートされていないプロパティまたはメソッドです。」というエラーが発生しました。
その原因は・・・
調べてみると「for each」を使った配列の要素の取り出しができなくなっているようです。
dim obj
for each obj in objJson.layer
wscript.StdOut.writeline "[" & obj.key & "]=" & obj.value
next
代わりになるものは・・・
'length'プロパティを使って配列の長さは取れるようです。
'shift'メソッドを使って配列から要素を取り出すこともできそうです。
そこで・・・
問題の部分を以下のように変えてやることで同じ動作を実現できました。
dim obj, index
for index=1 to objJson.layer.length
set obj = objJson.layer.shift()
wscript.StdOut.writeline "[" & obj.key & "]=" & obj.value
next
調べてわかったのですが、Windows 11 24H2から、デフォルトで動作するJScriptの実行エンジンがJscript9Legacyに変更されています。
グループポリシーで古い実行エンジンを使うこともできるようです。

詳細は以下のサイトに記載されています。
https://learn.microsoft.com/ja-jp/windows/client-management/mdm/policy-csp-internetexplorer
修正したコードは試した限りWindows 11 24H2以前のOSでも動作しました。
Windows 11 24H2と同じベースを持つWindows Server 2025でも同じ状況でした。

