为什么任务计划程序作业无法访问映射的网络驱动器?

为什么任务计划程序作业无法访问映射的网络驱动器?

我有一个任务计划程序作业,用于运行 Robocopy 以将本地文件备份到网络共享。我必须使用域凭据来访问网络共享,但本地计算机不在域中,并且该作业以本地管理员身份运行。此解决方案临时映射和取消映射网络共享是可行的,但它会让我的密码以纯文本形式暴露给任何查看任务计划程序作业操作的人。我更愿意以半永久的方式正常映射网络驱动器,这样任务计划程序作业只需运行 Robocopy 并引用相应的驱动器号。但是,当我从任务计划程序运行此操作时,我总是在 Robocopy 日志中收到错误“系统找不到指定的路径。”,即使该命令在提升的命令提示符下运行良好(作业设置为以最高权限运行)。另请注意,我已经完成了此注册表调整从提升的命令提示符访问映射驱动器。

编辑:澄清一下,以本地管理员身份登录后,我以管理员身份启动 Windows 资源管理器。我将网络共享映射到驱动器号 Y。我以管理员身份启动命令提示符并运行

C:\Windows\System32\Robocopy.exe C:\temp Y:\temp

运行良好。我创建了一个任务计划程序作业,以最高权限运行完全相同的命令,无论用户是否登录。我运行它并收到错误。我写入日志并得到

ERROR 3 (0x00000003) Getting File System Type of Destination Y:\temp\
The system cannot find the path specified.

其次是

ERROR 3 (0x00000003) Creating Destination Directory Y:\temp\
The system cannot find the path specified.

答案1

映射驱动器是一种用户界面概念,不适用于此类后台任务。通过 UNC 访问目标,并确保运行任务的用户有权访问目标。

答案2

就我而言,我要做的就是取消选中该run with highest privileges标志,但我以与映射驱动器的用户相同的用户身份运行该任务。

答案3

尝试使用:

pushd \\machine\share

在计划任务的批处理文件中。网络共享驱动器仅在用户运行的环境中可用。“pushd”将允许它在脚本的上下文中运行。

完成后使用:

popd \\machine\share

取消驱动器映射。

参考:https://blog.adrianbanks.co.uk/windows/2007/03/08/accessing-network-file-shares-from-a-command-prompt.html

答案4

另一个选择是仅使用完整的网络路径,因为 Robocopy 支持它们。即 robocopy c:\temp \\server\share\temp

或者更好的是,在服务器本身上运行备份。创建一个域管理员帐户,仅用于备份过程。将只有域管理员才能访问的文本文件中的密码提供给 robocopy。

几年前,我创建了几个 .cmd 脚本,用于通过这种方式备份网络上每个系统的重要文件。我使用的唯一外部程序是 Cgywin 的 Grep 命令和命令提示符 smtp 邮件发送程序。

我编写了一个脚本,用于扫描网络中的系统。它将创建一个包含所有系统名称的文本文件,并通过电子邮件提醒我它发现的任何新系统。(我有一个配置文件,它会解析系统以跳过它。)每个新系统都为其创建了一个备份目录,并在其中放置了一个备份配置文件。用户可以修改此文件并列出需要备份的任何目录。他们还可以指定备份的时间,这样就不会在他们在办公室时发生备份。我每 5 分钟在服务器上运行一次此脚本,因为它不占用任何处理时间,而且我喜欢当新系统插入网络时提醒我的安全功能。

另一个脚本将解析所有单独的备份配置文件并安排任务在该系统上运行备份。该脚本每天凌晨 12:01 运行。

最后,备份脚本将解析调度程序传递给它的配置文件,并使用 robocopy 复制所有文件。我对配置文件进行了全面的错误检查,因为用户会编辑它们,而且我会收到有关任何问题的电子邮件。

用户可以读取备份文件,但不能删除备份。这在一定程度上可以防止员工心怀不满造成损害。

也许可以用 .vbs 或 powershell 制作更优雅的东西,但我并不是真正的程序员。我的编程课包括 Cobal 和 JCL。我记得我离开时复制了脚本,但谁知道它们现在在哪里。

相关内容