اسکریپت امنیتی ویندوز
ببین، فرض کن پشت کامپیوتر خودت نشستی و میخوای یه کار جالب انجام بدی: به ویندوز بگی اگر یک شرط مشخص برقرار نبود، بعد از ۳۰ ثانیه خودش خاموش بشه. شاید اولین چیزی که توی ذهنت بیاد «یه ترفند هکری ویندوز» باشه. اتفاقاً همین کنجکاوی میتونه نقطه شروع خوبی برای یاد گرفتن پاورشل، اسکریپتنویسی و […]

ببین، فرض کن پشت کامپیوتر خودت نشستی و میخوای یه کار جالب انجام بدی: به ویندوز بگی اگر یک شرط مشخص برقرار نبود، بعد از ۳۰ ثانیه خودش خاموش بشه. شاید اولین چیزی که توی ذهنت بیاد «یه ترفند هکری ویندوز» باشه. اتفاقاً همین کنجکاوی میتونه نقطه شروع خوبی برای یاد گرفتن پاورشل، اسکریپتنویسی و امنیت ویندوز باشه؛ به شرطی که بدونی کد واقعاً چه کاری انجام میده و چطور کنترلش کنی.
توی این آموزش قراره سه مسئله رو حل کنیم: اول روش ساده خاموش شدن خودکار ویندوز با دستورهای آماده، بعد ساخت یک اسکریپت پاورشل که پوشهای روی دسکتاپ رو بررسی میکنه و در نهایت اجرای زمانبندیشده با Task Scheduler. کدهای همون ویدیوی آموزشی هم پایین صفحه هستن تا بتونی مستقیم برداری و تمرین کنی. من علاوه بر کد، روش تست بیخطر، متوقفکردن اجرا و عیبیابی رو هم قدمبهقدم توضیح میدم.
یه مرز مهم رو از همین اول مشخص کنیم: وجود یا نبود یک پوشه روی دسکتاپ، روش قابلاعتماد برای فهمیدن «ورود هکر» یا تشخیص کاربر غیرمجاز نیست. این پروژه یک تمرین جذاب برای یادگیری شرط، زمانبندی و اجرای اسکریپته؛ نه جایگزین رمز عبور، رمزگذاری دیسک یا کنترل دسترسی ویندوز. اگر واقعاً دنبال هک قانونی و امنیت کامپیوتر هستی، این تفاوت از خود کدنویسی مهمتره.

