0

通常のユーザー権限で実行する vbs スクリプトをスケジュールしようとしています。ユーザーとしてログインするとスクリプトは正常に実行されますが、タスクスケジューラから「ユーザーがログオンしているかどうかに関係なく実行する」としてスクリプトを実行しようとすると、次の行でスタックします。

Set IE = CreateObject("InternetExplorer.Application")

「最上位の権限で実行する」にチェックを入れて、チェックを外して実行してみました。私はタスクスケジューラからプログラムを次のように実行しています:

program/script: "c:\windows\system32\cscript.exe"
arguments: "test.vbs"
start in: c:\

完全なコードは次のとおりです。

Set fso = WScript.CreateObject("Scripting.Filesystemobject")
set tfo = fso.createTextFile("c:\123.txt")
tfo.writeline("1")
Set IE = CreateObject("InternetExplorer.Application")
tfo.writeline("2")
tfo.close

「ユーザーがログオンしているときにのみ実行」として実行した場合の出力:

1
2

「ユーザーがログオンしているかどうかにかかわらず実行する」として実行した場合の出力:

1

さらに、管理者アカウントを使用すると、タスクは「ユーザーがログオンしているかどうかに関係なく実行する」として正しく実行されますが、解決策として管理者アカウントを使用できません。

4

1 に答える 1

1

ユーザーに「バッチ ジョブとしてログオン」権限を付与する必要があります。これは、GUI を介して行うことができます。

  • 始めるgpedit.msc
  • [コンピューターの構成] → [Windows の設定] → [セキュリティの設定] → [ローカル ポリシー] → [ユーザー権限の割り当て]に移動します。
  • 「バッチジョブとしてログオン」権限をダブルクリック
  • ユーザー アカウントを追加する
  • 「OK」をクリックして閉じますgpedit.msc

またはコマンドラインで:

ntrights +r SeBatchLogonRight -u domain\username

ntrights.exeWindows Server 2003 Resource Kit Toolsの一部ですが、 Windows 7 でも動作します。パッケージ全体をインストールする必要はありません。代わりに、たとえば7-zipを使用しrktools.msiて、rktools.exe.

編集:すでにそれを行っているので、ユーザーがログオンしていないときにインタラクティブなデスクトップがないため、おそらくスクリプトがGUIアプリケーションを生成できないことが問題です。スクリプトにデバッグ コードを追加してみてください。

...
On Error Resume Next
Set IE = CreateObject("InternetExplorer.Application")
If Err Then tfo.writeline Err.Number & vbTab & Err.Description
On Error Goto 0
...

このコード スニペットをテスト実行すると、「許可が拒否されました」というエラーが表示されました。どうやら制限されたユーザーは、スケジュールされたタスクで IE インスタンスを作成できません。

とはいえ、Internet Explorer オブジェクトで何を達成しようとしているのでしょうか。バックグラウンド タスクには、を使用するXMLHttpRequest方が適している場合があります。

于 2013-04-06T12:16:14.307 に答える