1 (изменено: biffick, 2022-05-11 12:18:36)

Тема: VBS: Изменение типа запуска службы и запуск службы

Всем привет.
Имеется скрипт по запуску служб VMware.
Работают только строки svcX.StartService.
Строки svcX.ChangeStartMode("Manual").StartService выдают ошибки при запуске скрипта.
Не могу разобраться, как сделать так, чтобы сначала изменялся тип запуска служб, а уже потом происходил их запуск.

Сам скрипт:


' 
' Script "Change Start Mode and Run Services"
' 
Set wmi = GetObject("winmgmts://./root/cimv2")
' 
' VMware Mode and Start Services
' 
Set svc = wmi.Get("Win32_Service.Name='VMAuthdService'")
Set svc2 = wmi.Get("Win32_Service.Name='VMnetDHCP'")
Set svc3 = wmi.Get("Win32_Service.Name='VMware NAT Service'")
Set svc4 = wmi.Get("Win32_Service.Name='VMUSBArbService'")
Set svc5 = wmi.Get("Win32_Service.Name='VMwareHostd'")
svc.ChangeStartMode("Manual").StartService
svc2.ChangeStartMode("Manual").StartService
svc3.ChangeStartMode("Manual").StartService
svc4.ChangeStartMode("Automatic").StartService
svc5.ChangeStartMode("Disable").StartService
' 
' VMware Start Program
' 
Set objShell = CreateObject("WScript.Shell")
' Example (Program, Size, Parameters)
' objShell.Run """C:\Program Files (x86)\vlc.exe"" --fullscreen ""E:\eto test\Misfits.S01E05.mkv"""
objShell.Run """C:\Program Files (x86)\VMware\VMware Workstation\vmware.exe"" """""
WScript.Quit

2

Re: VBS: Изменение типа запуска службы и запуск службы

Добрый день!
VMware у меня нет, как и прав администратора на рабочем компе.
Попробуйте "расцепить" вызовы функций:

svc.ChangeStartMode("Manual")
svc.StartService

Скорее всего, ChangeStartMode() возвращает результат выполнения, а не ссылку на объект:
https://docs.microsoft.com/en-us/window … estartmode
0 The request was accepted.
1 The request is not supported.
2 The user did not have the necessary access. (у меня как раз возвращает 2 на все службы)
...

3

Re: VBS: Изменение типа запуска службы и запуск службы

andypetr пишет:

Попробуйте "расцепить" вызовы функций:

Здравствуйте. Если разъединить вызовы, то будет работать. Но хотелось бы, чтобы в одной строке всё было.

4

Re: VBS: Изменение типа запуска службы и запуск службы

Почему bat'ники отрабатывают такие же функции дольше, чем VBS, причём сильно дольше?
Bat'ник запускает службу 2 секунды, а VBS это делает за доли секунды.
Может возможно как-то решить проблему, тогда VBS отпал бы вообще.

5 (изменено: andypetr, 2022-05-13 07:35:40)

Re: VBS: Изменение типа запуска службы и запуск службы

Более лаконично можно было бы так написать (внутри цикла For оставить один из двух вариантов):

Set wmi = GetObject("winmgmts://./root/cimv2")
' 
' VMware Mode and Start Services
' 
For Each strName In Array("VMAuthdService", "VMnetDHCP", "VMware NAT Service", "VMUSBArbService", "VMwareHostd")
	
	' 1 вариант:
	With wmi.Get("Win32_Service.Name='" & strName & "'")
		.ChangeStartMode("Manual")
		.StartService
	End With
	
	' 2 вариант (можно конструкцию With записать в одну строку):
	With wmi.Get("Win32_Service.Name='" & strName & "'"):.ChangeStartMode("Manual"):.StartService:End With

Next
' 
' VMware Start Program
' 
...

PS. Насчёт bat-файлов, не видя кода, ничего не могу сказать.
У меня команды SC и NET отрабатывают быстро (сразу отказ в доступе, т.к. нет прав администратора).

6 (изменено: biffick, 2022-05-16 00:21:19)

Re: VBS: Изменение типа запуска службы и запуск службы

andypetr пишет:

PS. Насчёт bat-файлов, не видя кода, ничего не могу сказать.
У меня команды SC и NET отрабатывают быстро (сразу отказ в доступе, т.к. нет прав администратора).

Bat-ник медленно отрабатывает, потому что он ждёт запуска/остановки каждой службы.
В принципе, вот код bat-ника:


@echo off

rem Подсебятина
rem Цвет текста
color 0B
rem Пауза
set "pause=1>nul timeout /t 0 /nobreak"
rem Показ ошибок
set "errors=2>nul"
rem Показ информации
set "info=1>nul 2>&1"


