У меня есть простая задача, которая для целей тестирования состоит из командного файла из двух строк:

whoami >result1.txt
copy \\server\share\test1.txt C:\Users\xxx\Documents > output.txt 2> error.txt

Когда я запускаю это из интерактивного входа в систему, он работает нормально, потому что у меня есть учетные данные домена, которые дают мне доступ к общему ресурсу.

Когда я запускаю его из планировщика заданий, он не работает. Первая команда завершается успешно (и, кстати, демонстрирует, что запланированная задача выполняется с моей личностью), но вторая команда терпит неудачу, предположительно потому, что она не использует правильные учетные данные для подключения.

После того, как задача выполняется, error.txtпусто и output.txtсодержит "Access is denied."Там нет никакой полезной информации в истории задач - просто Action Completedи Last Run Resultиз (0x1)потому что копия не удалась.

Общие параметры в свойствах запланированной задачи предназначены для запуска с моей учетной записью пользователя домена и для «Запускать независимо от того, вошел ли пользователь в систему или нет». Я пробовал как с набором «Запускать с наивысшими привилегиями», так и без него - похоже, ничего не меняет. Я также попытался изменить параметр «Настроить для» - снова безрезультатно. «Не сохранять пароль» не проверяется, но я пробовал проверить его только на полноту, и это не меняет поведения.

На стороне сервера я проверил журнал событий безопасности. Когда команда терпит неудачу, я вижу событие Audit Success Anonymous Logon logon, запись Audit Failure, которая выглядит так, как будто анонимный вход пытается использовать SeBackupPrivilege:

A privileged service was called.

Subject:
  Security ID:      ANONYMOUS LOGON
  Account Name:     ANONYMOUS LOGON
  Account Domain:       NT AUTHORITY
  Logon ID:     0x180e12c36

Service:
  Server:   Security
  Service Name: -

Process:
  Process ID:   0x4
  Process Name: 

Service Request Information:
  Privileges:       SeBackupPrivilege

а затем сеанс анонимного входа в систему аудита успехов уничтожен.

Клиент - Windows 10, а сервер - Windows 2008 R2. Учетные данные - это учетная запись пользователя домена в Active Directory.

Если я использую другой сервер, Windows Server 2016, на котором запущены IIS и WebDAV, то задача отлично работает через планировщик задач. Итак, при использовании WebDAV мои учетные данные используются, а при использовании CIFS - нет.

Может ли кто-нибудь объяснить, почему копия не работает и есть ли обходной путь? Какие-нибудь дальнейшие шаги для тестирования? Я заставил его работать, жестко закодировав учетные данные в пакетном файле, но, очевидно, это не совсем приемлемо.

Было высказано предположение, что эта политика может быть актуальной, но она отключена, поэтому я не думаю, что это так:

Network access: Do not allow storage of passwords and credentials for network authentication

at

Computer Configuration\Windows Settings\Security Settings\Local Policies\Security Options
answer

Я видел больше анекдотических свидетельств того, что разрешения в интерактивном режиме ведут себя иначе, чем в запланированной задаче. И сообщение журнала событий, кажется, указывает на то, что ему требуется seBackupPrivilige (что, вероятно, действительно означает, что он хочет изменить владельца объекта).

Помещение пользователя, под которым вы запускаете задачу, во встроенную локальную группу, такую ​​как операторы резервного копирования на целевом сервере, может помочь (у вас нет испытательного стенда для проверки этого, но если вы не уверены, начните с локального администратора на обоих серверах, а затем использовать устранение).

Теоретически вы также можете использовать объект групповой политики домена, чтобы установить аналогичные разрешения для конкретного пользователя или, что еще лучше, его группы.

РЕДАКТИРОВАТЬ: Вы пытались опустить или изменить вывод ошибки? Событие безопасности может быть отвлекающим маневром (например, NTLM auth всегда будет иметь неудачную анонимную запись).

Если я запускаю ваш скрипт, он выдает ошибку в запланированной задаче, потому что перед> output.txt и 2> error.txt нет пути, но это работает:

copy \\two.moh.local\test\test1.txt C:\temp\ > c:\temp\output.txt 2> c:\temp\error.txt

Ваш скрипт будет работать, если вы запустите его из командной строки или двойным щелчком, потому что он будет использовать родительский каталог, который работает по-другому, когда не работает в интерактивном режиме (я предполагаю, что он пытался написать где-нибудь, где у администратора домена есть разрешения, в то время как ваш пользователь не).

Прежде всего, «Ошибка планировщика заданий 0x1» его сложно отладить, и необходимо попробовать несколько решений, чтобы найти причину в вашей среде.

Прочитав вопрос и ответы, я предлагаю:

  1. Попробуйте явно указать все пути, используемые в файлах сценариев или пакетов. Не используйте короткий путь. Измените путь назначения C: \ Users \ xxx \ Documents на что-то вроде D: \ test.
  2. Попробуйте указать полный путь к файлам ошибок и выходным файлам.

Также я предлагаю проверить параметры на «вкладке действий». Старайтесь использовать кавычки на путях с пробелами.

Вы также можете найти ценную информацию об ошибке возврата 0x1 в этом источнике.