У меня простая задача, которая для целей тестирования состоит из командного файла с двумя строками:
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
Я видел больше анекдотических свидетельств того, что разрешения в интерактивном режиме ведут себя иначе, чем в запланированной задаче. И сообщение журнала событий, кажется, указывает на то, что ему нужен seBackupPrivilige (что, вероятно, действительно означает, что он хочет изменить владельца объекта).
Помещение пользователя, с которым вы запускаете задачу, во встроенную локальную группу, такую как операторы резервного копирования на целевом сервере, может помочь (у вас нет испытательного стенда для проверки этого, но если вы не уверены, начните с локального администратора на обоих серверах, а затем использовать устранение).
Теоретически вы также можете использовать объект групповой политики домена, чтобы установить аналогичные разрешения для конкретного пользователя или, что еще лучше, его группы.
EDITED: вы пытались опустить или изменить вывод ошибки? Событие безопасности может быть отвлекающим маневром (например, 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» его сложно отладить, и необходимо попробовать несколько решений, чтобы найти причину в вашей среде.
Прочитав вопрос и ответы, я предлагаю:
Также я предлагаю проверить параметры на «вкладке действий». Попробуйте использовать кавычки на путях с пробелами.
Вы также можете найти ценную информацию об ошибке возврата 0x1 на этом источник