امیرحسین کریم پور
مدیر ارشد توسینسو و متخصص سرویس های مایکروسافت

آموزش حذف سرویس های بلااستفاده ویندوز سرور به زبان ساده

زمانی که یک نرم افزار را روی سیستم عامل ویندوز خود نصب می کنید احتمال دارد که این نرم افزار به همراه خودش یک سری Service ها را روی سیستم نصب کند. حالا شما بنا به دلایلی میخواهید آن نرم افزار را از روی سیستم عامل حذف کنید. ممکن است که Uninstaller آن نرم افزار به درستی نتواند تمام مخلفات آن نرم افزار را از روی سیستم حذف و پاکسازی کند و سرویس آن نیز روی سیستم شما بلااستفاده بماند.

دوره های شبکه، برنامه نویسی، مجازی سازی، امنیت، نفوذ و ... با برترین های ایران

ما در این آموزش میخواهیم نحوه حذف کردن سرویس مربوطه که بصورت Orphaned روی سیستم باقی مانده است را به شما دوستان عزیز آموزش دهیم. طبیعتا شما با استفاده از محیط گرافیکی یا GUI نمیتوانید سرویس مربوطه را حذف کنید و باید با دستور SC.EXE اقدام به حذف سرویس کنید. توجه کنید که شما از طریق PowerShell بصورت حرفه ای تر میتوانید سرویس مربوطه را حذف کنید.

در صورتیکه بخواهید یک سرویس را در شبکه از روی سیستم های کلاینت حذف کنید باید Permission یا مجوز دسترسی به آن سیستم را کاملا داشته باشید. در این آموزش هدف ما این است که یک سرویس را از روی تعدادی سیستم های کلاینت حذف کنیم. برای انجام این کار مراحل زیر را طی کنید :


1. یک لیست از اسامی کامپیوتر هایی که میخواهید سرویس های مربوطه را از روی آنها پاک کنید را تهیه کنید و درون یک فایل متنی با نام مناسب ذخیره کنید و فایل را در یک مسیر Share شده قرار دهید.
2. PowerShell را با دسترسی Administrator باز کنید و دستور زیر را روی سیستم های کلاینتی که قصد حذف سرویس از روی آنها را دارید اجرا کنید :

Get-Service

در خروجی این CMDLET در ستون Name میتوانید نام سرویس های موجود روی سیستم کلاینت را مشاهده کنید.
3. PowerShell ISE را با دسترسی Administrator باز کنید و Script زیر را داخل آن تایپ کنید :

$Computers = Get-Content \\\.txt

Foreach($Computer in $Computers) 
{ 
Invoke-Command -ComputerName $Computer -ScriptBlock { sc.exe delete  } 
}

در Script فوق ما یک Variable یا متغیر به نام (Computers$) که لیست اسامی سیستم های کلاینت مورد نظرمان را که در مرحله یک درون فایل متنی نوشتیم را در آن قرار میدهیم. قسمت "Foreach" برای اسامی سیستم های کلاینت یک حلقه یا Loop ایجاد می کند و دستور را برای هر کدام از آنها اجرا می کند. دستور Invoke-Command به PowerShell این امکان را می دهد که دستور حذف سرویس ها را روی سیستم های کلاینت اجرا یا بعبارتی فراخوانی کند.

پارامتر ComputerName هم همانطور که از نامش مشخص است اسامی سیستم های کلاینت را باید بگیرد پس ما بهمین منظور متغیر (Computers$) را ایجاد کردیم و درون آن اسم کامپیوتر ها را که در واقع درون فایل متنی است ذخیره کردیم.

  • نکته : توجه کنید که هدف از ایجاد متغیر این است که براحتی بتوانیم با عنوان کردن یک متغیر اسم صد تا هزاران کامپیوتر را برای انجام عملیات موردنظرمان مشخص کنیم. در غیر این صورت مجبور خواهیم بود که اسامی تعداد بسیاری از کامپیوتر ها را جلوی پارامتر ComputerName ذکر کنیم که عملا امکان پذیر نیست و موجب اشتباهات زیادی می شود.

خب با دستور sc.exe (نه sc) که توسط PowerShell مورد استفاده قرار میگیرد میتوانید سرویس های نظر خود را حذف کنید. توجه کنید که دستور SC در Command Prompt استفاده می شود ولی در PowerShell باید از SC.EXE استفاده کرد. زیرا SC یک Alias برای دستور Set-Content در PowerShell است. در Script فوق به جای مسیر فایل متنی را وارد کنید ، به جای اسم فایل و به جای نام سرویس مورد نظر را وارد کنید.

4. دستور را اجرا کنید ، اگر دستور با موفقیت اجرا شد پیغام SUCCESS را در نتیجه خواهید دید. امیدوارم این آموزش مورد توجه شما قرار گرفته باشد.


امیرحسین کریم پور
امیرحسین کریم پور

مدیر ارشد توسینسو و متخصص سرویس های مایکروسافت

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

نظرات