Как посмотреть службы на сервере

Управляем службами Windows с помощью PowerShell

ПОЛУЧАЕМ СТАТУС СЛУЖБЫ

Давайте начнем с того, что просто получим статус всех служб, запущенных на локальном компьютере. Используем для этого командлет Get-Service.

PowerShell, как правило, не чувствителен к регистру. Вывод приведен на скриншоте ниже.

Каждая строка представляет собой объект службы (service object).Каждый сервисный объект, как правило, имеет свои свойства. Вы можете открыть их, просто передав эти объекты в другую команду, Get-Member.

Результаты приведены на скриншоте ниже.

Параметр Typename сверху говорит о том, что за объект перед нами; в данном случае это System.ServiceProcess.ServiceController. На скриншоте также обведены свойства объекта. Это атрибуты, которые описывают этот тип объекта. Хотя большинство из них не используются при отображении по умолчанию, вы можете использовать их, если вы их знаете.
Например, нам интересно посмотреть информацию только о Windows Update. Через Get-Service получим информацию только о некоторых ее свойствах.

Как я узнал, что могу напечатать имя службы? Посмотрел с помощью Get-Service.
PS C:\> help get-service

Вы можете получить полную справочную информацию, напечатав:

Информацию о службе можно получить по ее имени или даже начальным буквам имени.

Или если вам удобнее работать с отображаемыми именами, используйте параметр –Displayname.

Я должен использовать имя параметра, чтобы PowerShell воспринимал значения в качестве отображаемого имени, а не фактического имени службы. Команда будет выглядеть так:

Параметр –Name можно не печатать.

ПОЛУЧАЕМ СТАТУС СЛУЖБЫ НА УДАЛЕННЫХ КОМПЬЮТЕРАХ

До этого нас интересовало получение информации о статусе служб на локальном компьютере. Однако управление службами осуществляется на удаленных компьютерах. Если посмотреть справку по Get-Service, то можно увидеть наличие у этого командлета параметра –Computername. В данном случае подключение к удаленным компьютерам осуществляется без включения функции удаленного управления PowerShell. Если вы можете управлять службами, используя инструменты командной строки (sc.exe или консоль управления Service Manager), вы можете использовать PowerShell. Давайте взглянем на пример:

Любая команда, которую я демонстрировал, можно использовать для передачи удаленному компьютеру. Даже нескольким компьютерам, если у вас есть соответствующие права на удаленном компьютере. Если вы используете PowerShell v3, то можно легко выбрать одну службу на множестве компьютеров.

Для наглядности представления отформатируем вывод.

Тот же самый результат, но в PowerShell v2.

ОСУЩЕСТВЛЯЕМ ФИЛЬТРАЦИЮ (ИСПОЛЬЗУЯ WHERE-OBJECT)

Фильтрация служб осуществляется с помощью командлета Where-Object (where – сокращение для командлета). Все, что нам нужно от PowerShell в этом случае, так это получить только те службы, у которых статус равен “stopped”.

PowerShell получает информацию обо всех службах и передает их (с помощью “|”) в следующую команду, которая осуществляет просмотр каждого объекта. Если свойство статуса объекта равно “stopped”, она остается в конвейере (pipeline), в противном случае она из него исключается. В конце выражение PowerShell отображает те объекты, которые остались в конвейере.
Результаты приведены ниже.

Теперь давайте попробуем найти одну службу на нескольких машинах. Вывод отформатируем в таблицу.

Мы даже можем комбинировать запрос отдельных служб с их фильтрацией.

Эта команда находит все службы на компьютере CHI-DC03, которые начинаются с ‘WIN’, но отображает только те, которые запущены.
Также можно сгруппировать объекты по свойству статуса (status property).

Свойство Group представляет собой коллекцию связанных служб.

Написанное выше проще понять, если взглянуть на скриншот.

Что касается меня, то я бы предпочел использовать хеш-таблицу.

Теперь каждое имя представляет собой свойство в хеш-таблице. Если у вас имеется опыт работы с PoweShell, вы, возможно, подумываете сделать сделующее:

В чем суть параметра –AsString, на мой взгляд, достаточно очевидно. Теперь работать с хеш-таблицей стало проще.

Следующей задачей на повестке дня является проверка зависимостей сервера (server dependencies).

