运行于Windows内建账户下的服务访问映射网络驱动器的方法

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="[email protected]#[email protected]#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 设置\脚本(启动/关机)”。
运行于Windows内建账户下的服务访问映射网络驱动器的方法
3、添加编辑,指定脚本位置
运行于Windows内建账户下的服务访问映射网络驱动器的方法
4、脚本内容如下:
$PSEXECPATH="E:\GreenSOft\PsTools\PsExec.exe" #指定PsExec程序完整路径
$SHARESRVPATH="192.168.1.206" #连接服务器地址
$SHAREFOLDERPATH="\\192.168.1.206\test" #共享UNC路径
$CONNUSER="MSSQLUser" #连接用户名
$CONNPWD="[email protected]#[email protected]#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