Windows服务如果是运行在本地系统帐户下或本地服务帐户下,它只能访问这个账户自己创建的映射驱动器,UNC路径访问则不受次限制。
LocalService Account (NT AUTHORITY\LocalService)没有简单的访问映射驱动器的方法。需要用NSSM之类的软将将脚本转为在LocalService账户下运行的服务。
LocalSystem Account (NT AUTHORITY\SYSTEM)则有方法以他的身份创建映射驱动器
首先下载PsExec程序,它在PsTools中:http://technet.microsoft.com/en-us/sysinternals/bb896649.aspx
然后运行一下PowerShell脚本
$PSEXECPATH="E:\GreenSOft\PsTools\PsExec.exe" #指定PsExec程序完整路径
$SHARESRVPATH="192.168.1.206" #连接服务器地址
$SHAREFOLDERPATH="\\192.168.1.206\test" #共享UNC路径
$CONNUSER="MSSQLUser" #连接用户名
$CONNPWD="SHPPD2006!@#!@#SQL" #连接密码
#删除旧的网络映射驱动器
Start-Process -Wait `
-PSPath $PSEXECPATH `
-ArgumentList "-accepteula -s net use P: /delete /y";
#生成新的网络映射驱动器
Start-Process -Wait `
-PSPath $PSEXECPATH `
-ArgumentList "-accepteula -s net use P: $SHAREFOLDERPATH /user:""$SHARESRVPATH\$CONNUSER"" ""$CONNPWD"" /persistent:yes";
如果要每次启动时都自动以LocalSystem账户创建映射驱动器,则按一下步骤:
1、在运行中输入gpedit.msc以打开“本地组策略编辑器”
2、在控制台树中,单击“脚本(启动/关机)”。路径为“计算机配置\Windows 设置\脚本(启动/关机)”。
3、添加编辑,指定脚本位置
4、脚本内容如下:
$PSEXECPATH="E:\GreenSOft\PsTools\PsExec.exe" #指定PsExec程序完整路径
$SHARESRVPATH="192.168.1.206" #连接服务器地址
$SHAREFOLDERPATH="\\192.168.1.206\test" #共享UNC路径
$CONNUSER="MSSQLUser" #连接用户名
$CONNPWD="SHPPD2006!@#!@#SQL" #连接密码
#生成新的网络映射驱动器
Start-Process -Wait `
-PSPath $PSEXECPATH `
-ArgumentList "-accepteula -s net use P: $SHAREFOLDERPATH /user:""$SHARESRVPATH\$CONNUSER"" ""$CONNPWD"" ";
参考资料:
INFO: Services and Redirected Drives http://support.microsoft.com/kb/180362/en-us
Windows服务访问网络映射驱动器 http://blog.163.com/xia_wenlan/blog/static/74348620200882344642907/
Map a network drive to be used by a service http://stackoverflow.com/questions/182750/map-a-network-drive-to-be-used-by-a-service