حذف گروهی پروفایل کاربران با قابلیت مستثنی کردن برخی از آنها
سلام به همه دوستان
با این آموزش می خواهیم به صورت خودکار پروفایل های اضافه ای که در طول زمان روی کامپیوتر ایجاد شده و بنا به هر دلیلی مثلا کمبود فضا دیگه نیاز نداریم شون رو حذف کنیم ، با این توضیح که بعضی شون رو دوست داریم نگه داریم یعنی از پاک شدن مستثنی کنیم.
البته اگه تعداد پروفایل ها کم باشه ، به راحتی و به صورت دستی می توانیم اونا رو پاک کنیم اما مورد استفاده این آموزش برای شرکت ها یا سازمانهایی هست که در بعضی سیستم ها ، کاربران زیادی لاگین می کنند که به مرور باعث هدر رفتن فضای دیسک می شود.
مشکل از همین جا شروع شد که یک سیستم در مجموعه ما به مشکل خورده بود و زمانی که پروفایل های کاربران رو بررسی کردم دیدم که ۳۸۹ تا کاربر به این سیستم لاگین کرده بودند و پروفایل هاشون ساخته شده بود. البته مشکل ما کمبود فضا بود که با پاک سازی حدود ۷۰ گیگ آزاد شد. لازم به ذکره که قبل از این کار فضای خالی درایو C رو صفر نشون می داد !!!
خب بریم سراغ آموزش!
اول باید بگم برای گرفتن بهترین نتیجه ، با اکانت Built-in Administrator روی سیستم لاگین و قبل از شروع یک بار سیستم رو Restart کنید. البته که با User ای که دسترسی Admin داشته باشه هم میشه انجام داد اما بر حسب تجربه بهتره به روشی که گفتم انجام بشه.
برای این کار از پاورشل (حتماً در حالت Run as administrator) و اسکریپت زیر کمک می گیریم:
# Define users to be excluded from deleting their profile
$excludedUsers = @(“User1”, “User2”)
# Get all user profiles on the computer
$profiles = Get-CimInstance -ClassName Win32_UserProfile | Where-Object { $_.Special -eq $false }
# Loop through each user profile
foreach ($profile in $profiles) {
$user = $profile.LocalPath.Split(“\”)[-۱]
# Check if the user is in the excluded users list
if ($excludedUsers -contains $user) {
Write-Host “Skipping profile for $user”
} else {
Write-Host “Deleting profile for $user”
# Delete the user profile
Remove-CimInstance -InputObject $profile -Verbose
}
}
در این اسکریپت، ابتدا آرایه ExcludedUsers تعریف می شود و کاربرانی که نباید پروفایل آنها حذف شوند، به آن اضافه میگردند. مطابق الگوی ذکر شده ، پروفایل های مدنظر را داخل پرانتز به ترتیب وارد می کنیم. (“User1”, “User2”)
سپس با استفاده از Get-CimInstance، همه پروفایلهای کاربران از سیستم دریافت میشود. در اینجا، فقط پروفایلهای کاربران عادی (غیر از پروفایلهای ویژه مانند Administrator و Default) در نظر گرفته شده است.
در حلقه Foreach، برای هر پروفایل، کاربر مربوط به آن را استخراج کرده و سپس بررسی می کند که آیا کاربر مورد نظر در آرایه ExcludedUsers وجود دارد یا نه.
اگر کاربر در لیست بود، پیغامی در کنسول چاپ میشود و پروفایل حذف نمیشود. اگر کاربر در لیست نبود، پیغام حذف پروفایل چاپ میشود و با استفاده از Remove-CimInstance پروفایل حذف میشود.
این پروسه به تناسب تعداد پروفایل ها و میزان حجم آنها زمان بر خواهد بود.
امکان دارد بعضی از پروفایل ها دفعه اول پاک نشوند که با ریستارت کردن سیستم و اجرای مجدد اسکریپت گفته شده پروفایل ها حذف خواهند شد.
امیدوارم به درد تون خورده باشه و در پایان اگه نظری داشتید خوشحال می شم بشنوم. موفق باشید.
جواد جان خدا قوت. ممنون از مطلب مفیدت
ممنونم مهندس جان، لطف دارید!