
اگر تا به حال ویندوز را از نو نصب کرده باشید، میدانید که پس از بوت اولیه، سیستم تقریباً خالی است و ساعتها زمان میبرد تا به شکل دلخواه درآید. یک کاربر که بهطور مداوم سختافزارهای تازه را آزمایش میکند، پس از هر نصب مجدد ویندوز مجبور بوده همان مرورگرها، ابزارها، لانچرها و ابزارهای توسعه را دوباره نصب کند. او تصمیم گرفت این روند تکراری را با ساخت یک فایل پیکربندی winget سادهتر کند.
winget؛ مدیر بسته رسمی مایکروسافت
winget مدیر بسته خط فرمان (Command-Line Package Manager) رسمی مایکروسافت است که عملکردی مشابه apt یا apt-get در لینوکس دارد. با دستورهای winget میتوان بستههای نرمافزاری را جستوجو، نصب، حذف و بهروزرسانی کرد. در این آزمایش، دستور export نقش کلیدی داشت؛ زیرا فهرست همه بستههای نصبشده را استخراج میکند.
او ابتدا دستور winget export -o apps.json --include-versions را اجرا کرد تا بستهها را همراه با نسخهها در یک فایل JSON ذخیره کند. این خروجی بیش از ۱۵۰ بسته را از منبع winget و چند مورد از Microsoft Store ثبت کرد. با این حال، همه برنامهها در آن نبودند؛ نرمافزارهایی مانند Brave، Discord، Postman و Android Studio که بهصورت دستی نصب شده بودند، قابل استخراج نبودند.
از JSON تا YAML؛ نیمه دوم کار
خروجی export یک فایل JSON بود، اما دستور configure به فایل YAML نیاز دارد. بنابراین فایل باید ابتدا تبدیل میشد. کاربر بهصورت دستی بستههای جاافتاده را اضافه کرد و بستههایی را که به دلیل نصب همزمان سیستمی و کاربری دوبار در فهرست آمده بودند حذف کرد.
دستور winget configure یک فایل YAML را میخواند و همه محتوای آن را یکجا اعمال میکند؛ هم برنامهها و هم تنظیمات ویندوز. البته export تنظیمات ویندوز را ثبت نمیکند. به همین دلیل او سه تنظیم را دستی اضافه کرد: حالت توسعهدهنده (Developer Mode)، نمایش پسوند فایلها و فایلهای مخفی، و حالت تاریک (Dark Mode). افزونههای VS Code را نیز میتوانست استخراج کند، اما چون این روزها بیشتر از ابزارهای دیگری استفاده میکند، از آن صرفنظر کرد.
در نهایت، فایل واحد با بیش از ۱۰۰ برنامه و تنظیم به دو فایل تقسیم شد:
- فایل اول: برنامههای اصلی مانند ابزارهای توسعه، نرمافزارهای روزمره و ابزارهای دسترسی به هوملب (Homelab).
- فایل دوم: ابزارهای سختافزاری و فروشنده، لانچرهای بازی و ابزارهای شبیهساز پرواز.
آزمایش روی نصب تازه ویندوز در ماشین مجازی
برای اطمینان از عملی بودن این روش، کاربر یک ماشین مجازی (VM) با VMware ساخت و آخرین ISO ویندوز ۱۱ نسخه 26H2 را روی آن نصب کرد. او ابتدا بهروزرسانیهای معلق ویندوز را پاک کرد و سپس بررسی کرد که winget روی سیستم وجود دارد. نسخه موجود winget v1.11.510 بود.
سپس فایل YAML را به ماشین مجازی منتقل کرد و اعتبارسنجی را با winget configure validate انجام داد. بار اول این دستور شکست خورد، چون باید winget configure بهصورت دستی فعال میشد. پس از اجرای winget configure --enable و تکرار اعتبارسنجی، هیچ مشکلی گزارش نشد.
فایل آزمایشی ماشین مجازی شامل سه تنظیم ویندوز و ۱۴ برنامه بود، نه همه ۱۵۰+ برنامه. او دستور Measure-Command { winget configure -f workstation-vm-test.dsc.yaml --accept-configuration-agreements } را اجرا کرد. برنامهها با موفقیت نصب شدند، اما فقط دو مورد از سه تنظیم ویندوز اعمال شد؛ زیرا PowerShell با دسترسی ادمین اجرا نشده بود و Measure-Command خطای آن را در ابتدا پنهان کرده بود.
این آزمایش برای آن تنظیمات و ۱۴ برنامه ۱۴ دقیقه و ۲۶.۸ ثانیه طول کشید، اما میتوانست کمتر باشد چون برخی اعلانهای UAC بیپاسخ مانده بودند. اجرای دوباره در یک ماشین مجازی تازه کمتر از ۱۲ دقیقه زمان برد. این نتیجه ثابت کرد فایل پیکربندی برای آن ۱۴ برنامه کار میکند.
نصب با پیکربندی متفاوت است
فایل پیکربندی winget برنامهها را نصب میکند، اما آنها را پیکربندی نمیکند. پس از باز کردن برنامهها، همهچیز تازه بود: مرورگرها بدون پروفایل، تاریخچه و رمزهای عبور؛ ابزارها بدون ورود به حساب؛ و VS Code بدون افزونهها. مورد آخر به خود کاربر مربوط میشد، چون افزونهها را در فایل قرار نداده بود.
نکته دیگر این بود که فایل نسخه هر برنامه را شامل میشد، اما این نسخهها پین (Pin) نشده بودند و سیستم نسخههای جدیدتری نسبت به رایانه اصلی دریافت کرد. برای مثال Node از 22.14 به 22.23.2، Python از 3.13.3 به 3.13.15 و Git از 2.53.0 به 2.55.0 ارتقا یافت. اگر کاربری به نسخه خاصی از یک برنامه وابسته باشد، باید آن را دستی مدیریت کند.
برنامههای دارای لایسنس مانند MS Office و Adobe Suite نیز نیاز به احراز هویت جداگانه دارند و در فایل پیکربندی لحاظ نشده بودند. همچنین موارد حساسی مانند کلیدهای SSH و اطلاعات ورود Git بهدلیل امنیتی از فایل حذف شده بودند. تنظیماتی مانند چیدمان نوار وظیفه و منوی Start، برنامههای پیشفرض و مقیاس نمایش نیز آزمایش نشدند.
یک خط پایه، نه یک نسخه پشتیبان
این آزمایش کوچک نشان داد یک فایل پیکربندی winget میتواند کار تکراری و خستهکننده نصب بیشتر برنامههای قدیمی را کاهش دهد. این فایل یک نقطه شروع به کاربر میدهد، نه یک کپی دقیق از رایانه قبلی. به گفته کاربر، نگهداشتن اطلاعات ورود و لایسنسها در یک فایل YAML امن نیست و درایورها نیز وابسته به دستگاه هستند، بنابراین انتقال آنها سودی ندارد. در نهایت، یک خط پایه مستند و قابل تکرار بسیار بهتر از شروع از صفر و تکیه بر حافظه است.