مدیریت سرویس‌ها در Powershell

مدیریت سرویس‌ها در Powershell

نوشته شده توسط: مهرداد صلاحی
تاریخ انتشار: ۰۴ دی ۱۴۰۰
آخرین بروزرسانی: 17 تیر 1403
زمان مطالعه: 14 دقیقه
۵
(۱)

مقدمه

یکی از دلایلی که مدیران شبکه و متخصصین DevOps باید به کار در محیط خط فرمان در سیستم‌عامل ویندوز مسلط باشند، انجام کارهایی است که از طریق پنل گرافیکی ویندوز میسر نیست. یکی از این کارها، ایجاد یا حذف سرویس‌ها در ویندوز است.

مفهوم سرویس در سیستم‌ عامل

سرویس، یک برنامه کامپیوتری است که در پشت زمینه یا اصطلاحاً Background اجرا می‌شود. در سیستم‌عامل ویندوز، ما فقط قادر هستیم برخی از تنظیمات مثل اجرا یا توقف سرویس، تغییر سطح دسترسی برای اجرای سرویس، مدیریت خطا در هنگام اجرای سرویس و … رو انجام دهیم. ولی پنلی برای ایجاد یا حذف سرویس وجود ندارد و ما مجبور هستیم برای ایجاد یک سرویس در ویندوز از محیط خط فرمان یا نرم‌افزارهای جانبی استفاده کنیم.

برای مشاهده سرویس‌ها در ویندوز از منوی Run، عبارت Services.msc رو تایپ می‌کنیم:

با اجرای دستور فوق، پنجره Services در ویندوز باز می‌شود و لیست تمام سرویس‌های موجود در سیستم عامل نمایش داده می‌شود.
اگر کمی با این پنجره کار کنید و تنظیمات سرویس‌ها را مشاهده کنید، متوجه می‌شوید که انجام برخی از کارها از طریق این پنجره امکان‌پذیر نیست. کارهایی مثل ایجاد یا حذف یک سرویس. هدف ما در این مقاله، مدیریت سرویس‌ها در پاورشل است. بنابراین ادامه مقاله در راستای کار با ابزار پاورشل خواهد بود. پس با ما همراه باشید.

کار با سرویس‌ها در پاورشل

برای نمایش لیست سرویس‌ها در پاورشل از دستور Get-Service استفاده می‌کنیم:

برای نمایش اطلاعات بیشتر از سرویس‌ها، از دستور Select-Object به همراه علامت ستاره (* به معنی همه) طبق شکل زیر استفاده می‌کنیم:

همان‌طور که ملاحظه می‌کنید، اطلاعات بیشتری از سرویس‌ها نشان داده شد. اما جالبه بدونید این اطلاعات، همه آن چیزی نیست که باید از یک سرویس نشان دهد. مثلاً اگر ما بخواهیم مسیر نصب یک سرویس را پیدا کنیم، دستور فوق جوابگوی نیاز ما نخواهد بود. در این موقع، دستور دیگری به نام Get-WmiObject به همراه کلاس Win32_Service نیاز ما را رفع خواهد کرد. کافیست طبق شکل زیر عمل کنیم:

محدوده انتخاب شده، فقط مربوط به اطلاعات یک سرویس است. همان‌طور که مشاهده می‌کنید، دستور Get-WmiObject اطلاعات خیلی بیشتری نسبت به دو دستور قبلی به ما ارایه داد.

ایجاد یک سرویس جدید در پاورشل

برای ایجاد یک سرویس جدید در ویندوز، از قابلیت اسکریپت‌نویسی پاورشل استفاده می‌کنیم. برای این کار، کافیست از منوی Run عبارت Powershell_ise رو تایپ و اجرا کنید:

با اجرای دستور فوق، پنجره اسکریپت‌نویسی پاورشل باز می‌شود. برای ایجاد سرویس، کافیست اسکریپتی شبیه اسکریپت زیر بنویسیم:

Clear-Host

# Executable file
$FileName = "C:\Users\Administrator\Desktop\Services\Dir\dir.bat"

# Create New Service
New-Service -Name "1_Test_Dir" -BinaryPathName $FileName -DisplayName "1 Test Dir"

