2012-01-23 2 views
0

У меня есть сценарий VB, который получает доступ к сетевому ресурсу посредством сопоставления дисков (сценарий ниже), а затем копирует файлы для обработки. Как видите, скрипт проверяет, был ли диск уже сопоставлен, прежде чем он попытается снова отобразить его. Я назначил сценарий в запланированных задачах Windows и запускал их каждую минуту. Запланированная задача настроена на работу как пользователь домена.Windows 2003 - Как привязать диск к сетевому ресурсу постоянно

Моя проблема заключается в том, что отображаемый диск не сохраняется: каждый раз, когда запускается скрипт, он должен аутентифицировать и снова отображать диск. Кажется, что отображение диска теряется после завершения скрипта.

Я обнаружил, что если я вхожу на сервер, используя учетную запись пользователя домена, такую ​​же, как запланированная задача, сопоставьте диск вручную (используйте «NET USE») и продолжайте сеанс входа в систему, тогда скрипт пропустит отображение диска как и ожидалось.

Мне не нравится идея вести сеанс активного входа, чтобы сохранить отображаемый диск. Есть ли способ сохранить сетевой ресурс настойчиво в качестве локального диска, независимо от сеанса входа пользователя.

Причина, по которой я не хочу отображать диск каждый раз, потому что я хочу избежать частых проверок Windows (каждую минуту). Мы обнаружили аутентификацию Windows. LSASS.exe утечки небольшого объема памяти при каждом запуске оператора «MapNetworkDrive» vbs. Конечно, проблема с утечкой памяти может стать другим обсуждением темы. На данный момент, если у меня может быть постоянно привязанный диск (к сетевому ресурсу), я был бы очень доволен.

[диск отображение VB Script, 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 

ответ

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 
+0

спасибо за ответ на мой вопрос, я пытался, но, к сожалению, это не работает для моего случая. Я понимаю, что флаг «/ PERSISTENT: YES» в «NET USE» аналогичен третьему параметру «true» в «WshNetwork.MapNetworkDrive sDriveLetter, sUNC, True», как в моем исходном скрипте. Я думаю, что это заставляет Windows помнить это отображение диска, поэтому в следующий раз, когда один и тот же пользователь войдет в систему, Windows автоматически отобразит диск для пользователя. Windows не «удерживает» диск после выхода пользователя из системы. – Chang

+0

Я начинаю думать, что я прошу, невозможно. – Chang

+0

О, я понимаю, о чем вы говорите. Извините за путаницу. Вы правы, вы не можете подключиться к сетевому диску без проверки подлинности. Это является основой того, как работает kerberos. Вы выполняете аутентификацию один раз, и вы получаете токен для последующих запросов. Невозможно подключиться к диску и предоставить его всем пользователям. Сожалею. –

Смежные вопросы