为什么Task Scheduler作业无法访问映射的网络驱动器?


24

我有一个任务计划程序作业来运行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.

您的本地路径或网络路径中是否包含空格?如果是这样,你是否在路径的开头和结尾用双引号封装路径?
Sun

@SunWKim在任一路径中都没有空格。
Craig W

您用于执行从本地到网络的备份的命令行是什么?您要备份哪种网络共享?让我想一想,执行备份命令时,网络共享可能不可用(未连接)。
Sun

它是以您的用户身份运行还是仅仅是“管理员”。如果是您的用户,是否会为您的用户持久映射驱动器?
Nick

@SunWKim是的,映射后驱动器已连接。本地管理员没有网络共享的权限,这就是我必须在运行Robocopy之前将其映射为其他用户的原因。
Craig W

Answers:


15

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


不可能。计算机不在域中,因此我必须以非域用户身份运行任务,但只有域用户才能访问网络共享。
Craig W

我知道游戏已经很晚了,但您是否尝试将您的工作分为2个计划任务,一个用于域凭据的网络共享,另一个用作本地管理员运行,可以访问映射驱动器?您只需要错开它们或使用文件互斥锁或其他东西来确保它们按顺序排列。
Dan Csharpster

6

在我的情况下,我所要做的就是取消选中 run with highest privileges 标记,但我在与映射驱动器的用户相同的用户上运行任务。


那是给我的。说得通。
Tom Haws


1

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

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

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

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

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

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

用户可以读取他们的备份文件,但无法删除备份。这为可能心怀不满的员工提供了一些保护。

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


1
echo Get-Date >> c:\mount_nfs_log.txt
net use X: \\share\folder password /user:domain\user>> c:\mount_nfs_log.txt 2>&1

创建此powershell脚本,将作业调度为SYSTEM并将其设置为在重新启动时运行允许我在我的脚本中使用驱动器号,因为UNC不是一个选项,因为其他问题的头痛。


这为我解决了这个问题!使用此命令登录身份验证,以便在脚本出现奇迹之前执行!这解决了必须使用强大的东西“镜像用户帐户”的麻烦。
Tschallacka

1
我第一次帮助某人堆栈溢出,很高兴我能帮忙。另外,使用“echo Get-Date”而不是之前的版本。
Ryan McGrath

我不需要记录,所以我只是添加了一个 cmd /c net use 在任务中的复制作业条目之前的作业输入,并修复了我的问题。您的帖子是四小时后第一次遇到建议的镜像帐户,提供了一个简单的解决方案。保持良好的工作!
Tschallacka

您仍然使用此脚本维护UNC路径,因此您知道。只是因为您正在为一个UNC路径分配一个驱动器号,然后引用该驱动器号,您仍然需要维护 \\ServerName\ShareName 在这种逻辑中。此外,这不一定需要PowerShell NET USE 也可以通过批处理运行,并且只要使用任务计划程序作为SYSTEM帐户进行计划,无论您通过任务计划程序安排运行什么类型的脚本,逻辑等,都可以执行此操作。
Pimp Juice IT

此外,为了澄清,请注意您也可以使用 NET USE \\<ServerName>\<ShareName> <password> /user:<domain>\<username> 就像那样,如果单独对共享进行身份验证而不是实际的驱动器号,则根本不需要指定驱动器号。
Pimp Juice IT

0

尝试将“开始”位置更改为“c:\”。这似乎为我解决了这个问题,因此系统可能会阻止cmd.exe作为安全功能从默认的\ windows \ system32 \执行。


0

我有同样的问题试图访问 R:/xxxfilename.txt 从Windows任务计划程序调用脚本时,使用Windows映射驱动器r:\ server \ share。

我解决了使用 //server/share/xxxfilename.txt
请注意反斜杠转换为正斜杠。
现在我的bash cygwin脚本在windows任务调度程序和cygwin shell中运行。
注意: 净使用 “命令可以访问shell中的地图驱动器,但显示 不可用R:在Windows任务计划程序中运行此命令时。


欢迎来到超级用户!请仔细阅读问题。你的答案是 回答原来的问题。 OP没有提到使用Cygwin或bash。
DavidPostill

0

我通过将“运行是否登录用户”选项更改为“仅在用户登录时运行”来克服此问题。试试这可能会对你有所帮助。


0

正如另一位用户所指出的那样,将“运行用户是否登录”选项设置为“仅在用户登录时运行”似乎确实有效。然后,您可以使用映射路径(例如Z :)或服务器路径(例如\\ ServerName \ Path)。

当然,如果您使用此选项,则必须按照说明进行操作,并确保以具有相关驱动器访问权限的用户身份登录服务器。我记得在一家老公司工作,有很多这样的工作。有一天有人“退出”了主要的工作服务器,没想到会有任何影响,因为他们没有以任何方式关闭机器......

此外,最近,Windows喜欢做很多自我调用的系统重启。因此,使用此解决方案需要您自担风险。


0

另请注意,如果您在脚本中进行映射并且密码包含%,那么必须将其写入%%以使脚本能够从taskscheduler中运行,但%必须从commandprompt运行


-2

谢谢,我认为使用“以c:\开头”解决了​​我的问题,我将跟踪此问题以确认已解决。

我有同样的问题,如果我直接点击批处理它运行完美但没有按计划任务。


这不符合作者的问题。请不要将评论作为答案。
Ramhound

请不要添加“谢谢”作为答案。投入一些时间在网站上,你将获得足够的收益 特权 提出你喜欢的答案,这是超级用户说谢谢的方式。
DavidPostill
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.