و سپس آن را اجرا کنیم. شکل زیر، مراحل کار و نتیجه خروجی را نمایش می‌دهد:

اگر پنجره Service را در ویندوز مشاهده کنیم، سرویس ایجاد شده را ملاحظه می‌کنیم.

حذف یک سرویس در پاورشل

حذف یک سرویس هم از جمله کارهایی است که باید از طریق محیط خط فرمان صورت پذیرد. جهت حذف سرویس هم از قابلیت اسکریپت‌نویسی پاورشل استفاده می‌کنیم. برای حذف سرویس، ابتدا سرویس موردنظر را با استفاده از دستور Get-WmiObject طبق روش زیر واکشی می‌کنیم:

$Service = Get-WmiObject -Class Win32_Service -Filter "Name = '1_Test_Dir'"

اگر دقت کنید، من خروجی دستور را در یک متغیر ریختم. دلیل کار این است که ما در خط بعد باید از متد Delete() استفاده کنیم. جهت استفاده از متد طبق روش زیر عمل می‌کنیم:

$Service.Delete()

کدهای اسکریپت و اجرای آن مطابق شکل زیر است:

دقت کنید در خروجی دستور، مقدار ReturnValue برابر صفر است. این بدین معنی است که دستور با موفقیت اجرا شده و سرویس موردنظر حذف شده است. هر مقداری به غیر از صفر، به این معنی است که دستور حذف با موفقیت اجرا نشده است. در صورتی که مقدار ReturnValue برابر با صفر نبود، جهت ردیابی خطا، کافیه عدد آن را با لیست زیر تطبیق دهید و مشکل را پیدا کنید:

۰   The request was accepted.
۱   The request is not supported.
۲   The user did not have the necessary access.
۳   The service cannot be stopped because other services that are running are dependent on it.
۴   The requested control code is not valid, or it is unacceptable to the service.
۵   The requested control code cannot be sent to the service because the state of the service (Win32_BaseService.State property) is equal to 0, 1, or 2.
۶   The service has not been started.
۷   The service did not respond to the start request in a timely fashion.
۸   Unknown failure when starting the service.
۹   The directory path to the service executable file was not found.
۱۰  The service is already running.
۱۱  The database to add a new service is locked.
۱۲  A dependency this service relies on has been removed from the system.
۱۳  The service failed to find the service needed from a dependent service.
۱۴  The service has been disabled from the system.
۱۵  The service does not have the correct authentication to run on the system.
۱۶  This service is being removed from the system.
۱۷  The service has no execution thread.
۱۸  The service has circular dependencies when it starts.
۱۹  A service is running under the same name.
۲۰  The service name has invalid characters.
۲۱  Invalid parameters have been passed to the service.
۲۲  The account under which this service runs is either invalid or lacks the permissions to run the service.
۲۳  The service exists in the database of services available from the system.
۲۴  The service is currently paused in the system. 



حرف آخر

کار با محیط خط فرمان و مخصوصاً پاورشل، قدرت زیادی را در اختیار مدیران سیستم و شبکه قرار می‌دهد. شاید این کار ابتدا کمی زمان‌بر و خارج از حوصله باشد، ولی در نهایت خروجی کار شیرین است. همچنین نکته‌ قابل توجه که شاید در ابتدا جلب توجه نکند این است که پاورشل به صورت پیش‌فرض در سیستم‌عامل ویندوز نصب است و شما برای اجرای کدهای فوق نیاز به نصب هیچ نرم‌افزار یا افزونه‌ای ندارید. در ثانی، برای انجام برخی کارها (مثل همین مقاله)، ما نیاز به کار در محیط خط فرمان داریم. در آینده باز هم مطالب جالبی در مورد پاورشل قرار خواهم داد.

چه رتبه ای می‌دهید؟

میانگین ۵ / ۵. از مجموع ۱

اولین نفر باش

گوش به زنگ یلدا
title sign
معرفی نویسنده
مهرداد صلاحی
مقالات
2 مقاله توسط این نویسنده
محصولات
0 دوره توسط این نویسنده
مهرداد صلاحی
title sign
دیدگاه کاربران