2017-02-10 6 views
1

背景:は、 "引数または無効なプロパティの割り当ての間違った数" を取得するJavaScriptからWScript.Shell.Runを()の実行時に

私はC実行しようとしています:上の\ WINDOWS \ System32に\ Logoff.exeをローカルマシンをASP.NET Webアプリケーションから削除して、ローカルユーザーをターミナルサービスセッションからログオフします。ここで

は、私がこれまで持っているものです。

C#

オープンIEのF12メニューで上記を実行する
protected void btnContinueClick(Object sender, 
         EventArgs e) 
    { 
     StringBuilder sb = new StringBuilder(); 
     sb.Append("WshShell = new ActiveXObject('WScript.Shell');\n"); 
     sb.Append(@"WshShell.Run('C:\\Windows\\System32\\Logoff.exe " + intSessionID + " /SERVER:" + strServer + "', 1, false);"); 
     ScriptManager.RegisterStartupScript(Page, GetType(), "RestartSession", sb.ToString(), true); 

、スクリプトが正常に私のHTMLに追加されますを示しています。

HTML

<script type="text/javascript"> 
//<![CDATA[ 
WshShell = new ActiveXObject('WScript.Shell'); 
WshShell.Run('C:\\Windows\\System32\\Logoff.exe', 1, false);//]]> 
</script> 
</form> 
</body> 

しかし、ファイル名を指定して実行(...)の行は、私はIEで次のエラーを取得する実行したとき:

Error: WshShell.Run() Wrong number of arguments or invalid property assignment 

私が試してみました何: "1、偽の" オプションを削除

  1. を引数=同じエラー。
  2. ''を移動すると、行が読み込まれます(どちらが正しいかわからない場合)。sb.Append(@"WshShell.Run('C:\\Windows\\System32\\Logoff.exe " + intSessionID + " /SERVER:" + strServer + ", 1, false);'"); =同じエラーです。
  3. logoffコマンドを使用して.batファイルを呼び出します。 (実際には.batは実行されますが、新しいエラーが発生します:"logoff is not recognized as an internal or external command, operable program or batch file"Call logoff in Ant scriptと非常によく似ています。
  4. エスケープ文字は、可能な限り多くの組み合わせが考えられます。
  5. CMDウィンドウから直接コマンドを実行
  6. が意図した仕事をしていません。

内部イントラネットのWebアプリケーションからユーザーのターミナルサービスセッションをログオフする任意の適切な代替方法もあることでしょう!

を助けてください大いに感謝!

+0

'Logoff'にはいくつかのパラメータが必要ですか? – Teemu

+0

私の計画は、この行を 'sb.Append(@" WshShell.Run( 'C:\\ Windows \\ System32 \\ Logoff。intSessionIDとstrServerは、ターミナルサービスセッションIDとサーバーホスト名の正しい値です。 –

+0

編集済みこれらのパラメータを表示する質問は、Webサーバーから実行するときに必要になると思います。 –

答えて

0

多くのバリエーションの後、私は実用的な解決策を持っています。この問題は、変数の受け渡しとエスケープ文字(たぶん些細なもの)を使っている可能性が最も高いですが、複数のプラットフォーム間で変数を渡す際に他の人を指し示す可能性があるため、回答を投稿しています。

C#

ScriptManager.RegisterStartupScript(Page, GetType(), "Logoff", $"Logoff(\"{intSessionID}\", \"{strServer}\");", true); 

はJavaScript

<script type="text/javascript"> 
    function Logoff(intID, strSvr) { 
     WshShell = new ActiveXObject("WScript.Shell"); 
     WshShell.Run("C:\\Users\\User\\Desktop\\Logoff.vbs" + " \"" + intID + "\" " + " \"" + strSvr + "\"", 1, false); 
    } 
</script> 

VBスクリプトは、カップル、他の監査ログラインと一緒に、オリジナルのLogoff.exeコマンドを実行します。

関連する問題