echo ==================================================
echo # ЗАПУСК VMWARE
echo ______________________________________

%pause%

echo Запуск службы "VMAuthdService"
sc config "VMAuthdService" start= demand
net start "VMAuthdService"
echo ______________________________________


echo Запуск службы "VMnetDHCP"
sc config "VMnetDHCP" start= demand
net start "VMnetDHCP"
echo ______________________________________


echo Запуск службы "VMware NAT Service"
sc config "VMware NAT Service" start= demand
net start "VMware NAT Service"
echo ______________________________________


echo Запуск службы "VMUSBArbService"
sc config "VMUSBArbService" start= demand
net start "VMUSBArbService"
echo ______________________________________


echo Запуск службы "VMwareHostd"
sc config "VMwareHostd" start= demand
net start "VMwareHostd"
echo ______________________________________


echo Запуск "VMware Workstation Pro"
%pause%
start "" "vmware.exe"

exit

Конечно же, этот bat-ник лежит в папке VMware.
Отрабатывает примерно за 5 секунд, в то время как VBS это делает менее чем за секунду.

По поводу вашего кода - VBS-ник пишется с запасом на будущее, т.е. не только под VMware и не только под ChangeStartMode("Manual"), где-то будет "Automatic", где-то другое.

7

Re: VBS: Изменение типа запуска службы и запуск службы

Вопрос, в общем-то, решён.
Спасибо andypetr!

8

Re: VBS: Изменение типа запуска службы и запуск службы

andypetr, я подправил скрипт так, чтобы было удобно.
Результат:


' Script 'Autorun Services Stop'
' 
' Services use = StartService | StopService
' ChangeStartMode = Boot | System | Automatic | Manual | Disabled
' 
Set wmi = GetObject("winmgmts://./root/cimv2")
' __________________________________________________________________
' Services with Manual StartMode
' 
For Each ManualStartMode In Array("Bluetooth Device Monitor", "Bluetooth Media Service", "Bluetooth OBEX Service", "iBtSiva", "XperiaCompanionService", "TeamViewer")
' 
' Actions
' 
With wmi.Get("Win32_Service.Name='" & ManualStartMode & "'"):.StopService:.ChangeStartMode("Manual"):End With
Next
' __________________________________________________________________
' Services with Disabled StartMode
' 
For Each DisabledStartMode In Array("VMwareHostd", "VMUSBArbService", "VMware NAT Service", "VMnetDHCP", "VMAuthdService")
' 
' Actions
' 
With wmi.Get("Win32_Service.Name='" & DisabledStartMode & "'"):.StopService:.ChangeStartMode("Disabled"):End With
Next
' __________________________________________________________________
' Quit
WScript.Quit

9 (изменено: Rumata, 2022-05-14 19:50:55)

Re: VBS: Изменение типа запуска службы и запуск службы

biffick пишет:

я подправил скрипт

У Вас два фактически идентичных цикла. Параметризуйте их и заверните в подпрограмму.

( 2 * b ) || ! ( 2 * b )

10 (изменено: biffick, 2022-05-16 00:21:39)

Re: VBS: Изменение типа запуска службы и запуск службы

Rumata, здравствуйте. Понимал бы Visual Basic Script, на форум не лез бы.

11

Re: VBS: Изменение типа запуска службы и запуск службы

Например, так:


Set wmi = GetObject("winmgmts://./root/cimv2")

ServicesSetMode wmi, "Manual", Array( _
	"Bluetooth Device Monitor", _
	"Bluetooth Media Service", _
	"Bluetooth OBEX Service", _
	"iBtSiva", _
	"XperiaCompanionService", _
	"TeamViewer" )

ServicesSetMode wmi, "Disabled", Array( _
	"VMwareHostd", _
	"VMUSBArbService", _
	"VMware NAT Service", _
	"VMnetDHCP", _
	"VMAuthdService" )

Sub ServicesSetMode(wmi, mode, names)
	Dim service
	For Each name in names
		Set service = wmi.Get("Win32_Service.Name='" & name & "'")
		service.StopService
		service.ChangeStartMode(mode)
	Next
End Sub
( 2 * b ) || ! ( 2 * b )

12 (изменено: biffick, 2022-05-16 00:21:52)

Re: VBS: Изменение типа запуска службы и запуск службы

Rumata, благодарю, всё работает.

13

Re: VBS: Изменение типа запуска службы и запуск службы

biffick, ознакомьтесь, пожалуйста, с Правилами, отредактируйте свои посты. Обратите внимание на точки в конце предложений.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

14

Re: VBS: Изменение типа запуска службы и запуск службы

teadrinker, ok.