انتقال مجوزهای فایل با استفاده از PowerShell – به زبان ساده


حفظ «مجوزهای» (Permissions) اشتراک فایل در زمان انتقال بین سرورهای مختلف میتواند یک چالش بزرگ باشد، اما زمانی که از پاورشل استفاده میکنید، میتوانید این فرایند را با سهولت و سرعت بیشتری مدیریت کنید. در این راهنما با روش انتقال مجوزهای فایل با استفاده از PowerShell آشنا خواهیم شد.
زمانی که هر نوع انتقال فایل را اجرا میکنید، نه تنها باید خود فایلها و پوشهها را در نظر داشته باشید، بلکه باید مجوزهای تعیینشده روی این موارد را نیز در نظر بگیرید. هر فایل یا پوشه به طور بالقوه میتواند «مداخل کنترل دسترسی» (Access Control Entries) یا به اختصار ACE مختلفی داشته باشد و «فهرست کنترل دسترسی» (Access Control List) به اختصار ACL متفاوتی را تشکیل داده باشد. بسته به تعداد فایلهایی که قرار است انتقال یابند، این ترکیب میتواند بسیار متنوع باشد.
در زمان جابجایی فایلها به یک مکان جدید، مجوزها همواره همراه با آنها جابجا نمیشوند. زمانی که یک انتقال فایل بزرگ مثلاً انتقال کل فایلهای سرور با مجوزهای داخلی انجام مییابد، لازم است که این مجوزها به همراه اشیایی که انتقال مییابند به مکان جدید منتقل شوند.
به این منظور چند روش وجود دارند. یکی از ابزارهای محبوب برای اجرای انتقال فایل Robocopy نام دارد. Robocopy یک ابزار عالی با امکانات زیاد محسوب میشود، اما استفاده از آن ممکن است دشوار باشد و شاید در همه موقعیتها هم کار نکند. در چنین مواردی میتوان از ابزار جالبی به نام icacls استفاده کرد. این یک ابزار است که مدتهای زیادی است حضور دارد و مانند robocopy سوئیچهای زیادی دارد، بنابراین با استفاده از آن در کنار PowerShell از پیچیدگیاش میکاهیم.
استفاده از پاورشل برای انتقال مجوزها
با این که میتوان به صورت مستقیم از ابزار خط فرمان icacls استفاده کرد، اما درک آن چندان ساده نیست. برای رفع این پیچیدگی کمی با پاورشل آشنا میشویم تا از آن به عنوان یک پوشش برای اجرای ابزار icacls و سادهتر کردن این فرایندهای خستهکننده استفاده کنیم.
ابتدا باید یک ابزار موجود را که برای منظور ما ساخته شده است را دانلود کنیم. یکی از عالیترین نکات در مورد جامعه PowerShell این است که معمولاً برای هر چیزی یک ابزار آماده وجود دارد. در این مورد باید از یک ماژول پاورشل استفاده کنیم. این ماژول پاورشل را میتوانید در گالری PowerShell (+) ببینید.
اگر از نسخه 4 یا بالاتر پاورشل استفاده میکنید، هم اینک برخی دستورهای مورد نیاز برای دریافت سریع این ماژول را در برنامهتان دارید:
PS> Find-Module -Name NTFSPermissionMigration | Install-Module
زمانی که کد فوق اجرا شد، یک ماژول جدید روی کامپیوتر شما نصب میشود. زمانی که نصب پایان یافت، میتوانیم یک دستور درون ماژول و روی پوشه شامل همه فایلهایی که قرار است، مجوزهایشان انتقال یابد اجرا کنیم:
PS> Save-Acl -FolderPath \\\\OLDSERVER\\FileShare -SaveFilePath C:\\FilePermissions.txt
زمانی که این دستور اجرا شود، یک خروجی مشابه زیر میبینید و فرایند ذخیره فایل آغاز میشود:
processed file: \\\\OLDSERVER\\FileShare\\File1.txt processed file: \\\\OLDSERVER\\FileShare\\File2.exe Successfully processed X files; Failed processing 0 files
زمانی که دستور فوق پایان یابد، همه مجوزهای فایلها و پوشهها درون این فایل ذخیره شدهاند. اینک میتوانید این فایل را بازیابی کنید. پیش از انجام این کار باید مطمئن شوید که یک کپی دقیق از همه فایلهای درون پوشه قدیمی گرفتهاید، چون در غیر این صورت کار نخواهد کرد.
برای بازیابی مجوزها در مسیر پوشه جدید باید از دستور Restore-Acl استفاده کنید:
PS> Restore-Acl -RestoreToFolderPath \\\\NEWFILESERVER\\FileShare -PermissionFilePath C:\\FilePermissions.txt Successfully processed XXX files; Failed processing 0 files
با پایان یافتن اجرای این دستور، همه مجوزهای NTFS از پوشه منبع به پوشه مقصد بازتاب مییابند.
سخن پایانی
در این راهنما دیدیم که با بهرهگیری از ماژول پاورشل مورد بحث و کمی اسکریپتنویسی، میتوانیم یک وظیفه خستهکننده برای انتقال مجوزهای NTFS از یک سرور به سرور دیگر را به سرعت و سهولت اجرا کنیم.
اگر این مطلب برای شما مفید بوده است، آموزشهای زیر نیز به شما پیشنهاد میشوند:
- مجموعه آموزشهای شبکههای کامپیوتری
- مجموعه آموزشهای دروس علوم و مهندسی کامپیوتر
- آموزش مقدماتی Windows PowerShell (ویندوز پاورشل)
- بهینه سازی اپلیکیشن جدید ترمینال در ویندوز — راهنمای کاربردی
- چگونه برنامه نویس وب شویم؟ — بخش سوم: پلتفرمها و ابزارها
==