Требуемые службы

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

Параметр –RequiredServices передаст объект в конвейер для каждой требуемой службы. Вы можете даже пойти дальше и проверить требуемые службы для работы данной службы.

Параметр –Computername командлета Get-Service возьмет вывод, но только для тех объектов, у которых есть объект свойство Computername – именно поэтому я использую хеш-таблицу с Select-Object. Как мы видим проблем со службой DNS на компьютере CHI-DC03 нет.

ЗАВИСИМЫЕ СЛУЖБЫ

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

Требуемые и зависимые службы также являются частью каждого объекта службы.

А пока Вы можете получить все зависимости для всех служб, следующая команда

Это не даст вам особо полезную информацию, поэтому я рекомендую осуществлять запрос по конкретным службам. Команда работает гораздо лучше PowerShell v3.

Результаты видны на скриншоте ниже.

Чтобы получить подобные результаты в PowerShell v2, вам придется передать имена компьютеров (computernames) в Get-Service.

В следующей статье будет рассмотрен запуск, остановка и перезапуск служб.
Конец перевода.

Источник

Управляем службами Windows с помощью PowerShell. Часть 2

Так как команда для получения статуса службы называется Get-Service, догадаться о том, как пишутся другие команды не составит труда. На худой конец мы можем спросить у PowerShell обо всех командах, так или иначе относящихся к работе со службами. Обратите внимание, что мы использовали параметр –noun для получения всех команд, связанных со службами.

Читайте также:  врезка петель межкомнатных дверей

Взглянем на эти команды внимательнее.

STOP-SERVICE

Чтобы остановить службу, мы должны уточнить ее имя.

Однако в конвейер ничего не будет передано. Некоторые командлеты, такие как Stop-Service, созданы таким образом, что по умолчанию они не записывают объект в конвейер. Мы же заставим это сделать, использовав параметр –Passthru.

Если служба не запущена, то командлет ничего не выведет, равно как и не выдаст никакой ошибки. Поэтому иногда лучше передать объект в Stop-Service (естественно использовав при этом параметр –whatif).

Параметр –WhatIf был добавлен для того, чтобы мы посмотрели, что будет, если командлет будет запущен. Когда я удостоверюсь, что это именно та служба, которая меня интересует, я просто удалю -Whatif и остановлю службу.

Как я уже упомянул выше, если служба уже остановлена, то командлет ничего не сделает. И использование Stop-Service в этом случае никому не навредит. Однако я все же предпочитают более цивилизованный подход, а именно:

Если служба запущена, то объект передается в конвейер и отправляется в Stop-Service. Ниже приведен вариант с остановкой нескольких служб.

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

В таком случае используем параметр –Force. В большинстве случаев это работает, но без “защиты от дурака”. Помните, что команда также остановит зависимые службы.

START-SERVICE

Запуск службы осуществляется аналогичным образом. Он поддерживает параметр –Whatif, и вам придется использовать –Passthru, чтобы увидеть объекты.

И снова: если служба уже запущена, командлет ничего не сделает. Однако вы можете попытаться запустить службу и получите такую ошибку.

Причиной тому в большинстве случаев является выключенные службы. Как конфигурировать настройки службы, я расскажу в следующей статье.
Если вы хотите запустить службы и все службы, зависимые от нее, используйте следующее выражение:

Мы должны явно получить зависимые службы, потому что Start-Service не запустит автоматически их.

RESTART-SERVICE

Вы удивитесь, но перезапуск службы работает также как два предыдущих примера. Используйте –Passthru, если хотите убедиться, что служба запущена.

Так как мы осуществляем остановку службы, нам может понадобиться параметр –Force.

ПРИОСТАНОВКА И ВОЗОБНОВЛЕНИЕ РАБОТЫ

Работа некоторых служб может быть приостановлена на некоторое время, а затем возобновлена, и мы можем это сделать через PowerShell. Однако если служба не удовлетворяет требованиям, мы получим такие ошибки. (на примере показано, что мы пытались приостановить службу bits)

В чем же проблема? Смотрим на объект (используя Get-Service).

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

Как мы видим, не так много служб удовлетворяют этому требованию.

Готовы возобновить работу службы? Используйте следующее выражение:

Оба командлета также поддерживают –Whatif.

УДАЛЕННЫЕ СЛУЖБЫ

Как вы могли обратить внимание, все примере выше мы демонстрировали на локальном машине. И это неслучайно. К сожалению даже в PowerShell v3, ни у одного из этих командлетов нет параметра, который позволял бы управлять службой на удаленном компьютере. Get-Service, конечно, поддерживает параметр –Computername, но не более. Службу лицезреть вы сможете, а что-либо с ней сделать не получится. Нет, можно, конечно, если удаленный компьютер работает с PS v2 и включен PowerShell Remoting. Тогда мы можете использовать все выше приведенные команды, используя Invoke-Command для удаленного компьютера или PSSession. С другой стороны, проще управлять одной службой на нескольких серверах.

Управление службами на удаленных компьютерах не ограничивается вышеперечисленным, но это уже будет предмет рассмотрения последующих статей.
Все эти командлеты могут быть использованы в конвейерном выражении и зачастую это лучший вариант. Использование Get-Service для получения объектов и последующая передача их в подходящий командлет.

УСТАНАВЛИВАЕМ УДАЛЕННЫЙ СТАТУС

Итак, мы выяснили, что у командлета Stop-Service отсутствует такой полезный параметр как –Computername. Мы можете использовать эти команды в удаленной сессии, обратившись к командлету Invoke-Command, что уже само по себе продуктивно, если вы работаете со службой на нескольких компьютерах. Одно можно запускать, останавливать, перезапускать, ставить на паузу и запускать заново, используя Set-Service.

Эта команда поддерживает параметр –WhatIf. Вы также должны использовать –Passthru для передачи объектов в конвейер.

Валидными значениям для параметра –Status являются “запущена” (running), “остановлена” (stopped) и “на паузе” (paused). Помните, что у службы есть зависимые службы, мы не сможете изменять ее, что и продемонстрировано на скриншоте ниже.

К сожалению, у Set-Service отсутствует параметр –Force, поэтому придется вернуться к использованию PowerShell remoting и Invoke-Command. Если вы хотите перезапустить удаленную службу, используйте следующую команду:

Не забудьте использовать –Passthru, в противном случае вторая команда Set-Service ничего не осуществит.
Что по мне, так я предпочитаю работать сразу с несколькими службами, которые я не могу удаленно остановить, используя Set-Service, хотя их запуск проблем составляет. Я использую Invoke-Command. Но помните, что используя параметр –Computername PowerShell осуществляет подключение, используя RPC и DCOM, что может привести к проблемам с файрволом. Invoke-Command использует PowerShell remoting, который мы может быть еще не настроили или не включили.

Читайте также:  Как построить точки в матлабе

УСТАНАВЛИВАЕМ ТИП АВТОЗАПУСКА СЛУЖБЫ

Set-Service полезнен, когда вы хотите включить или отключить службу, используя параметр –StartupType. Если Вы настроили службу, используя значения Automatic, Manual or Disabled. К сожалению, не существует варианта для Automatic (Delayed).

Однако, просто взглянув на объект, мы не сможем сказать, к какому типу автозагрузки он относится.

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

Так что если вы хотите выключить и остановить (или включить и запустить) службу, передайте объект в подходящий командлет.

Технически, Set-Service позволяет вам изменить отображаемое имя службы и описание, но лично мне никогда не приходилось использовать в своей работе. Я использую Set-Service для включения и выключения служб. Если необходимо управлять службами удаленно, то я использую Invoke-Command.
Все, что я продемонстрировал в последних статьях, было связано с использованием специфических типов объектов службы, которые, как вы могли заметить, имеют некоторые ограничения. В следующей статье мы рассмотрим другие возможности по управлению службами, которые призваны обойти эти ограничения.

Источник

Получение списка служб средствами командной строки и сервера Windows Script Host

Всем, привет, в данной статье мы научимся получать список служб Windows как используя командную строку, так и сценарии Windows Script Host. Но, сначала немного лирики … рядовой пользователь ОС Windows всегда находится в самообмане: если он крякнул антивирусную программу, значит она его защитит перед всеми злодеями, если у него модная Семерка, значит он мастер, а у кого XP, так те – цифровые динозавры.

