Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] Кавычки внутри кавычек в VBS

Ответить
Настройки темы
VBS/WSH/JS - [решено] Кавычки внутри кавычек в VBS

Аватара для BigBoo

Старожил


Автор проектов


Сообщения: 474
Благодарности: 120

Профиль | Отправить PM | Цитировать


Возможно вопрос банален, но никак не могу разобраться, как использовать кавычки внутри кавычек в VBS. То есть, например даже элементарная команда
Код: Выделить весь код
msgbox "Меню "Пуск""
выдаёт ошибку. Хочу напечатать именно Меню "Пуск" ,а не Меню Пуск. Так же и с другими командами. Пишу скрипт добавляющий строки в файл и в этих строчках есть кавычки. Был бы признателен за помощь.

Отправлено: 00:31, 15-01-2011

 

Новый участник


Сообщения: 6
Благодарности: 0

Профиль | Отправить PM | Цитировать


Спасибо, Iska! Это хорошее решение, но хотелось бы доработать этот код с такой целью, что: а вдруг сервис завис и простая остановка тут не поможет? Тогда, подождав секунд 10, будет необходимо убить соответствующий процесс и запустить сервис заново. Как будет выглядеть скрипт именно с такой задачей?

Последний раз редактировалось C0D3X, 20-02-2015 в 05:05.


Отправлено: 04:58, 20-02-2015 | #21



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Во-первых, нужно не снимать процесс, а разбираться в причинах зависания сервиса. Во-вторых, логика «остановить сервис; если не останавливается — снять процесс сервиса, затем запустить сервис заново» мне не понятна.

Отправлено: 07:07, 20-02-2015 | #22


Новый участник


Сообщения: 6
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата Iska:
Во-первых, нужно не снимать процесс, а разбираться в причинах зависания сервиса. Во-вторых, логика «остановить сервис; если не останавливается — снять процесс сервиса, затем запустить сервис заново» мне не понятна. »
Всё просто: Windows есть Windows и зависание программ в этой ОС еще никто не отменял. Суть задания такая, что программа будет следить за работой ftp сервера, через который происходит обмен с региональными офисами (распределенный базы 1С), важно обеспечить бесперебойность работы этого обмена. Если сервис завис (а часто бывает так, что ты пытаешься остановить его и строка остановки медленно-медленно двигается, но сервис завис он не может быть остановлен штатно, приходится вручную убивать соответствующий процесс и запускать сервис заново - опля! все снова заработало, до следующего глюка). Так понятнее?
Просто все это сейчас делается руками по звонку одного из филиалов - надо автоматизировать)

Отправлено: 09:40, 20-02-2015 | #23


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


У меня не случалось, чтобы служба «FileZilla Server» зависала. Если у Вас, как Вы пишете:
Цитата C0D3X:
а часто бывает так, что ты пытаешься остановить его и строка остановки медленно-медленно двигается, но сервис завис он не может быть остановлен штатно »
— Вы пытались найти причину такого поведения?

Цитата C0D3X:
Просто все это сейчас делается руками по звонку одного из филиалов - надо автоматизировать) »
Поясните по поводу автоматизации. В новом сценарии звонок из филиала остаётся в наличии?

Отправлено: 10:04, 20-02-2015 | #24


Новый участник


Сообщения: 6
Благодарности: 0

Профиль | Отправить PM | Цитировать


Iska, меня полностью устраивает ваше решение

Все что мне нужно это доработать это решение до примерно такого:
Код: Выделить весь код
Option Explicit

Dim strServiceName

Dim objSWbemObjectEx


strServiceName = "messenger"

With WScript.CreateObject("WbemScripting.SWbemLocator").ConnectServer(".", "root\cimv2")
	With .Get("Win32_Service.Name='" & strServiceName & "'")
		If .State = "Running" Then
			If Not .StopService() = 0 Then
				Sleep 20000 'Ждем - может процесс все-таки с задержкой, но завершится
				If .State = "Running" Then 'Если и спустя 20 секунд все еще запущен,то
					'Вызов функции поиска ID процесса, отвечающего за зависший сервис
					'"Убийство соответствующего PID
					'Вызов функции стартующей сервис
				End If
			End If
		End If
	End With
End With

WScript.Quit 0
Iska, я уверен тебе вполне по силам помочь в данной задачке, пожалуйста помоги, а историю своей жизни и работы я как-нибудь в следующий раз распишу.
Спасибо!

Цитата Iska:
Поясните по поводу автоматизации. В новом сценарии звонок из филиала остаётся в наличии? »
Зачем звонок если сервис будет самовосстанавливаться автоматически (средствами винды - задание по расписанию)?

Отправлено: 17:26, 20-02-2015 | #25


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


C0D3X, у Вас нет задачи. У Вас есть придуманное якобы решение, которое ни разу не решает реальной задачи.