خاموش شدن خودکار ویندوز یعنی چی و چه کاربردی داره؟
وقتی از خاموش شدن خودکار ویندوز حرف میزنیم، منظورمون اینه که سیستم بدون اینکه همون لحظه دکمه Shut down رو بزنی، در زمان تعیینشده یا بعد از وقوع یک رویداد خاموش بشه. برای مثال میخوای دانلودی رو شروع کنی و دو ساعت بعد کامپیوتر خاموش بشه؛ یا دوست داری هر بار وارد حساب کاربریت میشی، یک بررسی مشخص انجام بشه. هر دو از خانواده اتوماسیون هستن، اما راهحلشون یکی نیست.
برای خاموشی در یک زمان ثابت، دستور داخلی shutdown معمولاً کافی و سادهتره. وقتی میخوای تصمیم بر اساس وضعیت فایل، پوشه، پردازش یا خروجی یک برنامه گرفته بشه، اسکریپت پاورشل انتخاب مناسبتریه. برای اجرای خودکار اون تصمیم در ساعت مشخص یا هنگام ورود کاربر هم Task Scheduler به کمکمون میاد.
روش اول: خاموش کردن کامپیوتر با CMD و دستور shutdown
اینجا یک نکته برای انتخاب ابزار وجود داره: وقتی فقط زمان خاموشی برات مهمه، CMD سادهترین راهه. ولی خاموش کردن کامپیوتر با پاورشل برای زمانی جذاب میشه که بخوای شرط بذاری و قبل از خاموشی چیزی رو بررسی کنی. بنابراین بین این دو روش، بهتره بر اساس مسئله انتخاب کنیم نه صرفاً اسم ابزار.
اگه دنبال عبارتهایی مثل «خاموش کردن کامپیوتر با CMD»، «تایمر خاموشی ویندوز» یا «کد خاموش شدن ویندوز بعد از یک ساعت» اومدی، اول از این روش شروع کن. کلیدهای Win + R رو بزن، دستور زیر رو وارد کن و Enter بزن. در این مثال زمان ۳۶۰۰ ثانیه، یعنی یک ساعته.
shutdown.exe /s /t 3600اینجا /s یعنی خاموشکردن سیستم و /t مدت انتظار رو بر حسب ثانیه تعیین میکنه. اگه بهجای یک ساعت بخوای پنج دقیقه بعد خاموش بشه، عدد رو به ۳۰۰ تغییر بده. حواست باشه وقتی زمانبندی رو فعال میکنی، قبل از پایان مهلت فایلهای بازت رو ذخیره کنی؛ بعضی شیوههای خاموشی ممکنه برنامهها رو بدون فرصت کافی ببندن.
خوشبختانه برای لغو خاموشی زمانبندیشده هم دستور مشخص داریم. تا وقتی مهلت انتظار تموم نشده، یک پنجره Run یا ترمینال تازه باز کن و این رو اجرا کن:
shutdown.exe /aاین دستور فقط خاموشی در صفِ ابزار shutdown.exe رو لغو میکنه. اگر یک اسکریپت بعد از Start-Sleep مستقیماً Stop-Computer رو اجرا کنه، shutdown /a لزوماً اون رو متوقف نمیکنه. برای همین قبل از رفتن سراغ کد اصلی، باید حالت آزمایشی داشته باشیم. جزئیات سوییچها هم در راهنمای رسمی shutdown مایکروسافت اومده.
پاورشل چیه و چرا برای این تمرین ازش استفاده میکنیم؟
اگه تازه کدنویسی رو شروع کردی، اسم PowerShell شاید کمی ترسناک به نظر برسه. ولی من اینطوری معرفیاش میکنم: پاورشل هم یک محیط خط فرمانه و هم زبانی برای نوشتن دستورهای پشتسرهم. باهاش میتونی اطلاعات سیستم رو بخونی، فایلها رو مدیریت کنی، کارهای تکراری رو خودکار کنی و بهجای کلیککردن روی ده پنجره، یک روال قابل تکرار بسازی.
تفاوتش با CMD فقط این نیست که دستورهای بیشتری داره. پاورشل با خروجیهای شیءمحور کار میکنه؛ یعنی نتیجه خیلی از فرمانها مجموعهای از ویژگیهاست که میتونی روی اونها فیلتر یا شرط بنویسی. این دقیقاً همون چیزیه که بعدها توی برنامهنویسی، مدیریت سرور و امنیت به کارت میاد. برای آشنایی با پروژه اصلی میتونی مخزن رسمی PowerShell رو هم ببینی.
قبل از اجرای اسکریپت پاورشل، یه محیط تست امن آماده کن
من پیشنهاد میکنم اولین تمرین رو روی سیستم خودت و با فایلهای ذخیرهشده انجام بدی؛ نه روی کامپیوتر مدرسه، سیستم شخص دیگه یا دستگاهی که وسط کار مهمیه. اگه ماشین مجازی ویندوز داری، محیط آزمایشی بهتریه؛ چون میتونی بدون درگیرکردن ویندوز اصلی، رفتار کد رو مشاهده کنی. اجرای آزمایش روی دستگاه دیگران، حتی با عنوان شوخی یا «هک ویندوز»، کار درستی نیست.
قبل از هر چیزی از فایلهات ذخیره بگیر و برای تست اول فرمان واقعی خاموشی رو با یک پیام نمایشی عوض کن. بعد از اینکه مطمئن شدی شرط درست عمل میکنه، در صورت نیاز و فقط روی دستگاه خودت نسخه اصلی رو امتحان کن. این تفاوت بین کسیه که فقط یک اسکریپت رو کپی میکنه و کسی که میفهمه داره چه اتفاقی میافته.
قدم اول: نوشتن اسکریپت پاورشل
اگر عبارت «خاموش کردن کامپیوتر با پاورشل» رو سرچ کردی، احتمالاً دنبال یک نمونه قابل کپی هستی. این قسمت دقیقاً همون کد رو بهت میده، با این تفاوت که توضیح میدم هر خط چه اثری داره و چطور قبل از خاموشی واقعی امتحانش کنی. برای خاموش شدن خودکار ویندوز با شرط، اول باید بدونیم چه اطلاعاتی رو از سیستم بخونیم.
سناریوی ویدیو اینه: یک پوشه به اسم nabegheha روی دسکتاپ داریم. اگر این پوشه موجود نبود، اسکریپت ۳۰ ثانیه مکث میکنه، دوباره همون مسیر رو بررسی میکنه و در صورت نبودن پوشه، فرمان خاموشی رو اجرا میکنه. اینجا در اصل داریم از سه مفهوم برنامهنویسی استفاده میکنیم: متغیر، شرط و تأخیر.
برای ساخت فایل، Notepad یا یک ویرایشگر کد باز کن و فایل رو با نام Script.ps1 ذخیره کن؛ دقت کن پسوند نهایی واقعاً .ps1 باشه، نه .ps1.txt. نسخه زیر کد اصلی آموزش ویدیوئه؛ چون دستور Stop-Computer -Force داره، قبل از اجرای مستقیمش حتماً روش آزمایشی بخش بعد رو بخون.
# مسیر دسکتاپ کاربر فعلی
$DesktopPath = [Environment]::GetFolderPath("Desktop")
$FolderName = "nabegheha"
$TargetFolder = Join-Path -Path $DesktopPath -ChildPath $FolderName
# چک کردن فولدر
if (-Not (Test-Path -Path $TargetFolder)) {
# منتظر موندن به مدت 30 ثانیه
Start-Sleep -Seconds 30
# دوباره چک کردن
if (-Not (Test-Path -Path $TargetFolder)) {
# خاموش کردن سیستم
Stop-Computer -Force
# یا ریستارت
# Restart-Computer -Force
}
}حالا کد رو خطبهخط بخونیم. با GetFolderPath("Desktop") مسیر دسکتاپ همون حسابی رو میگیریم که اسکریپت زیر هویتش اجرا شده؛ بعد با Join-Path نام پوشه رو به مسیر اضافه میکنیم. دستور Test-Path نتیجه درست یا نادرست برمیگردونه و -Not اون رو برعکس میکنه. پس وقتی پوشه وجود نداشته باشه، وارد بلوک if میشیم.
توقف ۳۰ ثانیهای با Start-Sleep باعث میشه شرایط یک بار دیگه بررسی بشن؛ یعنی اگر توی این فاصله پوشه رو بسازی، شرط دوم دیگه برقرار نیست. این بررسی دوباره مفیده، ولی نباید اون رو سازوکار امنیتی فرض کنی. کسی که به حساب کاربری دسترسی پیدا کرده، ممکنه پوشه رو هم ایجاد کنه یا خود Task رو تغییر بده. رفتار Test-Path رو هم میتونی در مستندات رسمی همین دستور ببینی.
نسخه امن برای تمرین: اول پیام چاپ کن، نه خاموشی
قبل از اجرای نسخه ویدیو، من ترجیح میدم همین منطق رو بدون کوچکترین خاموشی تست کنم. کد زیر فقط بهت میگه «شرط خاموشی برقرار شد» یا «پوشه پیدا شد»؛ یعنی مطمئن میشی مسیر دسکتاپ و ساختار شرطت درسته، بدون اینکه کار نصفهای از دست بره.
$DesktopPath = [Environment]::GetFolderPath('Desktop')
$TargetFolder = Join-Path -Path $DesktopPath -ChildPath 'nabegheha'
if (-not (Test-Path -LiteralPath $TargetFolder -PathType Container)) {
Write-Host 'Folder missing. Waiting 5 seconds (test only)...'
Start-Sleep -Seconds 5
if (-not (Test-Path -LiteralPath $TargetFolder -PathType Container)) {
Write-Host 'Test result: shutdown condition matched.'
} else {
Write-Host 'Folder appeared. No action needed.'
}
} else {
Write-Host 'Folder exists. No action needed.'
}دو بار تمرین کن: یک بار پوشه رو نساز و یک بار روی دسکتاپ پوشهای دقیقاً با نام nabegheha ایجاد کن. ببین خروجی در هر حالت چه تفاوتی داره. توی نسخه آموزشی از -LiteralPath استفاده کردم تا نام مسیر بدون تفسیر الگوهای خاص بررسی بشه و -PathType Container هم مطمئن بشه داریم پوشه رو بررسی میکنیم، نه فایلی با همین اسم.
اگه فقط با همین تمرین فهمیدی if و متغیر و مسیر فایل چطور کنار هم کار میکنن، بخش مهمی از اسکریپتنویسی رو یاد گرفتی. همین الگو بعداً میتونه برای بررسی فضای خالی دیسک، وجود نسخه پشتیبان یا وضعیت سرویسهای ویندوز استفاده بشه؛ بدون اینکه لازم باشه هر بار کاری مخرب انجام بدیم.
چرا کد ویدیو را نباید بهعنوان قفل امنیتی ویندوز در نظر بگیریم؟
جذابیت این پروژه باعث میشه خیلیها بهش بگن «قفل ضد هکر» یا «ترفند هک ویندوز». اما پوشه دسکتاپ میتونه توسط همون کاربری که وارد شده ساخته یا حذف بشه؛ بنابراین نشونه هویت نیست. حتی اسکریپت با حسابی اجرا میشه که Task Scheduler براش تعریف شده و مسیر دسکتاپ لزوماً متعلق به کسی نیست که همین لحظه پشت دستگاه نشسته. پس ادعای تشخیص قطعی فرد غریبه از روی این کد از نظر فنی درست نیست.
برای امنیت واقعی ویندوز، اول سراغ رمز عبور قوی، بهروزرسانی، حساب کاربری بدون دسترسی اضافه، قفل خودکار صفحه و در دستگاههای سازگار رمزگذاری دیسک برو. بعد اگر خواستی رویداد ورود رو پایش کنی، باید هویت کاربر و رخدادهای سیستم رو درست تحلیل کنی. خاموشکردن عجولانه سیستم نه جلوی دسترسی غیرمجاز رو تضمین میکنه نه جای بررسی لاگها رو میگیره.

