実現したいこと
お世話になります。
vbs(VisualbasicScript),Powershell、IIS(asp)に知見のある皆様、ご協力を頂けますと助かります。
・wmicサポート終了に伴う、vbsコードの書き換えを進めています。
具体的には、vbsのobjWMIServiceから、powershellのGet-CimInstanceへの
部分置き換えを考えています。
※元のコードを、下記■1.にコピペします。
よくある汎用の、PCの環境情報を参照するコードです。
・なお、vbsファイル(.vbs)自体の利用は継続するため、vbsコード内からpowershellを呼び出し、
戻り値を既存のvbsコードに渡したいというのが必須条件です
発生している問題・分からないこと
・下記2.のコードで実装したのですが、戻り値(OS-name、Memory)が
取得できません。( 値が取れていないか、nullになっているようです)
[12/14 追記]
エラーとしては、「For Each objItem in colItem」行のところで、
「オブジェクトでサポートされていないプロパティまたはメソッドです。」
のエラーが発生してしまいます。
配列で出力した(つもりの)データに対して、for eachでの配列の取り出しが
うまく行っていないようです・・
・下記1.の元のコードでは、OS-name、Memoryの値が取得できています。
・変更予定のコードの問題箇所についてお分かりの方、また見直したほうがよい部分
についてご指摘いただけますでしょうか
該当のソースコード
■1.元のコード(全てvbs) strComputer = "." Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2") Set colItem = objWMIService.ExecQuery( "SELECT * FROM Win32_OperatingSystem",,48) tmpSTR = "" For Each objItem in colItem OSname = objItem.Caption Memory = objItem.TotalVisibleMemorySize Next ■2.変更案のコード(vbsからpowershellを呼び出し) Set objShell = CreateObject("WScript.Shell") objExec = "powershell -Command Get-CimInstance -Classname Win32_OperatingSystem" Set colItem = objShell.Exec(objExec) tmpSTR = "" For Each objItem in colItem OS-name = objItem.Caption Memory = objItem.TotalVisibleMemorySize Next ※補足 上記2.で、 Set colItem = objShell.Exec(objExec) の後に、 colItem = objExec.StdOut.ReadAll の標準出力を追加し、 これをfor eachで参照してみたのですが、やはり戻り値は取得できないようです。 [12/14 追記] 問題切り分けの為、Powershell上から下記のコードを実行したところ、応答が返ってきました。 [実行コマンド] PS C:\WINDOWS\system32> Get-CimInstance -Classname Win32_OperatingSystem | Select-Object Caption, TotalVisibleMemorySize [結果] Caption TotalVisibleMemorySize ------- ---------------------- Microsoft Windows 11 Home 31388688
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
MS Copilotや、Perplexity等のAIサイトで質問や、
コード変換のクエリーを出して見たのですが、実環境では動きませんでした。
補足
IIS Ver10上のaspより、vbsを参照して動かしています。
回答1件
あなたの回答
tips
プレビュー