Любой программный код подвержен ошибкам и багам, так в старых версиях XP была учетная запись Администратор (Administrator), она не отображалась при загрузке, но была активной, естественно, пароль на ней не стоял, и ваш сосед по комнате мог спокойно, в момент вашего отсутствия войти в систему с правами администратора и наколдовать что угодно, для этого достаточно было в окне выбора пользователя ввести заветную комбинацию CTRL + ALT + DEL, далее ввести имя юзера Администратор (Administrator) и нажать вход, и … вуалая, вы в системе. Тоже относится и к сервисам, практически все они работают под системной учеткой, на которой также нет ни пароля, ни ограничений, если они активны, ну… например, telnet, или служба Удаленный реестр, то… тоже можно нашалить.

И поэтому, в этой статье мы попробуем получить список служб используя командную строку и сценарии Windows Script Host, кодить будем на языке vbscript и jscript.

Сам сервер Windows Script Host не предоставляет объекта для работы со службами системы, тут есть два пути или утилиты командной строки, или WMI. В этой статье мы рассмотрим первый способ, и так… усаживайтесь поудобней, берите пиво и тараньку, … начинаем.

Sc query> “D:\work\service.txt”

Тут мы указали, что данные должны выводиться не на экран, а в текстовый файл service.txt в папку D:\work\. Лады, давайте взглянем, что нам наколдовала утилита sc query:

Из скрина видно, что информация о службе выводится в отдельном блоке, давайте его проанализируем:

Последние четыре строки нам пока не представляют интерес.

Ладно, теперь давайте посмотрим, как можно задать параметры фильтрации:

И так, что бы задать фильтр, мы прописываем команду sc query,пробел, далее пишем имя фильтра, знак равенства, пробел и значение.

Так, что бы получить список неактивных служб, командная строка требует следующий синтаксис:

Sc query state= inactive> “D:\work\service.txt”

В свое время, на это я ставил точку и заканчивал статью, но… не на этом блоге.

Давайте сделаем так, что бы в диалоговом окне задать нужные параметры, и получить полный или отфильтрованный список, ясен пень, что в командной строке это не реализовать, то мы будет использовать сценарии сервера WSH и объект WindowSystemObject.

Вот как выглядит будущая форма для сценария:

Сперва мы напишем пример на языке vbscript, я в нем все разъясню, что бы было понятно, что к чему, а потом на его основе мы напишем пример на языке jscript.

