2

В общем, у меня есть этот VBScript, который открывает экземпляр Excel 2010, запускает в нем макрос и закрывает электронную таблицу. Я называю это, используя Запланированную Задачу, чтобы автоматизировать это. Он прекрасно работал, когда я работал в Windows XP, но недавно моя компания обновилась до Windows 7, и когда я попытался запланировать ее с помощью нового планировщика задач в Windows 7, задача застряла в состоянии выполнения, но ничего не запустилось, если я выбрал «Выполнить». вошел ли пользователь в систему или нет, с или без запуска с проверенными наивысшими привилегиями. Однако если я использую Run только когда пользователь вошел в систему, все работает нормально.

Вот несколько вещей, которые я пытался проверить / проверить проблему:

  1. Тот же сценарий может быть запланирован в Windows XP с запланированной задачей без необходимости входа пользователя. Сам скрипт, конечно, будет работать, когда я дважды щелкну по нему.

  2. Другой сценарий, который не использует экземпляр Excel, может быть запланирован без каких-либо проблем.

  3. Я создал файл .bat для вызова сценария VBS и использования планировщика задач Windows для планирования файла bat без удачи, файл bat - одна строка кода:

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

    Когда я запустил его, он показал, что задача была выполнена, но ничего не было ни запущено, ни запущено.

    Другие вещи, которые я пробовал, включают использование CMD в качестве программы ./script и /c запускают "" "C:\myscript.vbs" в качестве аргумента, или используют C:\Windows\System32\CScript.exe в качестве программы / сценария и //Nologo //B "C:\myscript.vbs" в качестве аргумента. Все без удачи.

  4. В этом случае Excel даже не запускался, так как я вижу, что в диспетчере задач нет дополнительного процесса Excel.

  5. Кажется, есть возможность запланировать задачу в режиме совместимости с Windows XP, но когда я попытался щелкнуть правой кнопкой мыши и выбрать "Свойства" на вкладке "Общие", единственное, что я вижу в разделе "Настроить для": это Windows 7 и сервер 2008 R2, второй Вариант - Windows Vista и сервер 2008.

  6. Моя учетная запись имеет права администратора на ПК.

Следовательно, есть ли какой-нибудь способ, которым я могу запланировать выполнение этого скрипта без необходимости входа в систему? Я открыт для любых вариантов. ПК на 64-битной Windows 7 Enterprise с установленным Excel 2010.

Заранее спасибо за помощь!

2 ответа2

1

Исправление проблем групповой политики с помощью файлов журнала

Включить ведение журнала для редактора объектов групповой политики на стороне клиента

[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/ Программы могут не иметь доступа к некоторым сетевым папкам после включения контроля учетных записей в Windows Vista или Windows 7

[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
0

У меня была такая же проблема, и я боролся с ней несколько месяцев. Наконец прибегли к помощи Microsoft за помощью. Я не смог бы найти это исправление, так что надеюсь, это поможет и другим. Скрипт работал бы нормально, когда я запустил его в Powershell (и командной строке), но когда он запустился как запланированная задача, он запустился, но не с ожидаемыми результатами. Microsoft сообщает мне, что моя проблема с запуском Excel в неинтерактивном режиме, вам нужно создать две директории.

  • Вы должны создать папку (или две на 64-битных окнах):

(32 бита, всегда) C:\Windows\System32\config\systemprofile\Desktop

(64 бит) C:\Windows\SysWOW64\config\systemprofile\Desktop

MS Excel, когда вы пытаетесь запустить в неинтерактивном режиме, будет искать это, если он отсутствует, он не будет открываться в неинтерактивном режиме.

после того, как они были созданы, запланированное задание выполняется без нареканий.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .