Скрипт для отображения имени пользователя

Windows Script Host (WSH), WMI, vbs скрипты и т.д. Создание и применение скриптов.

Модератор: Модераторы

хм...
Аватара пользователя
Сообщения: 611
Зарегистрирован: 07 апр 2004, 17:10
Откуда: ссср

Сообщение Stratofortress » 21 дек 2005, 18:30

Admin
;) для начала повыводить:
WScript.echo objSoftware.Status
а после не забыть состояние в кавычки взять — строка всё-таки.
нет времени разбираться — наймите того, кто знает.

Активный пользователь
Сообщения: 185
Зарегистрирован: 09 дек 2004, 17:12
Откуда: Жуковский

Сообщение Admin » 21 дек 2005, 18:32

Stratofortress
Спасибо огромное.Попробую подправить.

Активный пользователь
Сообщения: 185
Зарегистрирован: 09 дек 2004, 17:12
Откуда: Жуковский

Сообщение Admin » 21 дек 2005, 19:13

Все, разобрался немного, вот что у меня получилось:

Код

' Перезапуск службы сервер

Set objWMIService = GetObject("winmgmts:")
Set colSoftware = objWMIService.ExecQuery _
("Select * FROM Win32_Service WHERE Name ='Lanmanserver'" )
For Each objSoftware in colSoftware
if objSoftware.State = "Stopped" Then
objSoftware.StartService()
else
end if
if objSoftware.State = "Running" Then
objSoftware.StopService()
WScript.Sleep 10000
objSoftware.StartService()
end if
next

[/code]

Проверю как это работает на деле.
хм...
Аватара пользователя
Сообщения: 611
Зарегистрирован: 07 апр 2004, 17:10
Откуда: ссср

Сообщение Stratofortress » 22 дек 2005, 15:24

Admin
Код


Select Case objSoftware.State
case "Stopped"



case "Running"


end select



[/code]
нет времени разбираться — наймите того, кто знает.

Новый участник
Сообщения: 10
Зарегистрирован: 11 янв 2006, 16:42
Откуда: Московская обл.

Сообщение YuriA » 11 янв 2006, 16:55

Странно, но у меня в WinXP

objSoftware.StopService()

возвращает код возврата 3 (есть зависимые службы). Оно и понятно есть "Обозреватель компьютеров", а у меня и ещё "ARCserve Discovery Service". По этому служба не перезапускается. Это баг XP? А в Win2000 всё нормально работает? Как определить зависимые службы? Всё WMI перерыл не нашёл :(

Новый участник
Сообщения: 10
Зарегистрирован: 11 янв 2006, 16:42
Откуда: Московская обл.

Сообщение YuriA » 12 янв 2006, 15:33

Всё таки использование"On Error Resume Next" не есть хорошо. Очень часто заводит в тупик. Так и в этом скрипте создаётся впечатление что метод StopService() работает корректно. Я предлагаю такой способ остановки служб

Код

'Сначала останавливаются зависимые службы (в плоть до второго уровня) ,а затем останавливается основная служба
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\.\root\cimv2")
Set colServiceList = objWMIService.ExecQuery("Associators of " _
& "{Win32_Service.Name='lanmanserver'} Where " _
 & "AssocClass=Win32_DependentService " & "Role=Antecedent" )
For each objService in colServiceList
Set depServiceList = objWMIService.ExecQuery("Associators of " _
 & "{Win32_Service.Name='" & objService.Name & "'} Where " _
  & "AssocClass=Win32_DependentService " & "Role=Antecedent" )
For each dep2Service in depServiceList
 dep2Service.StopService()
 Wscript.Sleep 50000
Next
objService.StopService()
Next
Wscript.Sleep 50000
Set colServiceList = objWMIService.ExecQuery("Select * from Win32_Service where Name='lanmanserver'")
For each objService in colServiceList
errReturn = objService.StopService()
wscript.echo errReturn
Next

[/code]
Администратор
Сообщения: 3444
Зарегистрирован: 19 дек 2003, 13:36
Откуда: Москва

Сообщение domovoy » 12 янв 2006, 18:24

YuriA
Ну вообще с Оборзевателем компьютеров, я у себя проблем не заметил, имхо скорее всего у тебя именно второй сервис не останавливается, хотя идея правильная, короче тестируем, если все ок, я внесу изменения в сатью.
Правильно заданный вопрос - это уже половина ответа.

Новый участник
Сообщения: 10
Зарегистрирован: 11 янв 2006, 16:42
Откуда: Московская обл.

Сообщение YuriA » 13 янв 2006, 14:44

domovoy
Мне не нравится в скрипте Wscript.Sleep 50000. Ведь когда я останавливаю службу "Сервер" руками, система сама по цепочке останавливает службы, а не ждёт какое-то время после остановки. А ведь компьютеры разные по быстродействию. Некоторым и 50000мс не хватит, а другие в пустую стоять будут. Вот если бы это сделать без Wscript.Sleep 50000 :(

Можно в бесконечном цикле проверять errReturn когда делаешь

objService.StopService()

Но это тоже не хорошо, а вдруг цикл станет дествительно бесконечным. Делать выход по времени?

Новый участник
Сообщения: 10
Зарегистрирован: 11 янв 2006, 16:42
Откуда: Московская обл.

Сообщение YuriA » 13 янв 2006, 15:20

Хорошо когда есть с кем поговорить. Сразу голова работать стала лучше ;)
Вот и уничтожил Wscript.Sleep

Код

'Сначала останавливаются зависимые службы (в плоть до второго уровня) ,а затем останавливается основная служба
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\.\root\cimv2")
Set colServiceList = objWMIService.ExecQuery("Associators of " _
& "{Win32_Service.Name='lanmanserver'} Where " _
 & "AssocClass=Win32_DependentService " & "Role=Antecedent" )
For each objService in colServiceList
Set depServiceList = objWMIService.ExecQuery("Associators of " _
 & "{Win32_Service.Name='" & objService.Name & "'} Where " _
  & "AssocClass=Win32_DependentService " & "Role=Antecedent" )
For each dep2Service in depServiceList
 errReturn = 3
 Do
  errReturn=dep2Service.StopService()
 Loop Until errReturn = 0
Next
errReturn = 3
Do
 errReturn=objService.StopService()
Loop Until errReturn = 0
Next
Set colServiceList = objWMIService.ExecQuery("Select * from Win32_Service where Name='lanmanserver'")
For each objService in colServiceList
errReturn = 3
Do
 errReturn = objService.StopService()
Loop Until errReturn = 0
Next
wscript.echo "службы остановлены"

[/code]


Осталось решить вопрос с ограничением времени выполнения скрипта (службы могут зависнуть), чтоб пользователь получал информацию "Звоните/бегите к системному администратору!!!"

И более интересное: запомнить что остановил и в какой последовательности, и потом в обратной последовательности запустить ( анализируя код завершения запуска)
Новый участник
Сообщения: 1
Зарегистрирован: 05 янв 2006, 20:36
Откуда: Киев

Сообщение Denter » 09 фев 2006, 18:01

Замечание - вариант с исключением серверов работает криво, ибо для обычных рабочих станций, у которых description нет как класса, на select'е ругается что такого поля нет и обламывает весь блок case, в том числе и то что было в case else.

Обошел примитивным закрытием блока case сразу после проверки Wscript.Quit. Тогда при отсутствии этого поля скрипт просто выполняется дальше.

Ну и, по мелочи, для опускания lanmanserver вначале опускаю Browser. Поднимаю соответственно.

ЗЫ: А вообще ввиду практически нулевой мобильности юзверей между компутерами от опускания/поднимания сервисов отказался в принципе. Ибо гемор можно получить значительный, а смысла для меня - мало. Т.е. оставил только детектирование серверов и прописывание ключа в реестре. Все равно перегрузятся <_<

Пред.След.

Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8