قدم دوم: اجرای اسکریپت با Task Scheduler
حالا فرض کنیم میخوای اسکریپت پاورشل در یک زمان مشخص یا موقع ورود به حساب خودت بهصورت خودکار اجرا بشه. اینجا ابزار داخلی Task Scheduler کاربرد داره؛ لازم نیست نرمافزار متفرقه نصب کنی. تفاوتش با پوشه Startup اینه که میتونی برای اجرا، زمان، رویداد، حساب کاربری، شرایط باتری و ثبت نتیجه تنظیمات مشخص داشته باشی.
از منوی استارت عبارت Task Scheduler رو جستوجو کن. برای تنظیمات کامل، روی Create Task بزن و یک نام قابلشناسایی مثل Nabegheha-PowerShell-Demo انتخاب کن. توی بخش Triggers میتونی At log on رو انتخاب کنی. برای تمرین، حتماً مشخص کن فقط هنگام ورود حساب کاربری خودت اجرا بشه، نه برای تمام کاربران. اگر میخوای خروجی تست رو ببینی، گزینه Run only when user is logged on معمولاً از حالت اجرای غیربرهمکنشی مناسبتره.
دقت کن «At log on» یعنی در زمان ورود یک کاربر مشخص یا کاربران تعیینشده، نه الزاماً «وقتی هکر لاگین کرد». انتخاب کاربر و تنظیم Run whether user is logged on or not دو مفهوم متفاوتن: اولی مربوط به محرک ورود و دومی نحوه اجرای Task در یک زمینه امنیتیه. طبق راهنمای مایکروسافت درباره Logon Trigger، تنظیم Trigger باید آگاهانه انجام بشه.
آموزش Task Scheduler برای اجرای درست فایل پاورشل
این بخش از آموزش Task Scheduler مخصوص کسیه که نمیخواد هر بار فایل رو دستی اجرا کنه. برخلاف یک دستور تایمر ساده، اینجا باید خودت مشخص کنی چه زمانی Task فعال میشه، با چه حسابی اجرا میشه و کدوم فایل رو باز میکنه. اگر این سه بخش رو درست تنظیم کنی، علت خیلی از خطاهای رایج رو از اول حذف کردی.
توی تب Actions یک اکشن از نوع Start a program بساز. برای Windows PowerShell داخلی ویندوز، مسیر رایج زیره؛ این همون کدی محسوب میشه که در ویدیو نشون دادم:
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exeتوی کادر Add arguments بهجای مسیر فرضی، آدرس واقعی فایل Script.ps1 رو بذار. کد بعدی هم نسخهایه که در ویدیو استفاده شده تا بتونی دقیقاً با اون مقایسه کنی:
-ExecutionPolicy Bypass -File "C:\Path\To\Your\Script.ps1"ولی یه نکته خیلی مهم: استفاده از -ExecutionPolicy Bypass نه امنیت ایجاد میکنه و نه تضمین میکنه فایل در همه سیستمها اجرا میشه. این گزینه محدودیتهای سیاست اجرای اسکریپت رو برای اون پردازش کاهش میده و ممکنه تنظیمات سازمانی همچنان اولویت داشته باشن. برای کار معمولی بهتره اول با Get-ExecutionPolicy -List وضعیت رو ببینی، فایل خودت رو بررسی کنی و در صورت مجاز بودن تنظیماتی مثل RemoteSigned رو فقط در محدوده لازم استفاده کنی. مستندات رسمی Execution Policy هم صریحاً میگه این مکانیزم یک مرز امنیتی قطعی نیست.
برای آزمایش، فعلاً فایل شبیهسازِ بدون خاموشی رو به Task معرفی کن؛ بعد روی Task راستکلیک کن و Run رو بزن. بخش Last Run Result و تب History میتونن سرنخ بدن، اما برای فهمیدن اتفاق دقیق بهتره خروجی اسکریپت رو هم به یک فایل گزارش بنویسی. قبل از فعالکردن اجرای خودکار، مطمئن شو هم اسم فایل و هم حساب اجراکننده درستن.
موقع ساخت Task، این اشتباهها رو نکن
خیلی از خطاهایی که به اسم «پاورشل کار نمیکنه» میبینی، در واقع از تنظیمات Task میاد: مسیر فایل اشتباهه، فایل روی دسکتاپ حساب دیگهای ذخیره شده، Task با حساب متفاوتی اجرا میشه، محیط تعاملی وجود نداره یا گزینههای بخش Conditions جلوی اجرا رو میگیرن. مخصوصاً روی لپتاپ، شرط مربوط به برق و باتری رو بررسی کن؛ ممکنه Task فقط وقتی شارژر وصله اجرا بشه.
اگه میخوای اسکریپت از هر پوشهای درست کار کنه، به مسیر کاری پیشفرض اعتماد نکن. نام فایل و مسیرش رو کامل وارد کن و در صورت نیاز کد رو طوری بنویس که از مسیر پوشه خودش استفاده کنه. این کار توی اتوماسیون ویندوز از حفظکردن چند گزینه ظاهری مهمتره.

