WebサイトからVBScriptを実行する方法
質問
VBScriptファイルがあります。コンピューター上では正常に動作します。ボタンクリックによって実行されるように、PHPサイトに置きたいと思います。しかし、私は成功していません。実際にコンピューター情報を取得します。ユーザーマシンで機能することを期待しています。どんなアイデアも感謝します。 JScriptでそれを行う方法を知っている場合、または誰かが知っている場合
これがコードです:
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colSettings = objWMIService.ExecQuery _
("Select * from Win32_OperatingSystem")
For Each objOperatingSystem in colSettings
Wscript.Echo "OS Name: " & objOperatingSystem.Caption
Wscript.Echo "Version: " & objOperatingSystem.Version
Wscript.Echo "Available Physical Memory: " & _
objOperatingSystem.FreePhysicalMemory
Next
Set colSettings = objWMIService.ExecQuery _
("Select * from Win32_ComputerSystem")
For Each objComputer in colSettings
Wscript.Echo "Total Physical Memory: " & _
objComputer.TotalPhysicalMemory
Next
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colSettings= objWMIService.ExecQuery _
("SELECT * FROM Win32_DiskDrive")
For Each objItem In colSettings
WScript.Echo "Disk Size: " & objItem.Size
Next
Dim WSHShell
Dim objAdr
On error resume next
Set WSHShell = WScript.CreateObject("WScript.Shell")
test = wshshell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names")
If err.number > 0 Then
msgbox "SQL Server not found"
else msgbox "SQL Server found"
end if
解決
あなた(特にクロエの上司)が同意した場合、それは
- Webサイトは、クライアントのコンピューターをスパイしてはなりません
- ユーザーは、インストールしようとしているソフトウェアのシステム要件を少し支援する権利があります
- そのようなヘルプには、セキュリティ設定の低下を伴うべきではありません
あなたのオプションはです
- 要件をリストし、それらを決定する方法を詳細に指示する
- Windows:ユーザーに(ダウンロードする)HTAのソースを提供します(HTMLアプリケーション)適切なレポートを生成/表示します
- unix/linux:適切なレポートを生成/表示するスクリプトのソース(少なくとも2つの一般的な言語を選択する)をユーザーに提供します(ダウンロードする)
- とにかく要件を確認するインストーラーを書くと、それらのチェックを独立した「要件を確認する」アプリケーションにバンドルすることができます
HTAが適切になると判断した場合は、そうすることで、この答えに追加します。
あなたを始めるために:
ミニマルなsysreq.hta:
<html>
<head>
<title>System Requirements For XXX</title>
<hta:application
id="sysreq"
></hta>
<script type="text/vbscript" src="sysreq.vbs"></script>
<script type="text/jscript" src="sysreq.js"></script>
</head>
<body onload="onload">
<table id="tblSysReq" border="1" summary="KeepTidyHappy">
<tr>
<td id="tdOS">
</td>
</tr>
<tr>
<td id="tdMSSQL">
</td>
</tr>
</table>
</body>
</html>
制作バージョンの場合、HTMLエディター/IDEを使用して素敵なページを作成し、HTA要素を挿入する必要があります。むしろ時代遅れです ウィザード これにより、HTA固有の(インタラクティブ)要素/コードをHTMLに入れるのに役立ちます。一部のMSインストールCD/DVD/ISOには、さらにインスピレーションを得るために使用できるセットアップが含まれています。一部のGoogleingは、.htaアプリのようなものを指摘します システムドキュメンターウィザード. 。これらのソースはどれも、シングルステップテストに注意することなく信頼されるべきではありません。例:私は.htaから始めました 公式のドキュメント そして、私が厄介なものをザッピングするまで、Windows7でそれを実行することができませんでした <meta http-equiv="x-ua-compatible" content="ie=9">
.
おそらく、Scriptのインラインに.htaにインラインを含めることができますが、SRC属性を介してコードを含めることをお勧めします。 sysreq.vbs:
Sub onload()
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colSettings = objWMIService.ExecQuery("Select * from Win32_OperatingSystem")
For Each objOperatingSystem in colSettings
' Wscript.Echo "OS Name: " & objOperatingSystem.Caption
document.getElementById("tdOS").innerText = "OS Name: " & objOperatingSystem.Caption
Next
If False Then
Dim WSHShell : Set WSHShell = CreateObject("WScript.Shell")
On error resume next
' test = wshshell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names")
test = wshshell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL\SQLEXPRESS")
If 0 <> Err.Number Then
' msgbox "SQL Server not found"
MsgBox Err.Description
test = "SQL Server <b>not</b> found"
Else
' msgbox "SQL Server found"
test = "<i>SQL Server found</i>"
End If
document.body.all("tdMSSQL").innerHTML = test
Else
JsHelper
End If
End Sub
私はあなたが公開したコードに従ってみました。必要な変更は、wscript.echo出力をHTML要素 'Innertext/HTMLに「書き込み」して、どちらかを使用して置き換えることです。 document.getElementById()
また document.body.all()
.
情報の収集のためのアイデア/サンプルコードを取得するには、次のようなツールを見てください スクリプトです. 。 jscriptに言及したように、私はsysreq.jsを投げます:
function JsHelper() {
var WSHShell = new ActiveXObject("WScript.Shell")
try {
var test = WSHShell.RegRead("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Microsoft SQL Server\\Instance Names\\SQL\\SQLEXPRESS");
document.all.tdMSSQL.innerHTML = "<i>SQL Server found</i>";
}
catch(e) {
alert(e);
document.all.tdMSSQL.innerHTML = "SQL Server <b>not</b> found";
}
}
JScriptとVBScriptコードを比較して、同じ問題を扱ってください。
これが価値があることのために - 私 これをWindows XPでテストし、非適切なユーザーアカウントを使用して7でテストしました。私は願います 君の 走行距離は変化しない場合があります。
wrt chloeの質問「同じHTAに2つの異なるスクリプト言語を入れることは可能ですか?」:.htas(および.wsfsまたは.wscs)では、すべての(インストール)ActiveScript言語(VBScript、JScript、Perlscript、pythrict、RubyScriptを混ぜることができます、...)インラインまたはSRC属性を介してスクリプトタグを使用します。これは学習に最適ですが、一般に生産コードには適していません。
他のヒント
わかりました、私たちがあなたが望むものが可能な世界に住んでいるふりをしましょう:
- 世界のすべてのWebサーバーは、クライアントマシンにコードをダンプして実行できます
- あなたのマシンは、ウェブサーバーが望むものを何でも喜んで実行します
- ユーザーが知らなくても静かに行います。
- このVBスクリプトコードを実行できるように、世界のすべてのマシンをWindows PCに魔法のように変えます
- 皮肉検出器はウェブ上で一般的になり、前の4ポイントがそのように読み取られます。
Webブラウザーは、Snoopコードがやろうとしている虐待的なことのタイプを正確に防ぐためにロックされています。
外部jsファイルのように外部のvbscriptファイルを含めることができますが、特別な特権を備えたWindows環境でのみIEで実行されます。
ActiveXObjectを使用してクライアントマシンから実行可能ファイルを実行でき、ブラウザが実行するための適切なアクセス許可を使用して、実行可能ファイルをクライアントマシンにインストールする必要があります。
ActiveXObjectを使用したJavaScriptの例:
var shellActiveXObject = new ActiveXObject("WScript.Shell");
shellActiveXObject.CurrentDirectory = currentFolder;
shellActiveXObject.Run(executableFullPath, 1, false);
shellActiveXObject = null;