Windows 2003 - 如何持久地将驱动器映射到网络共享

时间:2012-01-23 03:35:01

标签: vbscript network-share

我有一个VB脚本,它通过驱动器映射(下面的脚本)访问网络共享,然后复制文件进行处理。如您所见,脚本会在尝试再次映射之前检查驱动器是否已被映射。我在Windows计划任务中安排了脚本,并使其每分钟运行一次。计划任务配置为以域用户身份运行。

我的问题是被映射的驱动器不会持久存在:每次脚本运行时,它都必须进行身份验证并再次映射驱动器。一旦脚本完成,驱动器映射似乎就会丢失。

我发现如果我使用与计划任务相同的域用户帐户登录服务器,请手动映射驱动器(使用“NET USE”)并保持登录会话运行,然后脚本将跳过将驱动器映射为预期

我不喜欢保持实时登录会话只是为了保持驱动器映射的想法。有没有办法将网络共享永久保留为本地驱动器,无论登录用户的会话如何。

我不想每次映射驱动器的原因是因为我想避免频繁的Windows身份验证(每分钟)。我们发现每次运行“MapNetworkDrive”vbs语句时,Windows身份验证LSASS.exe都会泄漏少量内存。当然,这个内存泄漏问题可能会成为一个不同的线程讨论。目前,如果我可以持续映射驱动器(到网络共享),我会非常高兴。

[drive mapping vb script,fyi]

Function MapNetDrive (sDriveLetter, sUNC)
Dim TDriveExists: TDriveExists = False
Dim WshNetwork: Set WshNetwork = WScript.CreateObject("WScript.Network")
Dim oDrives: Set oDrives = WshNetwork.EnumNetworkDrives
'loop through all the currently mapped drives to see if T: exists
Dim i
For i = 0 to oDrives.Count - 1 Step 2
    If oDrives.Item(i) = sDriveLetter Then 
        TDriveExists = True 
    End If
Next
'If not, map the T: drive
If TDriveExists <> True Then 
    WshNetwork.MapNetworkDrive sDriveLetter, sUNC, True, 'userName', 'password'
End If

'clean up
Set oDrives =  Nothing
Set WshNetwork = Nothing

MapNetDrive = True
End Function

1 个答案:

答案 0 :(得分:0)

Sub MapNetDrive(sDriveLetter, sUNC)
  Set oShell = CreateObject("WScript.Shell")
  oShell.Run "%comspec% /c NET USE /PERSISTENT:YES " & sDriveLetter & _
              ": """ & sUNC & """", 0, True
  Set oShell = Nothing
End Sub