在RunOnce批处理文件中映射驱动器

时间:2016-06-28 15:57:35

标签: windows batch-file

我全身都搜索过,但还没有找到答案。

我有一个脚本来为新的或重新映像的计算机设置用户帐户和Windows自定义。我通过RUNONCE注册表项映射驱动器,我遇到了麻烦。这个本地网络是一个工作组,而不是一个域,所有PC都在运行Win7Pro或Win10Pro。办公室经理的PC是本地文件服务器,我试图从其他计算机映射驱动器。

以下是我遇到问题的RUNONCE批处理文件的一部分:

:PROMPTFORPMHOSTNAME
ECHO This PC was identified during InitialSetup as a Leasing Office PC.
ECHO This PC's Host Name is %computername%.
ECHO.
SET /P PMHOSTNAME="Enter the Property Manager PC Hostname: "

:MAPDRIVE
ECHO - Map M Drive
NET USE M: /delete >nul 2>&1
NET USE M: \\%PMHOSTNAME%\Data >nul 2>&1
NET USE M: \\%PMHOSTNAME%\Data /user:%computername%\[username] [password] /persistent:yes
NET USE /persistent:yes >nul 2>&1
TIMEOUT /T 5 /NOBREAK >nul 2>&1

在我的场景中,初始脚本使用本地管理员帐户通过NET USER创建用户帐户,然后将RUNONCE放入注册表中。重新启动后,我输入新创建的帐户,RUNONCE按计划运行。

问题是RUNONCE是以管理员身份运行的。因此,当它映射驱动器时,它在管理员级别而不是用户级别下执行。它表示驱动器已成功映射,但它没有显示。

我能够通过在两个实例中运行CMD来复制它,一次作为管理员,一次作为用户。当我将驱动器映射为管理员时,它表示它已成功并且不会显示在资源管理器中。当我将驱动器映射为用户时,它会成功并按预期显示。

所以我需要知道如何让RUNONCE作为登录用户运行,以便正确映射。或者说明地狱中我做错了什么,以及我错过了什么应该是显而易见的,并且没有给出我当前的挫折感。 :P

非常感谢大家!我非常感谢你的帮助。 :)

1 个答案:

答案 0 :(得分:0)

永久网络驱动器映射始终由Windows每个用户帐户注册,并且仅当用户登录时才连接网络驱动器,并且在用户注销时自动断开连接。

Microsoft MSDN文章Run and RunOnce Registry Keys中描述了两个 RunOnce 注册表项:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce

在64位Windows上,甚至还有两个 RunOnce 键用于64位应用程序,以下用于32位应用程序,这与此任务无关:

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\RunOnce
HKEY_CURRENT_USER\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\RunOnce

使用管理员帐户的HKLMHKCU使用管理员帐户注册要执行一次的批处理文件,以便将共享持久映射到驱动器号{{1> }}

最好是在

下注册批处理文件
M

批处理文件使用HKEY_USERS\.DEFAULT\SOFTWARE\Microsoft\Windows\CurrentVersion\Run

中删除自己
reg delete

但是,仅当在默认用户帐户注册表配置单元中注册批处理文件时尚未创建一次执行持久性驱动器映射的用户帐户时,此方法才有效。

我也可以根本不使用 RunOnce ,而是从值启动时使用HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run 从注册表中读取的目录中创建一个快捷方式(* .lnk)文件在注册表项

reg query

正在执行的批处理文件删除当前用户帐户的启动目录中的快捷方式文件,即在注册表中从HKEY_USERS\.DEFAULT\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders 读取的目录中,其值为启动,位于注册表项下

reg query

此方法仅适用于执行批处理文件的用户帐户尚不存在,甚至可能比通过 RunOnce 运行批处理文件更好,因为快捷方式文件可以包含窗口高度等属性和宽度适合这项任务。

顺便说一句:行

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders

足以创建驱动器映射并将其保存在注册表中以保存当前用户帐户。在最坏的情况下,上面的线和该线下面的线会适得其反。对于删除使用:

NET USE M: \\%PMHOSTNAME%\Data /user:%computername%\[username] [password] /persistent:yes