قدم سوم: اجرای فایل Batch و محدودیت پنجره مخفی
توی ویدیوی اصلی، بعد از نوشتن اسکریپت پاورشل، از یک فایل Batch هم استفاده کردم. دلیلش این بود که در بعضی سناریوها موقع اجرا یک پنجره کنسول برای لحظهای دیده میشه. کد فایل run_script.bat که در ویدیو گفتم میتونی از مقاله برداری، اینه:
@echo off
powershell.exe -WindowStyle Hidden -ExecutionPolicy Bypass -File "C:\Path\To\Your\Script.ps1"دو خط بالا به ویندوز میگن یک پردازش PowerShell با تنظیمات مشخص راهاندازی بشه. @echo off نمایش خود دستورهای Batch رو خاموش میکنه و -WindowStyle Hidden از PowerShell میخواد پنجره کنسولش رو پنهان اجرا کنه. ولی پنهانبودن پنجره به معنی نامرئیبودن فعالیت نیست: فرآیند، Task و اثراتش همچنان قابل بررسی هستن. همچنین بسته به روش راهاندازی، ممکنه پنجره Batch کوتاهمدت دیده بشه.
من برای کارهای مدیریتی واقعی ترجیح میدم اجرا قابل ردگیری باشه و فایل گزارش داشته باشم. مخفیسازی نباید به معنی دورزدن رضایت صاحب سیستم یا حذف نشانههای اجرای برنامه باشه. اگر روی سیستم شخصی خودت از این شیوه استفاده میکنی، اسم Task رو واضح بذار و روش غیرفعالکردنش رو هم یاد بگیر.
قدم چهارم: کد VBS برای اجرای بدون پنجره کنسول
بخش بعدی ویدیو سراغ فایل .vbs میره. این روش در بعضی تنظیمات قدیمیتر ویندوز برای راهاندازی یک برنامه بدون نمایش پنجره کنسول استفاده میشه. کدی که در ویدیو معرفی کردم رو اینجا هم عیناً گذاشتم، چون قول داده بودم فایلهای آموزش داخل وبلاگ باشن:
Set objShell = CreateObject("WScript.Shell")
objShell.Run "powershell.exe -WindowStyle Hidden -ExecutionPolicy Bypass -File ""C:\Path\To\Your\Script.ps1""", 0, Falseاین کد با شیء WScript.Shell یک پردازش جدید راه میاندازه و عدد 0 شیوه نمایش پنجره رو مشخص میکنه؛ False هم یعنی برای تمامشدن اجرای برنامه منتظر نمیمونه. با این حال، اجرای VBS میتونه روی نسخهها و تنظیمات مختلف ویندوز محدود یا غیرفعال شده باشه و هیچ تضمینی برای پنهانماندن همه اجزای اجرا وجود نداره. برای پروژههای جدید بهتره قبل از انتخاب VBS، نیاز واقعی، قابلیت نگهداری و سیاست امنیتی سیستم رو بررسی کنی.
یه اصلاح کوچک ولی مهم هم نسبت به توضیح شفاهی این سناریو لازمه: کد بالا فایل Batch رو اجرا نمیکنه؛ مستقیماً powershell.exe رو فراخوانی میکنه. یعنی اگه بخوای رفتار دقیقش رو بفهمی، باید به رشته دستور داخل Run نگاه کنی، نه فقط نام فایلی که ساختی. همین دقت در خواندن کد از مهارتهای اصلی یک برنامهنویس و کارشناس امنیته.
چطور اسکریپت خاموشی رو غیرفعال یا پاک کنیم؟
بخشی از آموزش Task Scheduler که خیلی وقتها فراموش میشه، روش توقف و پاککردن کار زمانبندیشدهست. برای خاموش شدن خودکار ویندوز، صرفاً دونستن راه روشنکردن تایمر کافی نیست؛ باید مسیر برگشت هم روشن باشه. بهخصوص اگر از اسکریپتی استفاده میکنی که با ورود به حساب دوباره اجرا میشه.
قبل از اینکه یک اجرای زمانبندیشده رو فعال کنی، باید راه برگشتش رو هم بلد باشی. اگه Task هنوز در Task Scheduler وجود داره، از داخل فهرست روی اسمش راستکلیک کن و Disable رو بزن تا نوبتهای بعدی اجرا نشن. برای حذف کامل هم بعد از بررسی تنظیماتش میتونی Delete رو انتخاب کنی. اگر همین لحظه یک اجرای آزمایشی فعاله، باید اون پردازش یا Task رو هم جداگانه متوقف کنی.
اگر با دستور shutdown.exe /s /t ... زمانبندی کردی، shutdown.exe /a رو در مهلت انتظار اجرا کن؛ ولی اگر Stop-Computer -Force در مرحله اجرا باشه، دیگر فرصتی شبیه تایمر shutdown نداری. این دلیل اصلی توصیه من به نسخه تستیه. مراقب باش «لغو Task» و «لغو فرمان خاموشی که از قبل آغاز شده» یکی نیستن.
عیبیابی: چرا اسکریپت پاورشل اجرا نمیشه یا ویندوز خاموش نمیشه؟
برای عیبیابی خاموش شدن خودکار ویندوز، اول مشخص کن اصلاً فرمان اجرا شده یا نه. اگر در حالت تایمر CMD مشکلی نداری ولی فایل پاورشل کار نمیکنه، مسئله احتمالاً مربوط به شرط، مجوز یا تنظیمات اجرای فایل خودته؛ این نتیجه از حفظکردن دستورهای جدید خیلی مفیدتره.
بعضی وقتها همهچیز روی کاغذ درسته، ولی نتیجهای نمیبینی. من معمولاً از خود اسکریپت شروع میکنم: آیا فایل واقعاً پسوند .ps1 داره؟ آیا مسیر پوشه دسکتاپ متعلق به همون حسابه؟ آیا اجرای دستی نسخه بدون خاموشی خروجی درست میده؟ وقتی جواب اینها روشن شد، سراغ Task Scheduler و دسترسیها میرم.
| نشانه | احتمال رایج | اولین بررسی |
| فایل اجرا نمیشود | پسوند یا مسیر اشتباه | نام کامل فایل و مسیر آرگومان File |
| Task اجرا شده ولی چیزی نمیبینی | اجرای غیربرهمکنشی یا نبود خروجی | History و گزارش خروجی خود اسکریپت |
| شرط پوشه همیشه نادرست است | حساب اجراکننده و دسکتاپ متفاوت | بررسی GetFolderPath در همان حساب |
| اسکریپت با خطای Policy متوقف میشود | سیاست اجرای اسکریپت | Get-ExecutionPolicy -List و محدودیت سازمانی |
| خاموشی رخ نمیدهد | مجوز ناکافی یا فرمان اجرا نشده | خطای واقعی Stop-Computer و دسترسی حساب |
| تایمر لغو نمیشود | اجرای Stop-Computer بهجای shutdown | غیرفعالسازی Task و توقف اسکریپت قبل از اجرا |
برای اینکه حدس نزنیم، میتونی چند خروجی غیرمخرب رو ثبت کنی. این دستورها فقط هویت اجراکننده، سیاست اجرا و مسیر دسکتاپ همون حساب رو نمایش میدن:
whoami
Get-ExecutionPolicy -List
[Environment]::GetFolderPath('Desktop')
Get-Dateاگه میخوای برنامهنویسی رو جدیتر دنبال کنی، بهجای حذف خطاها یا مخفیکردن پنجره، یاد بگیر لاگ درست بنویسی؛ مثلاً زمان شروع، مسیر مورد بررسی، نتیجه شرط و دلیل انجام هر اقدام رو ثبت کنی. این مهارت توی اسکریپت پاورشل، پایتون، بکاند و حتی عیبیابی سرویسهای لینوکس کاربرد داره.
هک ویندوز با پاورشل؛ واقعاً چه چیزی رو باید یاد بگیری؟
اگر میخوای این آموزش رو با یک ترفند هکری ویندوز به دوستت معرفی کنی، بهتره توضیح بدی که اینجا داریم کنترل یک سیستم مجاز رو با اسکریپت تمرین میکنیم. خاموش کردن کامپیوتر با پاورشل خودش «نفوذ» نیست؛ تفاوت بین استفاده مدیریتی و سوءاستفاده رو نوع دسترسی و مجوز مشخص میکنه.
حالا برسیم به سؤالی که احتمالاً کنجکاوت کرده: «آیا با پاورشل میشه هک کرد؟» پاورشل ابزار قدرتمند مدیریت ویندوزه. هم مدیر سیستم ازش استفاده میکنه، هم پژوهشگر امنیت برای بررسی وضعیت دستگاه، و گاهی مهاجم هم تلاش میکنه از همین ابزار سوءاستفاده کنه. پس خود ابزار نه خوبه نه بد؛ هدف، دسترسی و کاری که انجام میدی مهمه.
مثلاً کسی که دنبال «آموزش هک ویندوز» میگرده، ممکنه فکر کنه با یک فایل مخفی میشه از هر سیستمی عبور کرد. ولی مهارت واقعی از فهم حساب کاربری، مجوزها، پردازشها، ثبت رخدادها، شبکه و رفتار اسکریپتها شروع میشه. خاموش کردن یک کامپیوتر از راه دور بدون اجازه یا اجرای پنهانی کد روی دستگاه دیگران نه نشونه حرفهایشدنه و نه کاریه که من توی آموزش پیشنهاد کنم.
اگه به دنیای هک و امنیت علاقه داری، پیشنهاد میکنم قبل از انتخاب ابزار به مسیر رایگان آموزش هک و امنیت سر بزنی. بعد از اون میتونی تفاوت هک و تست نفوذ رو بخونی و با ابزارهای هک و تست نفوذ آشنا بشی. اینها دقیقاً کمک میکنن بفهمی چرا یک ترفند نمایشی با یک ارزیابی امنیتی مجاز فرق داره.
هک سایت، هک لینوکس و هک ویندوز چه ارتباطی با این تمرین دارن؟
اسم همه این حوزهها «هک» داره، اما مسئلههاشون متفاوتن. توی امنیت ویندوز ممکنه روی حسابها، پاورشل، تنظیمات سیستم و لاگها کار کنی؛ توی امنیت وب باید HTTP، مرورگر، نشست کاربر و منطق برنامه رو بفهمی؛ در لینوکس هم فایلسیستم، مجوزها، سرویسها و شبکه بخش بزرگی از ماجراست. پس کسی که فقط دستور خاموشی ویندوز رو بلده، هنوز وارد مباحث تخصصی هک سایت نشده.
اگه موضوعت امنیت سایت و وباپلیکیشنه، از مسیر آموزش تست نفوذ شروع کن و سناریوها رو توی آزمایشگاه خودت بررسی کن. برای آشنایی با خط فرمان لینوکس هم صفحه دوره Linux Essentials در دسترسه تا سرفصلها رو ببینی. قرار نیست برای یاد گرفتن مفاهیم پایه هر روز یک ابزار هک جدید نصب کنی.
از این ترفند تا برنامهنویسی واقعی چقدر راهه؟
این پروژه بیشتر از چیزی که به نظر میاد درس داره. وقتی میگی «اگر پوشه نبود، ۳۰ ثانیه صبر کن، بعد دوباره بررسی کن»، داری الگوریتم مینویسی؛ یعنی مسئله رو به قدمهای واضح تبدیل میکنی. قدم بعدی میتونه افزودن گزارش، مدیریت خطا، بررسی چند شرط و ساخت ابزار کوچکی باشه که بهجای خاموشکردن سیستم، اطلاعات مفیدی بهت بده.
من معمولاً به کسی که بعد از دیدن یک ترفند هکری ویندوز به برنامهنویسی علاقهمند شده پیشنهاد میکنم همین ایده رو با پایتون هم بازسازی کنه؛ مثلاً یک برنامه بنویسه که وجود چند پوشه رو بررسی و نتیجه رو در فایل ثبت کنه. اگر نمیدونی از کجا شروع کنی، از آموزش پایتون نابغهها میتونی سرفصلها رو ببینی و تشخیص بدی آیا مسیرش به هدفت میخوره یا نه.
برای ورود جدیتر به امنیت هم خوبه قبل از خرید هر آموزشی، چند تمرین رایگان انجام بدی و مطمئن بشی به تحلیل سیستم علاقه داری. اگر بعداً خواستی این علاقه رو به یک مسیر منظم تبدیل کنی، صفحه دوره متخصص تست نفوذ نابغهها وضعیت انتشار، پیشنیازها و سرفصلهای موجود رو شفاف نشون میده. ولی همین مقاله و تمرینهای داخلش برای شروع کاملاً قابل استفادهان.
۴ تمرین اضافه که بعد از دیدن ویدیو میتونی انجام بدی
تمرین اول اینه که بهجای یک پوشه، دو پوشه رو بررسی کنی و فقط وقتی هر دو وجود نداشتن پیام هشدار چاپ کنی. تمرین دوم اینه که زمان انتظار رو بهصورت متغیر بالای فایل قرار بدی تا مجبور نباشی عدد رو از وسط شرط عوض کنی. تمرین سوم ثبت تاریخ و نتیجه در یک فایل متنیه؛ تمرین چهارم هم اینه که Task Scheduler رو یکبار برای اجرای یک فایل بدون خطر مثل Notepad تنظیم و دوباره حذفش کنی.
اگه این چهار تمرین رو درست انجام بدی، از یک کپیکننده دستور به کسی تبدیل میشی که میتونه رفتار اسکریپت خودش رو توضیح بده. این همون نقطهایه که یادگیری پاورشل، برنامهنویسی و درک سیستمعامل به هم وصل میشن؛ نه با بزرگنمایی درباره هک، بلکه با تمرین واقعی و قابل بررسی.
ویدیوی آموزش خاموشی خودکار ویندوز و کدهای کامل
اگه از ویدیوی من در یوتیوب یا آپارات رسیدی اینجا، کدها حذف نشدن: اسکریپت اصلی Script.ps1، مسیر powershell.exe، آرگومانهای Task Scheduler، فایل Batch و نمونه VBS همگی در همین مقاله قرار دارن. برای راحتی، یک نمونه آزمایشی بدون خاموشی و روش لغو تایمر هم اضافه کردم تا اول با خیال راحت منطق رو یاد بگیری.
پیشنهاد میکنم ویدیو رو کنار کدها باز کنی، اما قبل از هر اجرای واقعی، بخش هشدارها و تست امن رو بخونی. نسخه ویدیو عمداً سناریوی نمایشی داره؛ با همین توضیحها میتونی تفاوت سناریوی آزمایشگاهی با حفاظت واقعی یک سیستم رو بفهمی.
سؤالات متداول درباره خاموش شدن خودکار ویندوز و پاورشل
سؤالهای زیر رو بر اساس مسئلههای واقعی همین آموزش دستهبندی کردم: خاموش شدن خودکار ویندوز، لغو فرمان، اجرای فایل در زمان ورود و نکتههای امنیتی. اگر بین CMD و پاورشل مرددی یا میخوای بعد از دیدن ویدیو مستقیم سراغ کد بری، اول پاسخ سؤال مربوط به خودت رو بخون.
چطور ویندوز رو یک ساعت دیگه خاموش کنم؟
اگه فقط تایمر میخوای، در Run یا ترمینال دستور shutdown.exe /s /t 3600 رو بزن. عدد ۳۶۰۰ برحسب ثانیهست و معادل یک ساعته.
چطور خاموش شدن خودکار ویندوز رو لغو کنم؟
برای تایمر shutdown.exe تا قبل از پایان مهلت، shutdown.exe /a رو اجرا کن. این دستور لزوماً خاموشیای رو که اسکریپت با Stop-Computer آغاز کرده متوقف نمیکنه.
آیا با PowerShell میشه کامپیوتر رو بعد از ۳۰ ثانیه خاموش کرد؟
بله، میشه ۳۰ ثانیه صبر کرد و بعد فرمان خاموشی رو اجرا کرد؛ اما بهتره اول با Write-Host نسخه بدون خاموشی رو تست کنی تا فایلهای ذخیرهنشده از دست نرن.
فرق PowerShell با CMD برای خاموش کردن ویندوز چیه؟
برای تایمر ساده هر دو میتونن shutdown.exe رو اجرا کنن. مزیت پاورشل وقتی معلوم میشه که شرط، متغیر، فایل، لاگ یا چند عملیات متوالی لازم داشته باشی.
Task Scheduler چیه و چهکار میکنه؟
ابزار داخلی زمانبندی ویندوزه. باهاش میتونی یک برنامه یا اسکریپت رو در ساعت مشخص، هنگام ورود کاربر یا در پاسخ به بعضی رویدادها اجرا کنی.
چطور فایل ps1 رو موقع ورود به ویندوز اجرا کنم؟
داخل Task Scheduler یک Task بساز، محرک At log on رو برای حساب خودت انتخاب کن و در بخش Action، فایل رو با برنامه PowerShell و آرگومان -File معرفی کن.
چرا اسکریپت پاورشل روی سیستم من اجرا نمیشه؟
اول پسوند و مسیر فایل، حساب اجراکننده، خطاهای PowerShell و Get-ExecutionPolicy -List رو بررسی کن. خیلی وقتها خطا مربوط به مسیر یا مجوز Taskـه.
آیا ExecutionPolicy Bypass برای اجرای هر اسکریپتی لازمه؟
نه. Bypass یک تنظیم سراسری ضروری یا راهکار امنیتی نیست. تا وقتی دلیلش رو نمیدونی، بهجای دورزدن سیاستها، روش اجرای مجاز و تنظیمات سیستم رو بررسی کن.
آیا فایل VBS واقعاً برنامه رو مخفی میکنه؟
میتونه پنجره یک پردازش رو در بعضی شرایط بدون نمایش راه بندازه، ولی اجرای برنامه از دید سیستم و ابزارهای مدیریتی پنهان نمیشه و رفتار آن به تنظیمات ویندوز وابستهست.
آیا با ساخت پوشه روی دسکتاپ میشه جلوی هکر رو گرفت؟
نه؛ پوشه دسکتاپ ابزار احراز هویت نیست. کسی که به یک حساب دسترسی داره معمولاً میتونه همون پوشه رو دستکاری کنه. این کد فقط تمرین شرط و زمانبندیه.
خاموش کردن اجباری ویندوز میتونه فایلهام رو خراب کنه؟
ممکنه دادههای ذخیرهنشده از دست برن، مخصوصاً با گزینههای -Force یا /f. قبل از تست فایلها رو ذخیره کن و از حالت نمایشی استفاده کن.
آیا پاورشل برای آموزش هک ویندوز کاربرد داره؟
پاورشل برای مدیریت و پایش سیستم، تحلیل امنیتی و اتوماسیون کاربرد داره. بعضی مهاجمان هم ازش سوءاستفاده میکنن؛ آموزش حرفهای باید روی فهم سیستم و تمرین مجاز تمرکز کنه.
برای هکر شدن باید از PowerShell شروع کنم یا Kali Linux؟
هیچکدوم بهتنهایی شرط شروع نیستن. ابتدا شبکه، سیستمعامل، مفاهیم امنیت، مجوزها و اصول برنامهنویسی رو یاد بگیر؛ بعد با توجه به هدف سراغ ابزار برو.
هک سایت با این اسکریپت امکانپذیره؟
خیر. این اسکریپت روی شرایط یک سیستم ویندوزی کار میکنه و ارتباط مستقیمی با آسیبپذیریهای وب نداره. برای امنیت سایت باید مبانی وب و تست نفوذ مجاز رو جدا یاد بگیری.
آیا روی ویندوز ۱۱ هم Task Scheduler و PowerShell وجود دارن؟
بله، ابزارهای داخلی ویندوز هستن. البته نسخه PowerShell، سیاستهای سازمانی، دسترسی حساب و تنظیمات امنیتی میتونن روی رفتار اجرا اثر بذارن.
اگه فقط بخوام یک ترفند هکری ویندوز یاد بگیرم، از کجا شروع کنم؟
از دستورهای قابل توضیح و بیخطر شروع کن؛ مثل نمایش اطلاعات سیستم، بررسی وجود فایل، مدیریت فرآیندها و زمانبندی یک پیام آزمایشی. بعد خودت رو با یک تمرین کوچک محک بزن.
جمعبندی: اسکریپت رو بفهم، فقط اجراش نکن
توی این مقاله از سادهترین روش خاموش شدن خودکار ویندوز رسیدیم به اسکریپت پاورشل، شرط بررسی پوشه، اجرای زمانبندیشده با Task Scheduler و نمونههای Batch و VBS همون ویدیو. مهمتر از اینها دیدیم که چطور یک اسکریپت رو امن آزمایش کنیم، چرا shutdown /a همه خاموشیها رو لغو نمیکنه و چرا یک پوشه روی دسکتاپ نشونه ورود مجاز یا غیرمجاز نیست.
حالا نوبت توئه: اول نسخه شبیهسازیشده رو اجرا کن، نتیجه دو حالت وجود و نبود پوشه رو ببین، بعد زمان اجرا رو با Task Scheduler تنظیم کن و در پایان Task رو خودت غیرفعال کن. اگه از این مسیر خوشت اومد، یادگیری برنامهنویسی و مبانی هک و امنیت رو ادامه بده. بهترین حس این نیست که یک کد عجیب اجرا کردی؛ اینه که دقیقاً میفهمی چرا کار کرد و چه زمانی نباید اجراش کرد.
منابع رسمی برای مطالعه بیشتر
برای بررسی فنی جزئیات، مستندات خاموشی زمانبندیشده در ویندوز، فرمان Start-Sleep در PowerShell، اجرای برنامه هنگام ورود کاربر و سیاست اجرای اسکریپتها رو بخون. این منابع کمک میکنن رفتار واقعی ابزارها رو از حدس و ترفندهای بیمنبع جدا کنی.
اگه میخوای این موضوع رو جدیتر یاد بگیری، مسیر کاملش اینجاست.
دورهها موضوع رو از پایه تا اجرای واقعی، پروژه و نکتههایی که وسط کار بهشون میرسی جلو میبرن.
نظرها و تجربهها
سؤال، تجربه یا نکتهای درباره این مقاله داری؟ اینجا بنویس تا گفتوگو برای بقیه هم مفید بمونه.
چطور بود ویدیو؟
سلام و ارادت. من آموزش رو مطابق ویدیوی یوتیوب تون تا اونجایی که فایل درست میشه و سیستم هم بخوبی عمل میکنه رفتم.اما قسمت مخفی کردن پاورشل وقتی میخوام فایل bat رو جایگزین کنم و اوکی میکنم این خطا رو میده an error has occurred for checkfolder.error message: one or more of the specified arguments are not valid
سلام. من همه چیز رو درست انجام دادم ولی در صورتی کار میکنه که از task scheduler گزینه run رو بزنم در غیر این صورت اتومات کار نمیکنه. ممنون میشم راهنمایی کنید.
سلام من مشکل رو پیدا کردم. وقتی که لپ تاپم رو به برق متصل میکنم اسکریپت ران میشه. راهی نداره که وقتی به برق وصل نکردم این اسکریپت اجرا بشه؟؟
باید تنظیمات پاور رو بررسی کنید که در هر حالت اجرا بشه
عالی