質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CGI

CGI(Common Gateway Interface)とは、Webサーバー上でユーザプログラム動作させる仕組みのこと。また、動かす前提のプログラムをCGIと呼ぶこともあります。HTMLなどの静的な情報に限らず、プログラムの処理結果をベースにした動的情報の提供が可能です。

IIS

IIS(Internet Information Services)はマイクロソフト社によって開発されたwebサーバーです。Windows上で動作します。

VBScript

VBScript(Visual Basic Scripting Edition)はMicrosftが開発したスクリプト言語であり、Visual Basicのサブセットです。

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

Q&A

0回答

2507閲覧

IISで構築したWEBページから、サーバー上に配置されたVBSファイルを実行したい

ayuzer

総合スコア15

CGI

CGI(Common Gateway Interface)とは、Webサーバー上でユーザプログラム動作させる仕組みのこと。また、動かす前提のプログラムをCGIと呼ぶこともあります。HTMLなどの静的な情報に限らず、プログラムの処理結果をベースにした動的情報の提供が可能です。

IIS

IIS(Internet Information Services)はマイクロソフト社によって開発されたwebサーバーです。Windows上で動作します。

VBScript

VBScript(Visual Basic Scripting Edition)はMicrosftが開発したスクリプト言語であり、Visual Basicのサブセットです。

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

0グッド

2クリップ

投稿2019/05/08 23:30

Windows Server 2012 R2 上に構築したIISのWEBサーバーがございます。
この上で、PowerShellをCGIとしてWEBページを動作させています。

上記WEBページから、利用者の操作をトリガーに、WEBサーバー上に置かれている
VBSファイルを実行させたいという要件があります。

ところが、以下のソースにより「test.bat」は実行できるのですが、
「test.vbe」は実行できません。(拡張子をVBSに変えても同じ)
test.bat の中に test.vbe を呼び出す処理を書いて実行しても
やはり実行されませんでした。

できることなら利用WEBサーバーや言語を変えることなく要件を満たしたいのですが
どうすれば良いか、ご存知の方がいらっしゃればご助言をいただけますと幸甚です。

PowerShell

1##===============引数を受け取るなどするための手続き ここから=============== 2#requires -version 2.0 3Add-Type -AssemblyName System.Web 4Add-Type -AssemblyName System.Web.Extensions 5if ($Env:CONTENT_TYPE -ne "application/x-www-form-urlencoded") { 6 throw New-Object System.IO.InvalidDataException -ArgumentList@("Unexpected content type") 7 [System.Environment]::Exit(-1) 8} 9$entityBodyReader = New-Object System.IO.BinaryReader -ArgumentList @([Console]::OpenStandardInput()) 10$entityBody = [System.Text.Encoding]::ASCII.GetString($entityBodyReader.ReadBytes($ENV:CONTENT_LENGTH)) 11$queryValues = [System.Web.HttpUtility]::ParseQueryString($entityBody, [System.Text.Encoding]::GetEncoding(932)) 12##===============引数を受け取るなどするための手続き ここまで=============== 13 14##以下、Powershellの実行結果をHTMLとして出力する 15Echo "Content-Type: text/html" 16Echo "" 17Echo "<HTML><BODY>" 18#Start-ProccessコマンドレットでBATを実行する。これは動く。引数も渡る。 19Echo "$((Start-Process -FilePath "C:\inetpub\wwwroot\cgi\test.bat" -ArgumentList $($queryValues.Get(`"HIKISU`"))))" 20#Start-ProccessコマンドレットでVBS(VBE)を実行する。これは動かない。 21Echo "$((Start-Process -FilePath "C:\inetpub\wwwroot\cgi\test.vbe" -ArgumentList $($queryValues.Get(`"HIKISU`"))))" 22Echo "$($queryValues.Get(`"HIKISU`"))"を渡してスクリプトを実行しました 23Echo "</BODY></HTML>" 24[System.Console]::Out.Write([char]0) 25[System.Environment]::Exit(0) 26

※上記VBEは、VDI基盤上に存在するVDを強制リセットするために、VDIのサービスプロバイダから
提供を受けているものです。この強制リセットを、利用者からWEB経由で実行できるようにしたいというのが
そもそもの発端です。PowerShell CGI を利用しているのは、サーバー側にインストールが不要で利用できるため、と
私がBATやPowershellぐらいしか理解できていないためです。。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

archiver

2019/05/09 11:53

動かそうとしているVBEスクリプトはVDIのサービスプロバイダから提供されたものだそうですが、提供された際、使い方とかはサービスプロバイダから提示されていないのでしょうか? また、提供元のサービスプロバイダに問い合わせて、回答は得られなかったのでしょうか?
ayuzer

2019/05/09 22:23

ご指摘ありがとうございます。本来はWEB経由ではなく管理者が手動で実行する用途のものです。 WEBからユーザーによってセルフ実行できるような仕組みを作りたいため、別途上記のような工夫を行っているといった格好です。サービスプロバイダから提供されたVBEによらず、自身で作成したダミーのVBEも上記コードから実行できないので、VBEそのものの問題ではありません。
archiver

2019/05/14 14:43

ちなみに、VBEを指定して実行させた時にどんなエラーが出ますか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問