• 締切済み

ASPからサーバー上のVBSファイルを引数付で実行したい

お世話になっております。 ASPで指定名称のフォルダを作成しアクセス権を割り当てる サイトを作成しております。 フォルダの作成は問題なく作成できましたが、アクセス権の指定がうまくいかず困っております。 アドバイスいただければ幸いです。 前提として作成したフォルダへのアクセス権割り当ては、MSで公開しているxcacls.vbsファイルを利用してます。 http://support.microsoft.com/kb/825751/ja このVBSファイルに先に作成したフォルダのネットワークパス・アクセス権を与えるユーザー名・与える権限レベルを引数として与えASPのサーバー上で実行し処理を完結しようと考えております。 ------------------スクリプト抜粋---------------------- Set WSHShell = CreateObject("WScript.Shell") 'xcacls.vbsを実行 'strPathNm = "xcacls.vbs \\fileServer\testfol /G Domain\User:M /f /t /e /q" Call WSHShell.Run(strPathNm, 0, false) -------------------------------------------------------- サーバー上でコマンドプロンプトから実行する限りは問題なく 処理されてます。 ASPサイトから実行した場合は特にエラーなど表示されず処理終了しますが、アクセス権の割り当てはされません。 また実行時にサーバー上で実行されたかタスクマネージャーにて確認してますが、起動された形跡がありません。 ちなみにスクリプトの問題かと思い、「strPathNm」の編集への代入を、メモ帳や電卓に変更したところ正常に起動しております。 ※xcacls.vbsはサーバー上でパス通してあります。 以上よろしくお願いいたします。

みんなの回答

  • LegaC2
  • ベストアンサー率52% (224/428)
回答No.2

