0

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

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

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

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

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

[驱动映射 vb 脚本,仅供参考]

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
4

1 回答 1

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
于 2012-01-24T21:11:44.480 回答