‘ *********************************************************** ‘ Список служб командная строка ‘ service.vbs ‘ *********************************************************** Option Explicit dim WSO, WshShell, FSO dim f, t, cur_dir, temp_file, edit1 dim type_f, state_f, bufsize_f, ri_f dim Button_Analice, Button_Open, Button_Cleare dim data_file ‘*************создаем ссылки на объекты************* set WSO = CreateObject(«Scripting.WindowSystemObject») set WshShell = CreateObject(«Wscript.Shell») set FSO = CreateObject(«Scripting.FileSystemObject») ‘************************************************************************* ‘Задаем начальные размеры и отступы set f = WSO.CreateForm(0,0,0,0) ‘Задаем через свойства ширину и высоту f.ClientWidth = 600 f.ClientHeight = 650 ‘Центрируем форму f.CenterControl() ‘Заголовок окна f.Text = «Список служб командная строка» ‘нельзя менять размеры f.SizeGrip = false ‘нельзя развернуть форму f.MaximizeBox = false ‘ Текущий каталог cur_dir = WshShell.CurrentDirectory ‘ путь к временному файлу temp_file = WShShell.ExpandEnvironmentStrings(«%TEMP%») & «\» & FSO.GetTempName ‘Поле для вывода данных set edit1 = f.CreateEdit(0,0,400,650,WSO.Translate(«ES_MULTILINE»)) edit1.ScrollBars = WSO.Translate(«SS_BOTH») edit1.ReadOnly = true edit1.WordWrap = true ‘**************************** Тип ******************************************** f.TextOut 410,10,»Тип:» ‘Список set type_f = f.CreateComboBox(480,10,100,20,WSO.Translate(«CBS_DROPDOWNLIST»)) type_f.add(«driver») type_f.add(«service») type_f.add(«all») type_f.ItemIndex=2 ‘***************************************************************************************** ‘**************************** Статус ******************************************** f.TextOut 410,40,»Статус:» ‘Список set state_f = f.CreateComboBox(480,40,100,20,WSO.Translate(«CBS_DROPDOWNLIST»)) state_f.add(«active») state_f.add(«inactive») state_f.add(«all») state_f.ItemIndex=1 ‘***************************************************************************************** ‘**************************** Буфер ******************************************** f.TextOut 410,70,»Буфер:» ‘Поле для ввода set bufsize_f = f.CreateEdit(480,70,100,20,WSO.Translate(«ES_MULTILINE»)) ‘Задаем тип вводимых данных bufsize_f.DataType=WSO.Translate(«DT_INTEGER») bufsize_f.Text=»4096″ ‘***************************************************************************************** ‘**************************** Номер индекса ******************************************** f.TextOut 410,100,»Индекс:» ‘Поле для ввода set ri_f = f.CreateEdit(480,100,100,20,WSO.Translate(«ES_MULTILINE»)) ‘Задаем тип вводимых данных ri_f.DataType=WSO.Translate(«DT_INTEGER») ri_f.Text=»0″ ‘***************************************************************************************** ‘*******************************************************************’ ‘ кнопка получения данных set Button_Analice = f.CreateButton(480,130,100,25,»Анализировать») Button_Analice.OnClick = getref(«Analize») ‘ кнопка очистки данных set Button_Cleare = f.CreateButton(480,160,100,25,»Очистить») Button_Cleare.OnClick = getref(«Cleare») ‘кнопка открытия файла с данными set Button_Open = f.CreateButton(480,190,100,25,»Открыть») Button_Open.OnClick = getref(«Open») set t = f.CreateHyperLink(450,230,250,25,»www.scriptcoding.ru») f.Show() WSO.Run() ‘Очищаем поля вывода информации function Cleare() edit1.Text=»» data_file=»» end function ‘Отправка запроса function Analize() dim type_date, state_date, bufsize_date, ri_date dim get_file_data Cleare() type_date = » type= » & type_f.Text state_date = » state= » & state_f.Text bufsize_date = » bufsize= » & bufsize_f.Text ri_date = » ri= » & ri_f.Text if type_f.Text = «service» then type_date = «» end if if state_f.Text = «active» then state_date = «» end if ‘запуск командной строки для получения списка служб с выводом данных в файл WshShell.Run «cmd.exe /c sc query» & type_date & state_date & bufsize_date & ri_date & » > » & temp_file,1,true ‘***********открываем файл для считывания данных********************* set get_file_data=FSO.OpenTextFile(temp_file, 1, false) data_file = get_file_data.ReadAll get_file_data.Close ‘*********************************************************************************** edit1.Text = data_file end function function Open() ‘ открываем временный файл WshShell.Run «wordpad.exe » & temp_file end function

Читайте также:  Как появляется ток для детей

И так, в комментариях я некоторые пункты разъяснил, поэтому сконцентрируемся на главном. Фактически, за весь процесс получения списка служб в командной строке отвечает функция Analize(), давайте остановимся на ней подробно:

Переменные type_date, state_date, bufsize_date и ri_date хранять в себе значения, которые прописаны в полях и списках формы, тут мы сразу вставляем имя флага и знак равенства. Далее происходит проверка флагов type и state, дело в том, что если им присвоить значения по умолчанию, то возникнет ошибка в самой командной строке, поэтому, все значения по умолчанию мы заменяем на пустую строку. Далее, используя функцию Run объекта WScript.Shell мы запускаем командную строку с параметрами для получения списка служб, переменная temp_file хранит путь к временному файлу, именно в него будет направлен вывод. Далее происходит открытие временного файла, считывание из него данных, и их запись в поле вывода на форме. При нажатии на кнопку Открыть, происходит вызов функции Open, которая отвечает за открытие временного файла программой wordpad.exe.

А вот аналогичный пример, но уже на языке jscript:

