Windows 2003 - Как постоянно сопоставлять диск с сетевым ресурсом - PullRequest
0 голосов
/ 23 января 2012

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

0 голосов
/ 25 января 2012
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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...