永久MapNetworkDrive

时间:2015-10-19 22:14:58

标签: vbscript

基本上,我收到了一个VBScript,它从当前登录的用户收集用户名,然后将其\\MYSERVER\Users\<username>映射到一个driveletter(J:)。我遇到的问题是让这个永久性,在重启/注销后留在那里。这是我正在使用的代码:

Option Explicit
Dim objNetwork 
Dim strDriveLetter, strRemotePath, strUserName
strDriveLetter = "J:" 
strRemotePath = "\\MYSERVER\Users" 

Set objNetwork = WScript.CreateObject("WScript.Network") 
strUserName = objNetwork.UserName 
objNetwork.MapNetworkDrive strDriveLetter, strRemotePath _
  & "\" & strUserName

WScript.Echo " Launch Explorer, check: "& strDriveLetter
WScript.Quit

2 个答案:

答案 0 :(得分:1)

MapNetworkDrive Method:将共享网络驱动器添加到您的计算机系统。

object.MapNetworkDrive(sLocalName, sRemoteName, [bUpdateProfile], [sUser], [sPassword])
  

参数

     
      
  • object WshNetwork对象。
  •   
  • sLocalName字符串值,指示在本地知道映射驱动器的名称。
  •   
  • sRemoteName字符串值,表示共享的UNC名称(\\xxx\yyy)。
  •   
  • bUpdateProfile可选。布尔值,指示映射信息是否存储在当前用户的配置文件中。如果   提供了bUpdateProfile,其值为true,映射为   存储在用户配置文件中(默认为false)。
  •   
  • sUser可选。表示用户名的字符串值。如果要使用网络驱动器映射网络驱动器,则必须提供此参数   当前用户以外的其他人的凭据。
  •   
  • sPassword可选。表示用户密码的字符串值。如果要使用网络驱动器映射网络驱动器,则必须提供此参数   当前用户以外的其他人的凭据。
  •   

然而,使用

 objNetwork.MapNetworkDrive strDriveLetter, strRemotePath & "\" & strUserName, True

可能会引发一些错误,例如

  • -2147024811本地设备名称已在使用中(&H80070055)或
  • -2147023694本地设备名称与另一个网络资源(&H800704B2)有记忆连接。

请注意,下一个代码片段用于检查映射驱动器并有条件地删除当前驱动器映射(如果存在)可能会失败

On Error GoTo 0
Dim oDrives, i
Set oDrives = objNetwork.EnumNetworkDrives
For i = 0 to oDrives.Count - 1 Step 2
  If oDrives.Item( i) = strDriveLetter Then
    ' remove current drive mapping, force the removal, force persistent
    objNetwork.RemoveNetworkDrive strDriveLetter, True, True
    ' and wait for network drive removal (this could take some time)
    Wscript.Sleep 800
    Exit For
  End If  
Next
objNetwork.MapNetworkDrive strDriveLetter, strRemotePath & "\" & strUserName, True

如果待处理(仍记住但未使用EnumNetworkDrives进行枚举)暂时断开驱动器映射,例如按objNetwork.RemoveNetworkDrive strDriveLetter, True, False

因此,涉及一些基本错误处理如下:

On Error Resume Next
  ' remove current drive mapping, force the removal, force persistent
  objNetwork.RemoveNetworkDrive strDriveLetter, True, True
  ' and wait for network drive removal (this could take some time) 
  Wscript.Sleep 800
  Err.Clear
  ' map network drive, force persistent
  objNetwork.MapNetworkDrive strDriveLetter, strRemotePath & "\" & strUserName, True
On Error GoTo 0

答案 1 :(得分:0)

如有疑问,请阅读documentation

  

语法

     

object.MapNetworkDrive(strLocalName, strRemoteName, [bUpdateProfile], [strUser], [strPassword])

     

参数

     

[...]
   bUpdateProfile
  可选的。布尔值,指示映射信息是否存储在当前用户的配置文件中。如果提供了 bUpdateProfile 并且其值为 true ,则映射将存储在用户配置文件中(默认为 false )。

所以你需要改变这个:

objNetwork.MapNetworkDrive strDriveLetter, strRemotePath _
  & "\" & strUserName

进入这个:

objNetwork.MapNetworkDrive strDriveLetter, strRemotePath _
  & "\" & strUserName, True