// *********************************************************** // Список служб командная строка // service.js // *********************************************************** var WSO, WshShell, FSO; var f, t, cur_dir, temp_file, edit1; var type_f, state_f, bufsize_f, ri_f; var Button_Analice, Button_Open, Button_Cleare; var data_file; //*************создаем ссылки на объекты*********************** WshShell = WScript.CreateObject(«Wscript.Shell»); FSO = WScript.CreateObject(«Scripting.FileSystemObject»); WSO = WScript.CreateObject(«Scripting.WindowSystemObject»); //****************************************************************************** //Задаем начальные размеры и отступы f = WSO.CreateForm(0,0,0,0); //Задаем через свойства ширину и высоту f.ClientWidth = 600; f.ClientHeight = 650; //Центрируем форму f.CenterControl(); //Заголовок окна f.Text = «Список служб командная строка»; //нельзя менять размеры f.SizeGrip = false; //нельзя развернуть форму f.MaximizeBox = false; // Текущий каталог cur_dir = WshShell.CurrentDirectory; // путь к временному файлу temp_file = WshShell.ExpandEnvironmentStrings(«%TEMP%») + «\\» + FSO.GetTempName(); //Поле для вывода данных edit1 = f.CreateEdit(0,0,400,650,WSO.Translate(«ES_MULTILINE»)); edit1.ScrollBars = WSO.Translate(«SS_BOTH»); edit1.ReadOnly = true; edit1.WordWrap = true; //**************************** Тип ******************************************** f.TextOut(410,10,»Тип:»); //Список type_f = f.CreateComboBox(480,10,100,20,WSO.Translate(«CBS_DROPDOWNLIST»)); type_f.add(«driver»); type_f.add(«service»); type_f.add(«all»); type_f.ItemIndex=2; //***************************************************************************************** //**************************** Статус ******************************************** f.TextOut(410,40,»Статус:»); //Список state_f = f.CreateComboBox(480,40,100,20,WSO.Translate(«CBS_DROPDOWNLIST»)); state_f.add(«active»); state_f.add(«inactive»); state_f.add(«all»); state_f.ItemIndex=1; //***************************************************************************************** //**************************** Буфер ******************************************** f.TextOut(410,70,»Буфер:»); //Поле для ввода bufsize_f = f.CreateEdit(480,70,100,20,WSO.Translate(«ES_MULTILINE»)); //Задаем тип вводимых данных bufsize_f.DataType=WSO.Translate(«DT_INTEGER»); bufsize_f.Text=»4096″; //***************************************************************************************** //**************************** Номер индекса ******************************************** f.TextOut(410,100,»Индекс:»); //Поле для ввода ri_f = f.CreateEdit(480,100,100,20,WSO.Translate(«ES_MULTILINE»)); //Задаем тип вводимых данных ri_f.DataType=WSO.Translate(«DT_INTEGER»); ri_f.Text=»0″; //***************************************************************************************** //*******************************************************************// // кнопка получения данных Button_Analice = f.CreateButton(480,130,100,25,»Анализировать»); Button_Analice.OnClick = Analize; // кнопка очистки данных Button_Cleare = f.CreateButton(480,160,100,25,»Очистить»); Button_Cleare.OnClick = Cleare; //кнопка открытия файла с данными Button_Open = f.CreateButton(480,190,100,25,»Открыть»); Button_Open.OnClick = Open; t = f.CreateHyperLink(450,230,250,25,»www.scriptcoding.ru»); f.Show(); WSO.Run(); //Очищаем поля вывода информации function Cleare() < edit1.Text=""; ; >//Отправка запроса function Analize() < Cleare() var type_date = " type= " + type_f.Text; var state_date = " state= " + state_f.Text; var bufsize_date = " bufsize= " + bufsize_f.Text; var ri_date = " ri= " + ri_f.Text; var type_date, state_date, bufsize_date, ri_date, get_file_data if (type_f.Text == "service")if (state_f.Text == «active») //запуск командной строки для получения списка служб с выводом данных в файл WshShell.Run («cmd.exe /c sc query» + type_date + state_date + bufsize_date + ri_date + » > » + temp_file,1,true); //***********открываем файл для считывания данных********************* get_file_data=FSO.OpenTextFile(temp_file, 1, false) data_file = get_file_data.ReadAll() get_file_data.Close() //*********************************************************************************** edit1.Text = data_file > function Open()< // открываем временный файл WshShell.Run ("wordpad.exe " + temp_file); >

В принципе, тут нет ничего сложного, если что, задавайте вопросы в комментариях, буду рад ответить, также буду рад, если подпишитесь на обновление блога. Ну что же, мы рассмотрели примеры получения списка служб средствами командной строки и Windows Script Host.

Спасибо за внимание. Автор блога Владимир Баталий

Источник

Обучающий онлайн портал