У меня есть сценарий 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