在Windows操作系统中,系统服务(Services)、计划任务(Scheduled Tasks)以及很多系统调用都是以SYSTEM系统账号进行操作的。用 net use 挂载,或者在文件管理器上直接挂载,挂载卷是以 Administrator 身份进行挂载的,而 SYSTEM 账号无法使用 Administrator 挂载的文件卷。
一、方法一:使用winSW工具,注册为windows系统服务
1、新建 MapNetworkDrive.bat文件
@echo off
:: 远程地址
set "target=192.168.0.87"
:: 重试次数
set "retry_count=0"
:: 最大重试次数
set "max_retries=5"
:: 日志地址
set "logfile=D:\mapNetworkDrive\MapNetworkDrive.log"
set "username=用户名"
set "password=密码"
:: 远程地址共享目录
set "share=\\%target%\sfpt"
:: 映射盘符
set "drive=Y:"
:: 获取当前日期和时间
for /f "delims=" %%a in ('powershell -Command "(Get-Date).ToString('yyyy-MM-dd HH:mm:ss')"') do set "current_datetime=%%a"
:while
ping -n 1 %target% > nul
if %errorlevel% == 0 (
if not exist %drive% (
net use %drive% %share% %password% /user:%username%
if %errorlevel% == 0 (
echo %current_datetime% - %target% is reachable and %drive% is mapped. >> %logfile%
goto :end
) else (
echo %current_datetime% - Failed to map %drive%. >> %logfile%
)
) else (
echo %current_datetime% - %drive% already exists. >> %logfile%
)
goto :end
) else (
echo %current_datetime% - %target% is not reachable. >> %logfile%
set /a "retry_count+=1"
if %retry_count% LSS %max_retries% (
echo Retrying...
timeout 5
goto :while
) else (
echo %current_datetime% - Maximum retries exceeded. >> %logfile%
)
)
:end
echo See what user this batch job ran under
whoami >> %logfile%
echo Task completed. Exiting...
EXIT
2、配置map-network-driver.xml.xml,winSW.exe改名为map-network-driver.exe
<service>
<!-- ID of the service. It should be unique accross the Windows system-->
<!--服务ID:启动、关闭、删除服务时,都是通过ID来操作的-->
<id>map-network-drive-service</id>
<!-- Display name of the service -->
<name>map-network-drive-service</name>
<!-- Service description -->
<description>mount a network drive</description>
<!-- 该元素指定要启动的可执行文件 -->
<executable>MapNetworkDrive.bat</executable>
<!--
OPTION: startmode
Defines start mode of the service.
Supported modes: Automatic, Manual, Boot, System (latter ones are supported for driver services only)
Default mode: Automatic
-->
<startmode>Automatic</startmode>
<waithint>15 sec</waithint>
<sleeptime>1 sec</sleeptime>
<log mode="roll-by-size">
<sizeThreshold>10240</sizeThreshold>
<keepFiles>8</keepFiles>
</log>
</service>
3、cmd中执行命令
map-network-driver.exe install
4、检查是否注册成功
5、检查是否映射成功
二、方法二:做成任务计划,开机自动挂载
1、新建 MapNetworkDrive.bat文件
ECHO ON
ECHO This will map the drive, but is being run by task scheduler AS the user SYSTEM
ECHO which should make it accessible to the user SYSTEM
ECHO List the existing drives first.
if not exist Y:\ (
net use Y: \\10.x.x.x\文件夹 密码 /user:用户名
ECHO %Date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2% >> D:\mapNetworkDrive\MapNetworkDrive.log
net use >> D:\mapNetworkDrive\MapNetworkDrive.log
) else (
ECHO %Date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2% >> D:\mapNetworkDrive\MapNetworkDrive.log
ECHO "exist Y:\" >> D:\mapNetworkDrive\MapNetworkDrive.log
net use >> D:\mapNetworkDrive\MapNetworkDrive.log
)
ECHO See what user this batch job ran under
whoami >> D:\mapNetworkDrive\MapNetworkDrive.log
ECHO need to exit to allow the job to finish
EXIT
2、执行命令,创建任务计划
schtasks /create /tn "MapNetworkDrive" /tr "D:\mapNetworkDrive\MapNetworkDrive.bat" /sc onstart /RU SYSTEM /RL HIGHEST
3、重启电脑,查看日志
(3.1) 执行成功日志
(3.2) 没成功日志,检查bat文件。
(3.3)任务计划程序运行,运行记录显示“上次运行结果(0x1),
选中该任务,右键,选择操作,编辑添加属性“起始于”(将bat文件的上层目录填入)。如果是windows server2012及以后的操作系统,需要配置起始位置,之前版本的操作系统则不需要 。
- 代码 0 或 0x0:操作成功完成。
- 代码 1 或 0x1:调用的函数不正确或调用了未知函数。
- 代码 10 或 0xa:环境不正确。
- 代码 0x8009000f:常规访问被拒绝
二、方法二:临时修改,重启后失效,需要重新配置
1、下载psexec工具
https://learn.microsoft.com/zh-cn/sysinternals/downloads/psexec
2、在解压后的PSTool文件夹下,运行CMD,执行 psexec -i -s cmd.exe
psexec
是一个命令行工具,用于在 Windows 系统上执行远程命令。-i
和 -s
是两个选项,它们的意思分别是:
-i
:以交互方式运行命令。这将启动一个会话,允许用户与远程系统进行交互。这意味着在执行命令之前,会提示用户输入密码。-s
:以静默方式运行命令。这将禁用命令行界面,使命令在后台运行,不会显示任何输出。
因此,psexec -i -s cmd.exe
的意思是启动一个交互式的会话,以静默方式运行 cmd.exe
命令。这将允许用户通过命令行界面与远程系统进行交互,同时不会显示任何输出。
2、在新开的CMD窗口中运行命令 net use z: \\10.x.x.xxx\test /persistent:yes
会让输入用户名和密码,密码不显示,执行成功后映射成功
net use
是一个命令行工具,用于在 Windows 系统上管理网络驱动器。z:
是要挂载的网络驱动器的盘符,\\10.x.x.xxx\test
是要挂载的网络路径。 /persistent:yes
表示该驱动器将一直保持挂载状态,直到手动卸载。
因此,net use z: \\10.x.x.xxx\test /persistent:yes
的意思是将网络驱动器挂载到 z:
盘符,指向服务器的共享路径 \\10.x.x.xxx\test
,并且设置为持久挂载。这意味着在系统重启后,该驱动器仍然会挂载。
3、重启服务,服务即可访问映射网络磁盘。
重启后可能需要重新执行。