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ぐらいしか理解できていないためです。。
あなたの回答
tips
プレビュー