Что на самом деле происходит со службой? Как определяете, что она «зависает»? Что сообщает ОС о «зависшей» службе? Что в журналах событий? Что в логах самой службы? Каково состояние службы в этот момент? Вот какие вопросы надо задавать, и какие задачи решать, вместо того, чтобы тупо периодически перезапускать службу в процессе работы. Это не решение, это извращение. Попытка закрыть глаза на реально существующую проблему.

Я, конечно, нарисую Вашу хотелку, но проверить её работоспособность банально не смогу, поскольку у меня никогда такой проблемы с «FileZilla Server» не возникало.
Скрытый текст
Код: Выделить весь код
Option Explicit

Dim strServiceName

Dim objSWbemServicesEx
Dim objSWbemObjectEx


strServiceName = "FileZilla Server"


Set objSWbemServicesEx = WScript.CreateObject("WbemScripting.SWbemLocator").ConnectServer(".", "root\cimv2")
Set objSWbemObjectEx = objSWbemServicesEx.Get("Win32_Service.Name='" & strServiceName & "'")

If objSWbemObjectEx.Started Then
	If objSWbemObjectEx.AcceptStop Then
		If objSWbemObjectEx.StopService() = 0 Then
			Do
				WScript.Sleep 100
				
				Set objSWbemObjectEx = objSWbemServicesEx.Get("Win32_Service.Name='" & strServiceName & "'")
			Loop While objSWbemObjectEx.Started
			
			StartService
		Else
			WScript.Echo "Can't stop service [" & strServiceName & "]."
			
			With objSWbemServicesEx.Get("Win32_Process.Handle='" & CStr(objSWbemObjectEx.ProcessID) & "'")
				If .Terminate() = 0 Then
					StartService
				Else
					WScript.Echo "Can't terminate process of service [" & strServiceName & "]."
				End If
			End With
		End If
	Else
		WScript.Echo "Service [" & strServiceName & "] can't be stopped."
	End If
Else
	StartService
End If

Set objSWbemObjectEx   = Nothing
Set objSWbemServicesEx = Nothing

WScript.Quit 0
'=============================================================================

'=============================================================================
Sub StartService()
	If objSWbemObjectEx.StartService() = 0 Then
		Do
			WScript.Sleep 100
			
			Set objSWbemObjectEx = objSWbemServicesEx.Get("Win32_Service.Name='" & strServiceName & "'")
		Loop Until objSWbemObjectEx.Started
	Else
		WScript.Echo "Can't start service [" & strServiceName & "]."
	End If
End Sub
'=============================================================================
Это сообщение посчитали полезным следующие участники:

Отправлено: 09:47, 21-02-2015 | #26


Новый участник


Сообщения: 6
Благодарности: 0

Профиль | Отправить PM | Цитировать


Iska, огромное спасибо! Абалденный код!
А на счет вопросов: у меня тоже пока не было проблем, но поднять этот сервис пришлось совсем недавно и большого опыта работы с ним нет, а в отпуск уходить совсем скоро... Так вот такая последовательность действий решает 99% процентов проблем, которые могут случиться с сервисом, а это значит, что меня не вытащат посреди отпуска на работу из-за того, что не работает FTP. Возможно траблы не случаться вобще никогда и этот код так никогда на 100% и не сработает, но ведь предвидеть и попытаться предотвратить лучше, чем предвидеть и ждать "авось".... Согласны?
Еще раз большое спасибо!

Последний раз редактировалось C0D3X, 22-02-2015 в 14:06.


Отправлено: 13:59, 22-02-2015 | #27


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата C0D3X:
А на счет вопросов: у меня тоже пока не было проблем, »
[Iska бьётся головой об стену] Так какого ж @#$%…

Отправлено: 20:23, 22-02-2015 | #28


Новый участник


Сообщения: 6
Благодарности: 0

Профиль | Отправить PM | Цитировать


Iska, голову осторожнее она еще пригодится и не только тебе. От чего столько негодующих эмоций?! Тебя попросили помочь и ты помог, причем этим кодом дал много пищи для размышлений о том как автоматизировать другие процесс, так как, например, запуск 1с с определенной обработкой, перезапуск процессов отвечающих за связь с торг.представителями. Короче, Iska, Все норм! твой код послужил примером для написания еще 3 скриптов, так что что жил, то не зря Удачи! и больше позитива

Отправлено: 10:29, 23-02-2015 | #29



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] Кавычки внутри кавычек в VBS

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Интерфейс - Нестандартные кавычки EN130 Microsoft Windows 2000/XP 5 13-10-2010 15:20
Разное - [решено] Обработка кавычек в семерке pve Microsoft Windows 7 6 28-01-2010 08:03
VBS/WSH/JS - Помогите редактировать Autorun_Disable.vbs на Autorun_Enable.vbs nod201 Скриптовые языки администрирования Windows 0 05-12-2009 05:44
Разное - [решено] передача кавычек в XmlHttpRequest harrique Программирование и базы данных 3 26-01-2009 08:29
[решено] svcpack.inf, двойные кавычки в параметрах _DRON_ Автоматическая установка Windows 2000/XP/2003 2 23-06-2008 15:37




 
Переход