No.1です。 権限の件は、見当はずれみたいでしたね。 昨日は実行環境がありませんでしたが、今は実行環境があるので、自分の環境で試してみました。 そのままでは、権限は付与されませんでしたが、CScriptで実行するように変更したら、権限が変更されました。 以下にソースを記載しておきます。 <%Option Explicit%> <% Dim WSHShell Dim strPathNm Set WSHShell = CreateObject("WScript.Shell") 'xcacls.vbsを実行 strPathNm = "CScript ""C:\Program Files\XACLS\xcacls.vbs"" \\FileServer\testfol /G Domain\User:M /f /t /e /q" 'strPathNm = """C:\Program Files\XACLS\xcacls.vbs"" \\FileServer\testfol /G Domain\User:M /f /t /e /q" Call WSHShell.Run(strPathNm, 0, false) %> 私の場合は、パスを通していないので、フルパスで記載してあります。

shin1030
質問者

お礼

お返事遅くなりまして申し訳ございません。 ご回答いただいた方法で弊社環境で試してみましたが、残念ながら実行できませんでした。 原因究明にいたっておりませんが、どうもソースには問題なく(CScriptの追加は必要でしたが)フォルダにACLを割り当てる権限に問題があるようです。 表面的には管理者権限にて実行しているので問題ないはずですが、xcacls.vbsを実行するときはサイトにアクセスした時の権限がそのまま継承されて無いように見受けられました。 これ以上の調査は難しい為ASP上からの連続処理は断念し、 後日バッチ処理でカバーする方法で問題回避したいと思います。 お手数おかけいたしました。

  • LegaC2
  • ベストアンサー率52% (224/428)
回答No.1

見当違いの回答だったら、ごめんなさい。 (半分推測で回答します) IISの匿名ユーザは誰ですか? アクセス権を変更するぐらいですから、xcacls.vbsを実行するために、実行ユーザにもある程度の権限がいるのではないでしょうか? コマンドプロンプトで実行する場合は、Administrator権限があるので実行できるけど、ASPで実行する場合は、Administrator権限がないユーザで実行しているから実行できない、とか。

shin1030
質問者

補足

ご回答ありがとうございます。 実行権限は多分あると思います。 イントラにあるサーバーで、かつ別処理でADへの操作を行う関係上 匿名ユーザーは無しにしてあります。 ちなみに実行権限はサーバーローカルのAdministrator権限 ドメインもAdministrator権限を持ってます。

関連するQ&A

  • ASPで、サーバ上のスクリプトファイルの実行。

    こんにちは。よろしくお願いします。 環境 ASP Win2003、IIS6、SQLServer2000 イントラネット内環境のみのシステム クライアントPCでWebブラウザを起動して、とあるURLへアクセス。。。 ソースの中のVBS部分に書き込んでおいた、サーバ側のスクリプトファイルがキックされる。。。 サーバ上でスクリプトファイルが実行されてめでたしめでたし。。。 そんな事を思い描いていましたが。。。できませんでしたっけ??@w@; クライアントがアクセスするASPファイル hogehoge.asp -------------------- <% Dim objWsShell '##### Shellオブジェクトのインスタンス化 ##### Set objWsShell = Server.CreateObject("WScript.Shell") '##### シェルを起動する ##### Call objWsShell.Run("D:\abc\abc\Run.vbs", 1, false) '### Shellオブジェクトの破棄 ### Set objWsShell = Nothing %> <html lang="ja"> <head> <title>ほげほげ</title> </head> <body> ほげほげ </body> </html> -------------------- サーバ側に用意してあるスクリプトファイル Run.vbs -------------------- MsgBox "きっくされました。" -------------------- もしくは -------------------- obj.Run "notepad" (前後のobjのCreateあたりは省略。 -------------------- あたりにしても、うんともすんとも。。。 タスクマネージャーを確認すると、WScript、もしくは、Notepadのプロセス自体は動いているようなので、 キック自体は出来ている?ようなのですが、実行ユーザーが「NETWORK SERVICE」になっているため? 動いてはいないような感じに見えます。(CPUの数値が0固定なので。 該当のファイルのアクセス権限あたりは、NETWORK SERVICEに全権限あたえてみたりしたのですが、 自分の知恵じゃそろそろ方法が出なくなってきまして。。。 http://www.f-store.net/asp/parts-kubun.asp?MODE=START2&key=%82v%82r%82g 実際の、サーバ側に用意したスクリプトでは、さらに別のjsファイルをキックして、その中で、とあるWebページにアクセスして、 そのWebページのHTMLソースをテキストファイルとして保存する。という処理をさせています。 。。。サーバ上で、用意したスクリプトを実行すれば、希望通りの動きになるので、後は、上に書いた、クライアントのWebページからキックしたはずの スクリプトソースがちゃんと動けば。。。と思ってます。 やっぱセキュリティ関連に引っかかり。。。?それとも、何か自分がひどい思い違いをしている?? すみませんが、どなたかお知恵をお貸しください。よろしくおねがいします。m(_ _)m 参考:前質問 http://okwave.jp/qa/q6725891.html

  • VBS runas実行時のパスワードを隠す方法について

    VBS runas実行時のパスワードを隠す方法について こんにちわ! いつもお世話になっております。 VBSでIPアドレスを変更するスクリプト(netshコマンドを実行する)を作成しました。 このコマンドを実行するためには管理者権限が必要なため、runasコマンド+SendKeys にて、自動的にパスワードを入力して実行するような形になっております。(下記) -----・-----・-----・-----・-----・-----・-----・-----・-----・-----・----- shshell.Run "cmd.exe", 0 WshShell.Run "runas /user:%computername%\administrator ""コマンド""" WshShell.SendKeys("{Enter}") WScript.Sleep(1500) WshShell.AppActivate "C:\Windows\System32\runas.exe" WshShell.SendKeys("パスワード") WshShell.SendKeys("{Enter}") -----・-----・-----・-----・-----・-----・-----・-----・-----・-----・----- [質問] このスクリプトのパスワードの部分を隠すまたは暗号化する方法を教えてください。 [背景] このスクリプトを作成者と使用者が違います。作成者は、管理者のパスワードを 把握していますが、使用者には管理者権限のパスワードを知られたくありません。 つまり、スクリプトを見れば分かってしまうという状況は避けたいのです。 [調査状況] ・ネットワーク上にパスワードを格納したテキスト等を置いておき、それを  読み取る。⇒これは、今回実行するスクリプトがIPアドレスを変更するもの  であるため、ネットワーク上の端末から情報を得ることができません。 ・タスクに登録する。⇒タスクに登録するために使用者のコンピュータ上に  スクリプトをおく必要があるため、これも不可です。 ・スクリプト自体を暗号化する。⇒最終手段として考えてはいますが、できれば  スクリプト内で処理を行いたいというのが現状です。(監督者の要望のため) [実行環境] ・Windows7 皆様、お忙しいとは思いますが、ご教授いただけると助かります。 以上 よろしくお願い致します。

  • ASPからVBS実行時の権限

    ASPからWscript.Shellを使ってVBSを実行しているのですが、 ASP中のDBオープンには問題はないのですが、test.vbs中でオープンできません LOGファイルは"dbConnection-OK"までになっています。 権限の問題かどうかはわからないのですが、原因は何でしょうか? DBはODBC経由のSQLServerです。 ---------ASP-------------------------------------- <% Dim dbConnection Set dbConnection = CreateObject("ADODB.Connection") dbConnection.Open "testdb" dbConnection.Close Set dbConnection = Nothing '上記OPENに関して問題なし Dim WshShell Set WshShell = CreateObject("Wscript.Shell") WshShell.Run "cscript.exe e:\test.vbs 123", 0, True Set WshShell = Nothing %> <html> <head> <meta http-equiv="Cache-Control" content="no-cache" /> <title>Pipot.to</title> </head> <body> OK </body> </html> ---------test.vbs-------------------------------------- Dim ObjFSO Dim ObjTS Set ObjFSO = CreateObject("Scripting.FileSystemObject") Set ObjTS = ObjFSO.CreateTextFile("e:\log.txt") ObjTS.Write "LOG開始" Dim dbConnection Set dbConnection = CreateObject("ADODB.Connection") ObjTS.Write "dbConnection-OK" dbConnection.Open "testdb" ObjTS.Write "OPEN-OK" dbConnection.Close Set dbConnection = Nothing ObjTS.Close Set ObjTS = Nothing Set ObjFSO = Nothing

  • .html ファイルでasp実行?

    現状、Win2000Server+IIS5.0 上で、以下のようなファイルが動いています。 これを Win2003Server + IIS6.0に移行しているところなのですが、うまく動きません。 まず、index.aspで、index.htmlにリダイレクトし、index.htmlは表示されます。しかし、index.htmlの最初の行にある<!--#include Virtual = "/gl.asp"-->がインクルードされず、ブラウザに表示されたソースを見るとそのまま表示されてしまいます。 そもそも、.htmlなる拡張でaspが実行されるのかが疑問なのです。 ただ、現行サーバでは動いているんですが。 ちなみに新サーバ上でのIISマネージャのWeb拡張にてSSIやCGI、ASPは有効にしてあります。 次に、SSIを.htmlにマッピングしてみました(現行サーバではそうなっていませんが)。 結果、<!--#include Virtual = "/gl.asp"-->はインクルードされましたが、 gl.aspは実行されずそのまま読み込まれただけです。 つまり、ここでもPerlが実行されないまま、単にインクルードされたに過ぎないのです。 Perlでのスクリプトも単独では動作しているのは確認しております。 新サーバ上で、どのような設定が必要なのかが判りません。どなたかお知恵をお貸しください。 よろしくお願いします。 ****************************** [ファイル名 index.asp] <% リダイレクトの為のスクリプト%> ******************************* [ファイル名 index.html] <!--#include Virtual = "/gl.asp"--><% %> <html ・・・ 以下省略(これ以降もHTMLタグとASPスクリプトの混在したものが続く) ************************* [ファイル名 gl.asp] <script language="PerlScript" runat="Server">Perlスクリプト</script> <% ・・・ 以下省略(これ以降もサーバー側ASPに関する記述が続く)に関する記述が続く)

  • JP1からvbs(PSExec)が起動できない

    突然失礼します。 以下のサーバーAにあるvbsを、JP1から起動しようとしていますが、うまく起動しないので、もし原因が分かる方がいたら、ご教授願いたいです。 起動しようとしているサーバーAの「test.vbs」は、簡単に言うと、PsExecを利用して、サーバーBの「hoge.bat」を実行する内容です。 ***test.vbs*** Set WshShell = WScript.CreateObject("WScript.Shell") WshShell.Run "PsExec.exe サーバーBIPアドレス -u 実行ユーザ -p 実行ユーザーパスワード cmd" WshShell.AppActivate "cmd " WScript.Sleep 3000 WshShell.SendKeys "cd C:\" WshShell.SendKeys "{enter}" WshShell.SendKeys "hoge.bat" WshShell.SendKeys "{enter}" WScript.Sleep 10000 WshShell.AppActivate "cmd" WshShell.SendKeys "exit" WshShell.SendKeys "{enter}" ************************ 上記バッチを手動で実行するとうまくいくのですが、 JP1で起動しようとすると、うまくいきません。 そもそもPsExecが実行出来ていないかも。。。。 宜しくお願いします。

  • vbsスクリプト作成について

    いつもありがとうございます。 今回、知識がないのですが下記のような処理のVBSを作成したく調べております。 (1)test.vbsファイルを実行時にvbsファイルと同じディレクトリに「folder」フォルダを作成 (2)作成した「folder」フォルダにサービス「idsvc」の状態をテキスト形式で「service.txt」として出力 (3)上記と同様の処理(service.txtはリネームする)を現在ログインしているユーザのスタートアップに「start.vbs」として配置 (3)上記処理後、再起動を実施 (4)再起動後、start.vbsを実行後に自動削除 大きく分けて4つの処理を個別に作成して最終1つのファイルとして作成しようと思っております。 なんとかわからいなりに作成してはいるのですが どうしても下記方法がわかりません。 (2)の処理「folder」を作成後、service.txtのパス(最下位行)を変数に入れて出力する方法 (きたないソースで申し訳ないです) ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ ' フォルダ作成 '---------------------------------------------- Dim str_Path Dim objFdr Set objFdr = CreateObject("Scripting.FileSystemObject") str_Path = objFdr.CreateFolder(".\folder") Dim WshShell Set WshShell = CreateObject("WScript.Shell") Set objLog = WshShell.Exec("cmd /C ""sc query idsvc | findstr -i state > .\folder\service.txt""") ※サービス出力はvbsでの方法がわからなかったのでcmdを呼び出しています。 (4)再起動後の処理にて、再起動前に作成したフォルダに「service.txt」を出力する方法 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ objVBSFile.WriteLine("On Error Resume Next") objVBSFile.WriteLine("Dim WshShell") objVBSFile.WriteLine("Set WshShell = CreateObject(""WScript.Shell"")") objVBSFile.WriteLine("Set objLog = WshShell.Exec(""cmd /C """sc query idsvc | findstr -i state >C:\services.txt"""")") objVBSFile.WriteLine("Set objFSO = CreateObject(""Scripting.FileSystemObject"")") objVBSFile.WriteLine("objFSO.DeleteFile WScript.ScriptFullName") 他にもわからないことはありますが、調べてなんとかなるとおもっておりますが 上記についてはVBSの理解不足なため、つかめません。 申し訳ありませんが、アドバイス頂けないでしょうか。 以上、宜しくお願い致します。

  • Windowsのファイルサーバーについて

    Windows2003にてファールサーバーの構築を行い、サーバー側でユーザーを作成し、適当なフォルダを作成し、アクセス権を付与しました。 クライアント側からのファイルサーバーへのアクセス方法は、どのように行えばよいですか? ファイル名を指定して実行にて、「\\サーバー名\共有フォルダ」でコマンドでよろしいですか?

  • コピーするVBS

    ファイルサーバーからファイルをデスクトップにコピーするVBSを下記のように作成しています。 Set objFSO= CreateObject("Scripting.FileSystemObject") objFsoCopyFile("\\server\public\test.mdb","C:\Documents and Settings\user\デスクトップ",true) この中で、「C:\Documents and Settings\user\デスクトップ」はパソコンごとに異なりますので、 それぞれのPCのデスクトップをしてする方法を探しています。 ネットで、デスクトップという類のフォルダの取得として Dim WshShell As Object Set WshShell = CreateObject("WScript.Shell") WshShell.SpecialFolders("Desktop") を絡めれば出来るようなことがありましたが、使い方をどなたか教えてください。

  • vbsのショートカット作成で、引数に不具合がでる

    あるプログラムに対し、ショートカットを vbsで作成したいのですが、 リンク先の引数で不具合が発生します。 具体的には KeePassというアプリケーションで、 Database.kdeを開き、パスワードにpassを指定する、というものです。 "C:\...\KeePass.exe" "Database.kdb" -pw:"pass" vbsのソースはこちらです ------------------------------------------------------------ Dim WshShell, fso, ShrCut Set WshShell = WScript.CreateObject("WScript.Shell") Set fso = WScript.CreateObject("Scripting.FileSystemObject") Set ShrCut = WshShell.CreateShortcut(WSHShell.CurrentDirectory & "\KeePass.lnk") ShrCut.TargetPath = WSHShell.CurrentDirectory & "\KeePass.exe"" ""Database.kdb"" -pw:""pass" ShrCut.WorkingDirectory = WSHShell.CurrentDirectory ShrCut.IconLocation = WSHShell.CurrentDirectory & "\KeePass.exe" ShrCut.Save ------------------------------------------------------------ ショートカット作成後に実行すると、"passを探しています と表示されますが、 ショートカットのプロパティを開き、リンク先をコピペで更新すると、動作します。 宜しくお願い致します。

  • ASPからWscriptを利用して外部ファイル起動時のエラー

    他の掲示板で投稿されていた質問ですが、同様の現象に はまっています。ご存知でしたらご教授ください。 以下、引用。 環境:Windows XP SP2 , IIS5.1 サンプルプログラム: 1.test.asp  (Wscript.Shell.Runで同じフォルダにあるバッチファイルを実行) ----------------------------------------- <%@Language=VBScript%> <% Option Explicit dim WshShell Set WshShell = Server.CreateObject("WScript.Shell") WshShell.Run "C:\wsh\test.bat" Set WshShell = Nothing %> aaaaa ----------------------------------------- 2.test.bat   (同じフォルダのテキストファイルに文字列を出力) ----------------------------------------- echo aaa > c:\wsh\testbat.txt ----------------------------------------- 現象: 実行したところ、以下のエラーが発生します。 ----------------------------------------- Microsoft VBScript 実行時エラー (0x800A0046) 書き込みできません。 /wsh/test.asp, line 6 ----------------------------------------- 試したこと: 1.バッチファイルを実行する箇所をなくしたASPを作成   ⇒ 正常に動きました 2.他の環境での確認   ⇒ Windows2000Server : 正常に動きました     後輩のXP SP2    : 同様のエラーが発生しました 3.仮想フォルダの匿名アクセスのチェックを外す   ⇒ 正常に動きました 4.IUSR_,IWAM_ユーザーにAdministrators、Users,Guests等の権限をふる   ⇒ 同様のエラーが発生しました 5.ASPファイルなどを格納しているフォルダにIUSR_、IWAM_を追加し   フルコントロールの権限を与える   ⇒ 同様のエラーが発生しました

専門家に質問してみよう