web-dev-qa-db-ja.com

Windows 764ビットスケジュールタスクのVBScript-ログイン時にのみ実行されます

つまり、基本的に、Excel 2010インスタンスを開き、その中でマクロを実行してスプレッドシートを閉じるこのVBScriptがあります。私はそれを自動化するためにスケジュールされたタスクを使用してそれを呼んでいます。 Windows XPを使用していたときは問題なく実行されましたが、最近会社がWindows 7にアップグレードし、Windows 7の新しいタスクスケジューラを使用してスケジュールしようとすると、タスクは実行ステータスのままになりましたが、[実行]を選択すると何も実行されませんでしたユーザーがログインしているかどうか、実行の有無にかかわらず、最高の特権がチェックされます。ただし、ユーザーがログオンしているときにのみ実行を使用すると、すべてが正常に実行されます。

これが私が問題をテスト/検証しようとしたいくつかのことです:

  1. 同じスクリプトをWindows XPで、スケジュールされたタスクを使用して、ユーザーがログオンしなくてもスケジュールできます。もちろん、スクリプト自体は、ダブルクリックすると機能します。

  2. Excelインスタンスを使用しない別のスクリプトは、問題なくスケジュールできます。

  3. VBSスクリプトを呼び出すための.batファイルを作成し、Windowsタスクスケジューラを使用してbatファイルをスケジュールしました。batファイルは1行のコードです。

    C:\ Windows\System32\CScript.exe // Nologo // B "C:\ myscript.vbs"

    私がそれを実行したとき、それはタスクが完了したことを示しましたが、何も起動も実行もされませんでした。

    私が試した他のことには、プログラムとしてCMDを使用することが含まれます。/scriptおよび/ c start "" "C:\ myscript.vbs"を引数として使用するか、C:\ Windows\System32\CScript.exeをプログラム/スクリプトとして使用して// Nologo // B "C:\ myscript.vbs"を引数として。すべて運がない。

  4. この場合、タスクマネージャーに追加のExcelプロセスがないことがわかるため、Excelは起動されませんでした。

  5. Windows XP)との互換モードでタスクをスケジュールするオプションがあるようですが、右クリックして[プロパティ]を選択しようとすると、[全般]タブで[構成]に表示されるのは次のとおりです。はWindows7とサーバー2008R2で、2番目のオプションはWindowsVistaとサーバー2008です。

  6. 私のアカウントにはPCの管理者権限があります。

したがって、ログオンせずにこのスクリプトを実行するようにスケジュールする方法はありますか?私はどんな選択肢も受け入れます。 PCは、Excel2010がインストールされたWindows7 Enterprise64ビット上にあります。

よろしくお願いします!

2
zhuanyi

ログファイルを使用してグループポリシーの問題を修正する

グループポリシーオブジェクトエディターのクライアント側の拡張機能のログを有効にする

[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon]
GPTextDebugLevel REG_DWORD 0x30002

0 /ログを参照:

 %windir%\debug\usermode\gptext.log

1/32ビット実行vbscript:

%windir%\syswow64\cscript.exe "C:\myscript.vbs"

2/ WindowsVistaまたはWindows7でユーザーアカウント制御をオンにした後、プログラムが一部のネットワークロケーションにアクセスできない場合があります

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System]
"EnableLinkedConnections" REG_DWORD 1

3/UACを無効にする

コマンドライン:

vbs-32.cmd ExcelSheetName.vbs ExcelSrc.xls

vbs-32.cmd:

SET WSH32=%windir%\SysWOW64\cscript.exe
%WSH32% %*

SheetName.vbs:

'Microsoft ActiveX Data Object 2.8 Library
'Microsoft ADO Ext. 2.8 for DDL And Security

Const ArrSize = 100
Dim ArrSheetName()
ReDim ArrSheetName(ArrSize)
IndexArr = 0

IF WScript.Arguments.Count = 0 Then
        WScript.Echo "Script Usage:"
        WScript.Echo "%windir%\SysWOW64\cscript.exe ExcelSheetName.vbs [Excel file full path]"
        WScript.Echo "%windir%\SysWOW64\cscript.exe ExcelSheetName.vbs D:\Office\ExcelSrc.xls"
       Wscript.Quit(10)
End If

Dim ExcelFileName
ExcelFileName=WScript.Arguments(0)

Dim ADOCatalog, ADOTable, ADODBConnection

Set ADOCatalog      = Createobject("ADOX.Catalog")
Set ADOTable        = Createobject("ADOX.Table")
Set ADODBConnection = CreateObject("ADODB.Connection")

Dim strConnString, strSheetName

strConnString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & ExcelFileName & ";Extended Properties=Excel 8.0;"

ADODBConnection.Open strConnString
Set ADOCatalog.ActiveConnection = ADODBConnection

For Each ADOTable In ADOCatalog.Tables
strSheetName = ADOTable.Name
strSheetName = Replace(strSheetName, "'", "")
strSheetName = Left(strSheetName, InStr(1, strSheetName,"$", 1)-1)
'Wscript.Echo strSheetName
ArrSheetName(IndexArr)=strSheetName
IndexArr=IndexArr+1

Next
ReDim Preserve ArrSheetName(IndexArr-1)

ADODBConnection.Close

Set ADOCatalog      = Nothing
Set ADOTable        = Nothing
Set ADODBConnection = Nothing

For Each ArrValue in ArrSheetName
    Wscript.Echo ArrValue
Next
1
STTR

私は同じ問題を抱えていて、数ヶ月間それと戦いました。最後に、Microsoftに電話して支援を求めました。修正は私が今までに見つけたものではないので、うまくいけば、これは他の人にも役立つでしょう。スクリプトは、Powershell(およびコマンドライン)で起動すると正常に実行されますが、スケジュールされたタスクとして起動すると実行されますが、期待される結果は得られません。 Microsoftから、Excelを「非対話型モード」で実行することに問題があるとの連絡がありました。2つのディレクトリを作成する必要があります。

  • フォルダを作成する必要があります(64ビットウィンドウでは2つ)。

(32ビット、常に)C:\ Windows\System32\config\systemprofile\Desktop

(64ビット)C:\ Windows\SysWOW64\config\systemprofile\Desktop

非対話型モードで実行しようとしているMSExcelはこれを探しますが、存在しない場合は非対話型モードで開きません。

これらが作成されると、スケジュールされたタスクは問題なく実行されます。

1
Greg