Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   конструкция. Которая мапит диски у пользователей (http://forum.oszone.net/showthread.php?t=216657)

Matr_os_kin 28-09-2011 10:36 1761620

конструкция. Которая мапит диски у пользователей
 
Вложений: 1
Здравствуйте коллеги. Мне очень нужна помощь сведущего человека. Я познакомился с языком vbs совсем недавно, и потому мой вопрос может показаться глупым, но все же. У меня есть вот такая конструкция. Которая мапит диски у пользователей, пути к диска и буква диска, прописаны в поле группы безопасности notes(Заметки)
Код находится п приложенном файле. Мне нужно прикрутить к нему регистрацию ошибок. Задача выглядит так : При ошибке, он должен регистрировать ее код в eventLog.
На сайте Микрософт, нашел такую конструкцию:
Set WshShell = WScript.CreateObject("WScript.Shell")
rc = runLoginScript() 'Returns true if logon succeeds.

if rc then
WshShell.LogEvent 0, "Logon Script Completed Successfully"
else
WshShell.LogEvent 1, "Logon Script failed"
end if
Я так понял она просто пишет, была ошибка, или не было. Как мне переработать это, для регистрации кодов ошибок в лог?
Заранее благодарю за помощь..

Iska 28-09-2011 18:10 1761922

Matr_os_kin, что есть «runLoginScript()»?

Matr_os_kin 28-09-2011 18:14 1761924

Сам не понял. =( Вообще такая кострукция описана в MSDN.
Я ее представляю скорее так

Set objShell = CreateObject("WScript.Shell")

if Err.Number <> 0 Then
objShell.LogEvent 1, Err.number & vbTab & Err.Description
end if
Вот только не знаю. Правильно я мыслю или нет?

Iska 28-09-2011 18:41 1761946

Цитата:

Цитата Matr_os_kin
Вообще такая кострукция описана в MSDN. »

Приведите ссылку. Мне вовсе не понятно, что это за функция.
Цитата:

Цитата Matr_os_kin
Я ее представляю скорее так »

Ну, да, общий подход верен. Но чем именно должно возбуждаться событие ошибки?

Matr_os_kin 29-09-2011 08:49 1762218

Ну как понятно из скрипта, он читает поле Заметки, группы безопасности в домене. Там будут записаны такие строчки

R:,\\Server1\shara1\
S:,\\server2\shara2\

Скрипт сплитует строку по "," и получается буква диска, и путь к нему. Потом он на машине удаляет диски, если они примаплены и подключает заново. Ошибка может быть 3-х видов. 1) Диска у пользователя нет, удалить скрипт не может. 2) в поле заметки написано вот так 7,\\server1\shara1. Скрипт не примапит диск, потому как некорректная буква диска. Ну или путь. Если будет наоборот. Вот я и хотел бы собирать ошибки в лог. Что бы можно было быстро посмотреть и понять, почему скрипт отработал некорректно. Не подключаясь к машине пользователя.

Ссылка на MSDN http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx

Iska 30-09-2011 05:53 1762815

Цитата:

Цитата Matr_os_kin

Спасибо, ясно. В примере по ссылке «runLoginScript()» — некая гипотетическая функция, возвращающая булево значение. В зазависимости от этого в журнал пишется сообщение об успехе или ошибке.

В Вашем случае:
Цитата:

Цитата Matr_os_kin
1) Диска у пользователя нет, удалить скрипт не может. »

Это не есть ошибка. Нет подключенного сетевого диска на данной букве? Ну и что?! Мы-то как раз пробуем освободить это подключение. Надо просто перебрать все существующие подключения. А вообще я отрицательно отношусь к назначению постоянными сетевых подключений к общим ресурсам, назначаемых из групповой политики.

Цитата:

Цитата Matr_os_kin
2) в поле заметки написано вот так 7,\\server1\shara1. Скрипт не примапит диск, потому как некорректная буква диска. Ну или путь. Если будет наоборот. »

Тут да, надо обрабатывать. Сделать сие можно, например, так:
Код:

Option Explicit

Const EventTypeSuccess = 0
Const EventTypeError  = 1

Dim objWshShell
Dim objWshNetwork
Dim collWshCollection

Dim i
Dim elem

Dim strDrive
Dim strNetworkPath

Dim strObjGroup_Info


' Пусть strObjGroup_Info — уже извлечённое описание из поля Заметки группы пользователя, например:
strObjGroup_Info = _
        "R:,\\Server1\shara1" & vbCrLf & _
        "S:,\\server2\shara2" & vbCrLf & _
        "E:,\\Server3\shara1" & vbCrLf & _
        "7,\\server1\shara1"  & vbCrLf & _
        "\\Server3\shara3,Q:"


Set objWshShell      = WScript.CreateObject("WScript.Shell")
Set objWshNetwork    = WScript.CreateObject("WScript.Network")

Set collWshCollection = objWshNetwork.EnumNetworkDrives()

