在计划作业(脚本)中将网络空间映射到 Windows 驱动器?

在计划作业(脚本)中将网络空间映射到 Windows 驱动器?

我需要将映射驱动器(例如 S:)映射到网络空间以完成其他一些工作。我的机器是 Windows Server 2008。在 Windows Server 2008 中,我可以使用 bat 作业创建计划任务,并且可以指定它在 Windows 重新启动或未指定用户登录时运行。它就像本地系统的服务。bat 包含用于映射驱动器的 net cmd:

net use S: \\netdrive1\space1 pwd /user:oneUser

然后我重新启动了盒子。看起来计划的作业确实运行了。我可以从任务计划程序作业的历史记录中进行检查。但是,无法映射 S: 驱动器。如果我从命令行运行该 bat。它工作正常。似乎我必须登录盒子才能创建映射驱动器。不确定是否可以让 Windows 在重新启动时以本地系统身份运行该作业以使驱动器可用?

就我的情况而言,网络驱动器位于 Unix 框中。

如上所述,我在 Windows 本地系统下还有一些其他依赖计划作业。因此,我必须在没有任何用户登录的情况下使网络空间可用。

答案1

映射驱动器仅可用于交互式会话。您无法在作为服务运行时映射驱动器,您需要使用 UNC 路径。

答案2

我遇到了类似的问题。当我尝试安排任务并浏览脚本作为操作时,映射的驱动器甚至没有显示。我在浏览文件系统中的文件时在打开的窗口中重新映射了驱动器。之后它对我来说工作正常。

我遵循的步骤:

  1. 打开任务计划程序

  2. 创建一个新任务,其中包含所需的所有详细信息、触发器等。

  3. 转到操作 -> 从下拉列表中选择操作 -> 单击“浏览”

(这将打开浏览窗口)

  1. 右键单击计算机->映射网络驱动器->映射所需的驱动器

  2. 将文件附加到作业

完毕

干杯!!

答案3

net use S: \\netdrive1\space1 pwd /user:oneUser /persistent:yes

这可能会消除对计划任务的需要,但我不确定它是否会在没有用户登录的情况下维持连接。

应用程序中的 UNC 路径比映射驱动器要好得多,因此如果可能的话,您应该这样做。

http://technet.microsoft.com/en-us/library/bb490717.aspx

编辑

这不是很优雅,但它可能会起作用(完全未经测试)

NET USE \\netdrive1\space1 /USER:oneUser pwd && PUSHD \\netdrive1\space1
COPY C:\path\to\files\*.dat Z:\
POPD && NET USE \\netdrive1\space1 /DELETE

尝试将其作为批处理文件。NET USE 根据共享对用户进行身份验证,PUSHD 自动将驱动器安装到驱动器号(以相反的顺序,因此假设没有安装其他驱动器,在本例中没有,它将是 Z:)。复制文件,然后断开与共享的连接。我不知道这在没有交互式登录会话的情况下是否会起作用,但值得一试。

答案4

您陷入了困境……调度程序正在“管理员模式”下执行您的 bat 文件,这实际上不会影响用户模式环境。我知道这听起来很奇怪,但我自己的测试表明,它可能是 2 个独立的用户环境。您可能想尝试在用户配置文件的启动文件夹中运行一个快速而粗糙的 vbs 脚本……看看它是否能满足您的要求。

set WshShell = WScript.CreateObject("WScript.Shell")
Set objNetwork = CreateObject("WScript.Network")
do while true
  objNetwork.MapNetworkDrive "S:", "\\netdrive1\space1", false, "oneUser", "pwd"
  WScript.Sleep(12000)
loop

如果驱动器没有取消映射...当它尝试重新映射驱动器时,这将在下一个循环中抛出一个错误...除非你发现错误...或者做一个快速而肮脏的

On Error Resume Next
循环之前。

您可以根据需要调整睡眠时间...或者做一些更高级的时间/日期检查机制...但这应该给您提供想法。

相关内容