Устранение проблем политики и предпочтений
В этом разделе обсуждаются проблемы удаленного взаимодействия, связанные с политиками и предпочтениями, заданными на локальном и удаленном компьютерах.
Изменение политики выполнения для Import-PSSession и Import-Module
Командлеты и создают модули, которые содержат неподписанные файлы скриптов и файлы форматирования.
Чтобы импортировать модули, созданные этими командлетами, с помощью или , политика выполнения в текущем сеансе не может быть ограничена или AllSigned. Дополнительные сведения о политиках выполнения PowerShell см. в разделе about_Execution_Policies.
Чтобы импортировать модули без изменения политики выполнения для локального компьютера, установленного в реестре, используйте параметр Scope параметра, чтобы задать менее ограниченную политику выполнения для одного процесса.
Например, следующая команда запускает процесс с политикой выполнения. Изменение политики выполнения влияет только на текущий процесс и не изменяет параметр реестра PowerShell ExecutionPolicy .
Кроме того, с помощью параметра ExecutionPolicy можно запустить один сеанс с менее ограниченной политикой выполнения.
Дополнительные сведения о политиках выполнения см. в разделе about_Execution_Policies. Для получения дополнительных сведений введите .
Как задать и изменить квоты
Квоты можно использовать для защиты локального компьютера и удаленного компьютера от чрезмерного использования ресурсов, как случайных, так и вредоносных.
В базовой конфигурации доступны следующие квоты.
-
Поставщик WSMan (WSMan:) предоставляет несколько параметров квот, таких как параметры максенвелопесизекб и макспровидеррекуестс в узле, а также параметры максконкуррентоператионс, свойств maxconcurrentoperationsperuser и MaxConnections в узле.
-
Защитить локальный компьютер можно с помощью параметров максимумрецеиведдатасизеперкомманд и максимумрецеиведобжектсизе командлета и переменной предпочтений.
-
Защитить удаленный компьютер можно, добавив ограничения в конфигурации сеанса, например с помощью параметров максимумрецеиведдатасизеперкоммандмб и максимумрецеиведобжектсиземб командлета.
При конфликте квот с помощью команды PowerShell создает ошибку.
Чтобы устранить эту ошибку, измените удаленную команду так, чтобы она соответствовала квоте. Или определите источник квоты, а затем увеличьте квоту, чтобы завершить выполнение команды.
Например, следующая команда увеличивает квоту размера объекта в конфигурации сеанса Microsoft. PowerShell на удаленном компьютере с 10 МБ (значение по умолчанию) до 11 МБ.
Дополнительные сведения о командлете см. в разделе .
Дополнительные сведения о WS-Management квотах см. в разделе about_WSMan_Provider.
Устранение ошибок времени ожидания
Можно использовать время ожидания для защиты локального компьютера и удаленного компьютера от чрезмерного использования ресурсов, как случайных, так и вредоносных. Если время ожидания задано как на локальном, так и на удаленном компьютере, PowerShell использует самые короткие параметры времени ожидания.
В базовой конфигурации доступны следующие тайм-ауты.
-
Поставщик WSMan (WSMan:) предоставляет несколько параметров времени ожидания на стороне клиента и службы, например параметр макстимеаутмс в узле и параметры енумератионтимеаутмс и макспаккетретриевалтимесекондс в узле.
-
Защитить локальный компьютер можно с помощью параметров канцелтимеаут, IdleTimeout, OpenTimeout и OperationTimeout командлета и переменной предпочтений.
-
Кроме того, можно защитить удаленный компьютер, задавая значения времени ожидания программным способом в конфигурации сеанса для сеанса.
Если значение времени ожидания не позволяет завершить операцию, PowerShell завершает операцию и создает ошибку.
Чтобы устранить эту ошибку, измените команду для завершения в течение интервала времени ожидания или определите источник предельного времени ожидания и Увеличьте интервал времени ожидания, чтобы завершить выполнение команды.
Например, следующие команды используют командлет для создания объекта параметра сеанса со значением OperationTimeout , равным 4 минутам (в мс), а затем используйте объект параметра сеанса для создания удаленного сеанса.
Дополнительные сведения об истечении времени ожидания WS-Management см. в разделе справки по поставщику WSMan (тип ).
Дополнительные сведения о командлете см. в разделе New-PSSessionOption.
Limitations and Issues
The service script must be run in a shell running with administrator rights or you’ll get various access denied errors.
The sample script works in Windows versions XP to 10, and the corresponding server versions. In Windows XP, you have to install Windows PowerShell v2, which isn’t available by default. Download and install Windows Management Framework v2 for XP (bit.ly/1MpOdpV), which includes Windows PowerShell v2. Note that I’ve done very little testing in that OS, as it’s not supported anymore.
On many systems, the Windows PowerShell script execution is disabled by default. If you get an error like, “the execution of scripts is disabled on this system,” when trying to run PSService.ps1, then use:
For more information, see “References.”
Obviously, a service script like this can’t be as performant as a compiled program. A service script written in Windows PowerShell will be good for prototyping a concept, and for tasks with low performance costs like system monitoring, service clustering and so forth. But for any high performance task, a rewrite in C++ or C# is recommended.
The memory footprint is also not as good as that of a compiled program, because it requires loading a full-fledged Windows PowerShell interpreter in the System session. In today’s world, with systems having many gigabytes of RAM, this is not a big deal.
This script is completely unrelated to Mark Russinovich’s PsService.exe. I chose the PSService.ps1 name before I knew about the homonymy. I’ll keep it for this sample script as I think the name makes its purpose clear. Of course, if you plan to experiment with your own Windows PowerShell service, you must rename it, to get a unique service name from a unique script base name!
References
- Introduction to Windows Service Applications (bit.ly/1UOBJJY)
- How to: Create Windows Services (bit.ly/1VJCnJo)
- ServiceBase Class (bit.ly/1UOC13y.aspx))
- Managing Services (bit.ly/1VJCZyG)
- How to: Debug Windows Service Applications (bit.ly/1RjEhPg)
Jean-François Larvoire works for Hewlett-Packard Enterprise in Grenoble, France. He has been developing software for 30 years for PC BIOS, Windows drivers, Windows and Linux system management. He can be reached at [email protected].
Thanks to the following technical expert for reviewing this article: Jeffery Hicks (JDH IT Solutions)
Отключаем или запускаем службу при помощи командной строки или bat-файла | pressdev
Всем привет дорогие друзья. В данной статье я хотел бы Вам рассказать про то, как можно остановить или запустить какую-то службу при помощи командной строки или простого bat-файла. Вы можете спросить, а зачем это необходимо мне, если я могу сделать это при помощи Панели управления (Пуск-Панели управления-Администрирования-Службы). Я Вам отвечу на данный вопрос: может быть такое, что Вам необходимо делать какую-то операцию по определенному времени и Вам необходимо отключать какую-то службу, чтобы сделать эту операцию, а доступа к компьютеру нет. Поэтому, Вы можете написать bat-файл, который будет останавливать службу, а по окончанию операции ее запускать. Данный файл Вы можете назначить в Назначенные задания.
Это может пригодиться, если делаете какой-то бекап базы данных, но копирование базы невозможно из-за того, что работает служба сервера, например SQL-сервер. Данный вопрос можно будет решить, путем написания файла, который останавливает службу по расписанию, потом Вы производите копирование, а затем автоматически запускается служба.
Вот так Вы можете остановить службу в ручном режиме, а дальше я Вам покажу, как это сделать при помощи командной строки или же bat-файла.
Для того чтобы таким образом остановить службу, Вам необходимо знать ее название, это можно сделать путем нажатия правой кнопкой мыши по службе и из контекстного меню выбрать Свойства, а затем посмотреть название.
Все, зная название службы, можно приступать. Поэтому, нажимаем Пуск-Выполнить и в поле вводим CMD, затем в командной строке пишем следующее:
То есть, пишите: net stop имя_службы
Для того чтобы ее запустить, Вам придется написать следующее: net start имя_службы:
Вот, таким образом Вы можете остановить службу, а также ее запустить. Если интересно, то я Вам могу рассказать, как можно настроить автоматический бекап базы данных SQL-сервера. А пока можете почитать статью о том, как можно создать БД в MS SQL Server, а также как удаленно к ней подключиться.
Event Logging
Services run in the background, without a UI. This makes them difficult to debug: How can you diagnose what went wrong, when by design nothing is visible? The usual method is to keep a record of all error messages with time stamps, and also to log important events that went well, such as state transitions.
The sample PSService.ps1 script implements two distinct logging methods, and uses both at strategic points (including in parts of the previous code extracts, removed here to clarify the basic operation):
It writes event objects into the Application log, with the service name as the source name, as shown in Figure 10. These event objects are visible in the Event Viewer, and can be filtered and searched using all the capabilities of that tool. You can also get these entries with the Get-Eventlog cmdlet:
Figure 10 Event Viewer with PSService Events
It writes message lines to a text file in the Windows Logs directory, ${ENV:windir}\Logs\$serviceName.log, as shown in Figure 11. This log file is readable with Notepad, and can be searched using findstr.exe, or Win32 ports of grep, tail and so forth.
Figure 11 Sample Log File
A Log function makes it easy to write such messages, automatically prefixing the ISO 8601 time stamp and current user name:
Изменение учетной записи для запуска службы
Вы можете изменить учетную запись, из-под которой запускается служба. Получим имя учетной записи, которая используется для запуска службы TestService
get-wmiobject win32_service -filter «name=’TestService’» | Select name,startname
Для изменения имени и пароля учетной записи выполняем команды.
$svc = get-wmiobject win32_service -filter «name=’TestService’»$svc.GetMethodParameters(«change»)
В результате получаем список параметров метода Change(). Считаем на каком месте находятся параметры StartName и StartPassword – 20 и 21 место соответственно.
$svc | Invoke-WmiMethod -Name Change –ArgumentList @ ($null,$null,$null,$null,$null,$null,$null, $null,$null,$null,$null,$null,$null,$null,$null,$null, $null,$null,$null,»Administrator»,»P@ssw0rd»)
Либо вы можете указать имя gMSA аккаунта. Пароль при этом не указывается.
Как видите, PowerShell позволяет легко управлять службами Windows. Можно создавать, останавливать, запускать и возобновлять службы, менять их свойства. Большинство командлетов позволяют управлять службами на удаленных компьютерах.
Parameters
-FileVersionInfo
Indicates that this cmdlet gets the file version information for the program that runs in the
process.
On Windows Vista and later versions of Windows, you must open PowerShell with the Run as
administrator option to use this parameter on processes that you do not own.
To get file version information for a process on a remote computer, use the cmdlet.
Using this parameter is equivalent to getting the MainModule.FileVersionInfo property of each
process object. When you use this parameter, returns a FileVersionInfo object
System.Diagnostics.FileVersionInfo, not a process object. So, you cannot pipe the output of the
command to a cmdlet that expects a process object, such as .
Type: | SwitchParameter |
Aliases: | FV, FVI |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Id
Specifies one or more processes by process ID (PID). To specify multiple IDs, use commas to separate
the IDs. To find the PID of a process, type .
Type: | Int32 |
Aliases: | PID |
Position: | Named |
Default value: | None |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-IncludeUserName
Indicates that the UserName value of the Process object is returned with results of the command.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-InputObject
Specifies one or more process objects. Enter a variable that contains the objects, or type a command
or expression that gets the objects.
Type: | Process |
Position: | Named |
Default value: | None |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-Module
Indicates that this cmdlet gets the modules that have been loaded by the processes.
On Windows Vista and later versions of Windows, you must open PowerShell with the Run as
administrator option to use this parameter on processes that you do not own.
To get the modules that have been loaded by a process on a remote computer, use the
cmdlet.
This parameter is equivalent to getting the Modules property of each process object. When you
use this parameter, this cmdlet returns a ProcessModule object
System.Diagnostics.ProcessModule, not a process object. So, you cannot pipe the output of the
command to a cmdlet that expects a process object, such as .
When you use both the Module and FileVersionInfo parameters in the same command, this cmdlet
returns a FileVersionInfo object with information about the file version of all modules.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Name
Specifies one or more processes by process name. You can type multiple process names (separated by
commas) and use wildcard characters. The parameter name («Name») is optional.
Type: | String |
Aliases: | ProcessName |
Position: | |
Default value: | None |
Accept pipeline input: | True |
Accept wildcard characters: | True |
The .NET ServiceBase Class
All services must create a .NET object deriving from the ServiceBase class. Microsoft documentation describes all properties and methods of that class. Figure 4 lists a few of these, of particular interest for this project.
Figure 4 Some Properties and Methods of the ServiceBase Class
Member | Description |
ServiceName | Short name used to identify the service to the system |
CanStop | Whether the service can be stopped once it has started |
OnStart() | Actions to take when the service starts |
OnStop() | Actions to take when the service stops |
Run() | Registers the service executable with the SCM |
By implementing these methods, a service application will be manageable by the SCM to start automatically at boot time or on demand; and it’ll be manageable by the SCM control panel, by the old net.exe and sc.exe commands, or by the new Windows PowerShell service management functions, to start or stop manually.
Меняем имя ПК
Прежде всего, давайте выясним, какое имя можно присвоить компьютеру, а какое нельзя. В наименование ПК можно включать символы латиницы любого регистра, цифры, а также дефис. Использование спецсимволов и пробелов исключается. То есть вы не сможете включить в название такие знаки:
Также нежелательно использовать буквы кириллических или других алфавитов, кроме латиницы.
Кроме того, важно знать, что успешно выполнить описанные в данной статье процедуры можно только зайдя в систему под учетной записью администратора. После того как вы определились, какое название присвоите компьютеру, можно переходить к изменению имени
Для этого существует два способа.
Способ 1: «Свойства системы»
Прежде всего, разберем вариант, где наименование ПК меняется через свойства системы.
- Жмите «Пуск». Щелкните правой кнопкой мышки (ПКМ) на появившейся панели по наименованию «Компьютер». В отобразившемся перечне выберите «Свойства».
В левой области отобразившегося окна переместитесь по позиции «Дополнительные параметры…».
В открывшемся окошке жмите по разделу «Имя компьютера».
Существует и более быстрый вариант перехода к интерфейсу редактирования имени ПК. Но для его осуществления требуется запомнить команду. Наберите Win+R, а затем вбейте:
Щелкайте «OK».
Откроется уже знакомое нам окошко свойств ПК прямо в разделе «Имя компьютера». Напротив значения «Полное имя» отображено текущее наименование устройства. Чтобы его заменить на другой вариант, жмите «Изменить…».
Отобразится окошко редактирования названия ПК. Тут в области «Имя компьютера» впишите любое название, которое считаете нужным, но придерживаясь озвученных ранее правил. Затем жмите «OK».
После этого отобразится информационное окно, в котором будет рекомендовано перед перезагрузкой ПК закрыть все открытые программы и документы во избежание потери информации. Закрывайте все активные приложения и жмите «OK».
Теперь вы вернетесь в окошко свойств системы. В нижней его области отобразится информация, сообщающая о том, что изменения станут актуальными после перезапуска ПК, хотя напротив параметра «Полное имя» уже будет отображено новое название. Перезапуск нужен, чтобы сменившееся наименование увидели также и другие участники сети. Жмите «Применить» и «Закрыть».
Откроется диалоговое окно, в котором вы сможете выбрать, перезагрузить ПК сейчас или же позже. При выборе первого варианта компьютер будет перезапущен тут же, а при выборе второго вы сможете совершить перезагрузку стандартным методом после того, как закончите текущую работу.
После перезапуска название компьютера сменится.
Способ 2: «Командная строка»
Сменить название ПК можно также используя ввод выражения в «Командную строку».
- Жмите «Пуск» и выбирайте «Все программы».
Заходите в каталог «Стандартные».
Среди перечня объектов отыщите название «Командная строка». Щелкайте по нему ПКМ и выбирайте вариант запуска от лица администратора.
Активируется оболочка «Командной строки». Введите команду по шаблону:
Выражение «новый_вариант_наименования» замените именем, которое посчитаете нужным, но, опять же, придерживаясь озвученных выше правил. После ввода жмите Enter.
Команда по переименованию будет выполнена. Закрывайте «Командную строку», нажав стандартную кнопку закрытия.
Далее, как и в предыдущем способе, для полного завершения задачи нам требуется перезагрузить ПК. Теперь придется сделать это вручную. Жмите «Пуск» и щелкайте по треугольной иконке справа от надписи «Завершение работы». Выберите из списка, который отобразится, вариант «Перезагрузка».
Компьютер перезапустится, а его название окончательно будет сменено на присвоенный вами вариант.
Урок: Открытие «Командной строки» в Виндовс 7
Как нами было выяснено, изменить название компьютера в Виндовс 7 можно двумя вариантами действий: через окошко «Свойства системы» и при помощи интерфейса «Командной строки». Эти методы полностью равнозначны и пользователь сам решает, какой использовать ему удобнее. Главное требование состоит в том, чтобы выполнять все операции от имени администратора системы. Кроме того, нужно не забыть правила составления корректного наименования.
Опишите, что у вас не получилось.
Наши специалисты постараются ответить максимально быстро.
Основные командлеты PowerShell для управления службами Windows
Существует восемь основных командлетов Service, предназначенных для просмотра состояния и управления службами Windows.
Чтобы получить весь список командлетов Service, введите команду:
Get-Help \*-Service
1 | Get-Help\*-Service |
- Get-Service — позволяет получить службы на локальном или удаленном компьютере, как запущенные, так и остановленные;
- New-Service – создать службу. Создает в реестре и базе данных служб новую запись для службы Windows;
- Restart-Service – перезапустить службу. Передает сообщение об перезапуске службы через Windows Service Controller
- Resume-Service – возобновить службы. Отсылает сообщение о возобновлении работы диспетчеру служб Windows;
- Set-Service — изменить параметры локальной или удаленной службы, включая состояние, описание, отображаемое имя и режим запуска. Этот командлет также можно использовать для запуска, остановки или приостановки службы;
- Start-Service – запустить службу;
- Stop-Service – остановить службу (отсылает сообщение об остановке диспетчеру служб Windows);
- Suspend-Service приостановить службу. Приостановленная служба по-прежнему выполняется, однако ее работа прекращается до возобновления работы службы, например с помощью командлета Resume-Service.
Получить подробное описание и примеры использования конкретного командлета можно через Get-help:
Get-Help Start-Service
1 | Get-Help Start-Service |
Get-Service: получаем список служб и их состояние
Получить список и состояние (Running/Stopped) службы на локальном или удаленном компьютере можно с помощью командлета Get-Service. Параметр -Name позволяет делать отбор по имени службы. Имя службы можно задать с использованием подстановочного символа *.
Если вы не знаете точное имя службы, есть возможность найти службы по отображаемому имени с помощью параметра –DisplayName. Можно использовать список значений и подстановочные знаки.
Командлет Get-Service можно использовать для получения состояния служб на удаленных компьютерах, указав параметр -ComputerName. Можно опросить статус службы сразу на множестве удаленных компьютеров, их имена нужно перечислить через запятую. Например, приведенная ниже команда получает состояние службы Spooler на удаленных компьютерах RM1 и RM2.
Get-Service spooler –ComputerName RM1,RM2
1 | Get-Service spooler–ComputerName RM1,RM2 |
Status Name DisplayName
—— —- ————
Running spooler Print Spooler
Stopped spooler Print Spooler
1 |
Status Name DisplayName ——————— Running spooler Print Spooler Stopped spooler Print Spooler |
Вывести все свойства службы позволит командлет Select-Object:
Get-Service spooler | Select-Object *
1 | Get-Service spooler|Select-Object* |
Командлет Select-Object позволит вывести определенные свойства службы. Например, нам нужно вывести имя, статус и доступные возможности службы Spooler:
Get-Service Spooler | Select DisplayName,Status,ServiceName,Can*
1 | Get-Service Spooler|Select DisplayName,Status,ServiceName,Can* |
Командлет Get-Service имеет два параметра, которые позволяют получить зависимости служб:
- Параметр -DependentServices позволяет вывести службы, которые зависят от данной службы;
- Параметр -RequiredServices позволяет вывести службы, от которых зависит данная служба.
Приведенная ниже команда выводит службы, необходимые для запуска службе Spooler:
Get-Service –Name Spooler -RequiredServices
1 | Get-Service–Name Spooler-RequiredServices |
Следующая команда выводит службы, которые зависят от службы Spooler:
Get-Service –Name Spooler -DependentServices
1 | Get-Service–Name Spooler-DependentServices |
При необходимости найти службы с определенным состоянием или параметрами, используйте командлет Where-Object. Например, получим список запущенных служб со статусом Running:
Get-Service | Where-Object {$_.status -eq ‘running’}
1 | Get-Service|Where-Object{$_.status-eq’running’} |
Для вывода служб с типом запуска Manual, выполните команду
Get-Service | Where-Object {$_.starttype -eq ‘Manual’}
1 | Get-Service|Where-Object{$_.starttype-eq’Manual’} |
Проверить, что в системе имеется указанная служба:
if (Get-Service «ServiceTest» -ErrorAction SilentlyContinue)
{
Write-host «ServiceTest exists»
}
1 |
if(Get-Service»ServiceTest»-ErrorAction SilentlyContinue) { Write-host»ServiceTest exists» } |
Перезапуск через панель управления
Возможностей стандартных настроек в Панели управления достаточно, чтобы останавливать и запускать системные сервисы. Есть возможность полностью отключить ненужные службы — это немного повысит производительность устройства.
Остановка и повторный запуск служб Windows:
- Открыть любым способом окно Службы, найти нужную.
- Нажать по нужной службе правой кнопкой мыши и выбрать Перезапустить.
- Если кнопка Перезапустить неактивна — нажать Свойства.
- Нажать Остановить, дождаться остановки службы.
- Нажать на кнопку Запустить.
Если служба зависла или не остановилась — открыть диспетчер задач (Ctrl Alt Del) и завершить все процессы, связанные с проблемной службой.
Удаленное взаимодействие с Windows PowerShell без настройки
Многие командлеты Windows PowerShell имеют параметр ComputerName, который позволяет собирать данные и изменять параметры одного или нескольких удаленных компьютеров. Эти командлеты используют разные протоколы связи и работают во всех операционных системах Windows без специальной настройки.
В эти командлеты входят следующие:
- Restart-Computer
- Test-Connection
- Clear-EventLog
- Get-EventLog
- Get-HotFix
- Get-Process
- Get-Service
- Set-Service
- Get-WinEvent
- Get-WmiObject
Обычно командлеты, которые поддерживают удаленное взаимодействие без специальной настройки, имеют параметр ComputerName, но не имеют параметра Session. Чтобы найти эти командлеты в сеансе, введите:
Устранение неполадок при неотвечающем взаимодействиях
В этом разделе обсуждаются проблемы удаленного взаимодействия, препятствующие выполнению команды и предотвращению или задержке возврата командной строки PowerShell.
Прерывание команды
некоторые программы машинного Windows, такие как программы с пользовательским интерфейсом, консольные приложения, запрашивающие входные данные, и консольные приложения, использующие API консоли Win32, не работают должным образом на удаленном узле PowerShell.
При использовании этих программ может возникнуть непредвиденное поведение, например отсутствие выходных данных, частичный вывод или удаленная команда, которая не завершена.
Чтобы завершить работу программы, не отвечающей, введите CTRL + C. Чтобы просмотреть сообщения об ошибках, которые могли быть получены, введите локальный узел и удаленный сеанс.
Собираем все воедино
Возможности PSService.ps1 На основе всего того, что мы обсудили на данный момент, я могу создать ту службу Windows PowerShell, о которой я мечтал, — скрипт PSService.ps1, который:
- может сам себя устанавливать и удалять (используя функции Windows PowerShell для управления службами);
- может сам себя запускать и останавливать (используя тот же набор функций);
- включает короткий фрагмент C#-кода, создающий PSService.exe для SCM (с помощью команды Add-Type);
- делает обратный вызов из заглушки PSService.exe в скрипт PSService.ps1 для выполнения реальной операции службы (в ответ на события OnStart, OnStop и др.);
- управляется из панели SCM и всех утилит командной строки (благодаря заглушке PSService.exe);
- является отказоустойчивым и успешно обрабатывает любую команду, находясь в любом состоянии. Например, он может автоматически остановить службу перед ее удалением или ничего не делать, если ему поступит запрос запустить уже выполняемую службу;
- поддерживает Windows 7 и все более поздние версии Windows (используя функциональность только Windows PowerShell v2).
Заметьте, что в этой статье я затронул лишь критически важные части проекта и реализации PSService.ps1. Скрипт-пример также содержит отладочный код и в какой-то мере поддерживает необязательную функциональность служб, но их описание здесь усложнило бы пояснения безо всякой необходимости.
Архитектура PSService.ps1 Скрипт организуется в серию разделов:
- комментарий-заголовок, описывающий файл;
- справочный блок в виде комментариев;
- блок Param, определяющий ключи командной строки;
- глобальные переменные;
- вспомогательные процедуры: Now и Log;
- блок исходного кода на C# для создания заглушки PSService.exe;
- основную процедуру, обрабатывающую все ключи командной строки.
The Windows Service Control Manager
The services are managed by the Windows Service Control Manager (SCM). The SCM is responsible for configuring services, starting them, stopping them and so forth.
The SCM control panel is accessible via Control Panel | System and Security | Administrative Tools | Services. As Figure 1 shows, it displays a list of all configured services, with their name, description, status, startup type and user name.
Figure 1 The Windows Service Control Manager GUI in Windows 10
There are also command-line interfaces to the SCM:
- The old net.exe tool, with its well-known “net start” and “net stop” commands, dates from as far back as MS-DOS! Despite its name, it can be used to start and stop any service, not just network services. Type “net help” for details.
- A more powerful tool called sc.exe, introduced in Windows NT, gives fine control over all aspects of service management. Type “sc /?” for details.
These command-line tools, although still present in Windows 10, are now deprecated in favor of Windows PowerShell service management functions, described later.
Gotcha: Both net.exe and sc.exe use the “short” one-word service name, which, unfortunately, isn’t the same as the more descriptive name displayed by the SCM control panel. To get the correspondence between the two names, use the Windows PowerShell get-service command.
Examples
Example 1: Start a service by using its name
This example starts the EventLog service on the local computer. The Name parameter identifies
the service by its service name.
Example 2: Display information without starting a service
This example shows what would occur if you started the services that have a display name that
includes «remote».
The DisplayName parameter identifies the services by their display name instead of their service
name. The WhatIf parameter causes the cmdlet to display what would happen when you run the
command but does not make changes.
Example 3: Start a service and record the action in a text file
This example starts the Windows Management Instrumentation (WMI) service on the computer and adds a
record of the action to the services.txt file.
First we use to get an object that represent the WMI service and store it in the
variable. Next, we start the service. Without the PassThru parameter, does not
create any output. The pipeline operator (|) passes the object output by to the
cmdlet to format the object as a list of its properties. The append redirection
operator (>>) redirects the output to the services.txt file. The output is added to the end of the
existing file.
Example 4: Start a disabled service
This example shows how to start a service when the start type of the service is Disabled.
The first attempt to start the Telnet service (tlntsvr) fails. The command shows
that the StartMode property of the Tlntsvr service is Disabled. The cmdlet
changes the start type to Manual. Now, we can resubmit the command. This time,
the command succeeds. To verify that the command succeeded, run .
Просмотр
- Как включить удаленное взаимодействие PowerShell?
- Какая команда PowerShell используется для запуска интерактивного сеанса с удаленным компьютером?
- В чем преимущество использования сеанса удаленного взаимодействия PowerShell по сравнению с простым указанием имени компьютера с помощью каждой команды?
- Можно ли использовать сеанс удаленного взаимодействия PowerShell с сеансом удаленного взаимодействия «один к одному»?
- Чем отличается тип объектов, возвращаемых командлетами, от типа объектов, которые возвращаются при выполнении этих же командлетов на удаленных компьютерах с ?