متوقف نمودن سرویس های ویندوز از راه دور با پایتون

صورت مسئله: تعدادی سرور فیزیکی/مجازی در داخل شبکه دارم که ویندوز 2008 دارن، روی هر کدوم تعدادی سرویس ویندوزی با عناوین مختلف نصب هستند که در یک کلمه با یکدیگر مشترک هستند.

هر بار به هر دلیلی که بقیه ادمین های ویندوز با اون آشنایی دارند ʕʘ̅͜ʘ̅ʔ مجبور به stop/start این سرویس ها هستم، تصور کنید 65 تا سرور دونه دونه ریموت بزن باز کن، Stop کن و ...

راه حل: چند خط کد پایتون، یه مقدار تنظیمات، دسترسی ادمین، لیست سرویسها و IP دستگاهها و هر اطلاعات دیگه ایی که میتونه کمکمون کنه مثل اسم سرور، نام کاربری و رمز عبور ...

import wmi
import csv
c = wmi.WMI()
serviceName = 'service'
with open('IPList.csv', 'r', newline='') as confFile:
    csvReader = csv.reader(conf
File, delimiter='|')
    for fileLines in csvReader:
        c = wmi.WMI(fileLines[1], user=r"admin", password="admin1234")
        for service in c.Win32_Service():
            if serviceName.lower() in service.DisplayName.lower():
                print(service.StopService())

نمونه فایل لیست IP ,نام سرور

در نظر داشته باشید delimiter اینجا علامت پایپ | در نظر گرفته شده که برای شما قابل تنظیم است

خروجی برنامه رو به کمک pyinstaller به این صورت تبدیل به تک فایل exe میکنیم:

فایل exe تولید شده به همراه فایل لیست IP و نام سرورها در یک فولدر به روی کلاینتی که به تمام سرورهای ما دسترسی داره منتقل میکنیم

بعد از انتقال فایل بر روی کلاینت یک cmd باز کنید ترجیحا با دسترسی ادمین به مسیر فایل کپی شده برید

فقط اسم فایل exe رو وارد کنید

تصویر نمونه برای تنها یک سرور
تصویر نمونه برای تنها یک سرور

خروجی که مشاهده میکنید نتیجه دستور service.StopService می باشد که مرجع آن در این لینک می باشد:

https://docs.microsoft.com/en-us/windows/win32/cimwin32prov/stopservice-method-in-class-win32-service

لینک دانلود کد کامل:

https://github.com/ars1364/PythonerizationBoringStuff/blob/master/ManagingWindowsServices.py