' Перебираем все пары элементов, извлечённые из описания
For Each elem In Split(strObjGroup_Info, vbCrLf)
        ' Разбиваем пару «Имя локального устройства/Имя сетевого устройства» на составляющие
        strDrive      = Split(elem, ",")(0)
        strNetworkPath = Split(elem, ",")(1)
       
        ' Перебираем коллекцию существующих сетевых подключений к общим сетевым ресурсам
        For i = 1 To collWshCollection.Count Step 2
                ' Если находим существующее сетевое подключение к планируемому сетевому ресурсу…
                If collWshCollection.Item(i) = strNetworkPath Then
                        ' … отключаем его
                        objWshNetwork.RemoveNetworkDrive collWshCollection.Item(i - 1)
                End If
        Next
       
        ' Включаем собственную обработку ошибок
        On Error Resume Next
       
        ' Пытаемся создать новое не постоянное (!) сетевое подключение к общему сетевому ресурсу
        objWshNetwork.MapNetworkDrive strDrive, strNetworkPath, False
       
        ' При какой-либо ошибке…
        If Err.Number <> 0 Then
                ' … пишем соответствующее сообщение:
                'WScript.Echo "Logon script [" & WScript.ScriptFullName & "] event " & _
                '        "for [" & objWshNetwork.UserDomain & "\" & objWshNetwork.UserName & "]" & _
                '        " on [" & objWshNetwork.ComputerName & "]" & vbCrLf & _
                '        vbTab & "Error Source: " & vbTab & vbTab & Err.Source & vbCrLf & _
                '        vbTab & "Error Number: " & vbTab & vbTab & "0x" & Hex(Err.Number) & vbCrLf & _
                '        vbTab & "Error Description: "    & vbTab & Err.Description & vbCrLf & _
                '        "Additional information" & vbCrLf & _
                '        vbTab & "Local drive name: " & vbTab & strDrive & vbCrLf & _
                '        vbTab & "Remote UNC path: "  & vbTab & strNetworkPath
               
                objWshShell.LogEvent EventTypeError, "Logon script [" & WScript.ScriptFullName & "] event " & _
                        "for [" & objWshNetwork.UserDomain & "\" & objWshNetwork.UserName & "]" & _
                        " on [" & objWshNetwork.ComputerName & "]" & vbCrLf & _
                        vbTab & "Error Source: "      & vbTab & Err.Source & vbCrLf & _
                        vbTab & "Error Number: "      & vbTab & "0x" & Hex(Err.Number) & vbCrLf & _
                        vbTab & "Error Description: " & vbTab & Err.Description & vbCrLf & _
                        "Additional information" & vbCrLf & _
                        vbTab & "Local drive name: " & vbTab & strDrive & vbCrLf & _
                        vbTab & "Remote UNC path: "  & vbTab & strNetworkPath
        End If
       
        ' Включаем системную обработку ошибок
        On Error Goto 0
Next

Set collWshCollection = Nothing

Set objWshNetwork    = Nothing
Set objWshShell      = Nothing

WScript.Quit 0

Возможный результат
Цитата:

Код:

Logon script [\\Server\<Path to GPO Script Object>\Logon.vbs] event for [Domain\User] on [Machine]
        Error Source:                WSHNetwork.MapNetworkDrive
        Error Number:                0x800704B2
        Error Description:        Локальное имя устройства уже используется для подключения к другому сетевому ресурсу.

Additional information
        Local drive name:        R:
        Remote UNC path:        \\Server1\shara1


Logon script [\\Server\<Path to GPO Script Object>\Logon.vbs] event for [Domain\User] on [Machine]
        Error Source:                WSHNetwork.MapNetworkDrive
        Error Number:                0x80070035
        Error Description:        Не найден сетевой путь.

Additional information
        Local drive name:        S:
        Remote UNC path:        \\server2\shara2


Logon script [\\Server\<Path to GPO Script Object>\Logon.vbs] event for [Domain\User] on [Machine]
        Error Source:                WSHNetwork.MapNetworkDrive
        Error Number:                0x80070055
        Error Description:        Имя локального устройства уже используется.

Additional information
        Local drive name:        E:
        Remote UNC path:        \\Server3\shara1


Logon script [\\Server\<Path to GPO Script Object>\Logon.vbs] event for [Domain\User] on [Machine]
        Error Source:                WSHNetwork.MapNetworkDrive
        Error Number:                0x800704B0
        Error Description:        Указано неверное имя устройства.

Additional information
        Local drive name:        7
        Remote UNC path:        \\server1\shara1


Logon script [\\Server\<Path to GPO Script Object>\Logon.vbs] event for [Domain\User] on [Machine]
        Error Source:                WSHNetwork.MapNetworkDrive
        Error Number:                0x800704B0
        Error Description:        Указано неверное имя устройства.

Additional information
        Local drive name:        \\Server3\shara3
        Remote UNC path:        Q:



Matr_os_kin 30-09-2011 08:54 1762863

Спасибо. Я сегодня попробую оба способа и свой и ваш. По возможности отпишусь.

Matr_os_kin 03-10-2011 08:47 1764749

Попробовал. Конструкция заработала. Еще раз спасибо. Буду дальше колдовать с детальным разбором ошибок.


Время: 14:28.

Время: 14:28.
© OSzone.net 2001-