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