Windows 2003 - Как постоянно сопоставлять диск с сетевым ресурсом
У меня есть сценарий VB, который обращается к сетевому ресурсу через сопоставление дисков (сценарий ниже), а затем копирует файлы для обработки. Как видите, скрипт проверяет, подключен ли уже диск, прежде чем снова попытаться подключить его. Я запланировал сценарий в запланированных задачах Windows и заставлял его запускаться каждую минуту. Запланированная задача настроена для работы в качестве пользователя домена.
Моя проблема в том, что сопоставляемый диск не сохраняется: каждый раз, когда запускается скрипт, он должен аутентифицировать и снова сопоставлять диск. Похоже, что отображение диска теряется после завершения сценария.
Я обнаружил, что если я войду на сервер, используя учетную запись пользователя домена, аналогичную запланированной задаче, сопоставлю диск вручную (используйте "NET USE") и продолжу сеанс входа в систему, то сценарий пропустит сопоставление диска, как и ожидалось.
Мне не нравится идея поддерживать сеанс входа в систему, просто чтобы подключить диск. Есть ли способ сохранить сетевой ресурс постоянно как локальный диск, независимо от входа пользователя в систему.
Причина, по которой я не хочу подключать диск каждый раз, заключается в том, что я хочу избежать частой проверки подлинности Windows (каждую минуту). Мы обнаружили, что проверка подлинности Windows LSASS.exe приводит к утечке небольшого объема памяти при каждом запуске оператора VBS "MapNetworkDrive". Конечно, эта проблема утечки памяти может стать другим обсуждением потока. На данный момент, если у меня может быть постоянно подключенный диск (к сетевому ресурсу), я был бы очень счастлив.
[сценарий сопоставления дисков VB, 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 ответ
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