VBS/WSH/JS - конструкция. Которая мапит диски у пользователей

Ответить
Аватара пользователя
Matr_os_kin

VBS/WSH/JS - конструкция. Которая мапит диски у пользователей

Сообщение Matr_os_kin »

Здравствуйте коллеги. Мне очень нужна помощь сведущего человека. Я познакомился с языком 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

Re: VBS/WSH/JS - конструкция. Которая мапит диски у пользователей

Сообщение Iska »

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

Я ее представляю скорее так



Set objShell = CreateObject("WScript.Shell")



if Err.Number 0 Then

objShell.LogEvent 1, Err.number & vbTab & Err.Description

end if

Вот только не знаю. Правильно я мыслю или нет?
Аватара пользователя
Matr_os_kin

Re: VBS/WSH/JS - конструкция. Которая мапит диски у пользователей

Сообщение Matr_os_kin »

Цитата Matr_os_kin:



Вообще такая кострукция описана в MSDN.
VBS/WSH/JS - конструкция. Которая мапит диски у пользователей




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


Цитата Matr_os_kin:



Я ее представляю скорее так
VBS/WSH/JS - конструкция. Которая мапит диски у пользователей




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

Re: VBS/WSH/JS - конструкция. Которая мапит диски у пользователей

Сообщение Matr_os_kin »

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



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

Re: VBS/WSH/JS - конструкция. Которая мапит диски у пользователей

Сообщение Iska »

Цитата Matr_os_kin:



Ссылка на MSDN
http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
VBS/WSH/JS - конструкция. Которая мапит диски у пользователей




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



В Вашем случае:


Цитата Matr_os_kin:



1) Диска у пользователя нет, удалить скрипт не может.
VBS/WSH/JS - конструкция. Которая мапит диски у пользователей




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




Цитата Matr_os_kin:



2) в поле заметки написано вот так 7,\\server1\shara1. Скрипт не примапит диск, потому как некорректная буква диска. Ну или путь. Если будет наоборот.
VBS/WSH/JS - конструкция. Которая мапит диски у пользователей




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



Код:

Код: Выделить всё

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\\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\\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\\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\\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\\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

Re: VBS/WSH/JS - конструкция. Которая мапит диски у пользователей

Сообщение Matr_os_kin »

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

Re: VBS/WSH/JS - конструкция. Которая мапит диски у пользователей

Сообщение Matr_os_kin »

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

Вернуться в «Скриптовые языки администрирования Windows»