در محیطهای سازمانی، شبکه های داخلی، و حتی سرورهای ابری، مدیریت کاربران (Users) و گروهها (Groups) یکی از مهمترین وظایف مدیران سیستم است. این مدیریت نه تنها برای حفظ امنیت شبکه اهمیت دارد، بلکه در کنترل دسترسیها، تنظیم مجوزها و ساختاردهی منابع نیز نقش کلیدی ایفا میکند.
مایکروسافت برای انجام این کارها ابزاری بهنام PowerShell را ارائه داده است، یک محیط اسکریپت نویسی پیشرفته که به مدیر سیستم اجازه میدهد تمام جنبههای ویندوز و Active Directory را تنها با چند خط دستور کنترل کند.
در این مقاله یاد میگیریم چگونه کاربران و گروهها را با استفاده از PowerShell حذف کنیم، چه تفاوتی بین حذف از گروه و حذف حساب کاربری وجود دارد، و چگونه این عملیات را به صورت خودکار و امن انجام دهیم.
اهمیت مدیریت کاربران و گروهها در ویندوز و اکتیو دایرکتوری
در اکوسیستم ویندوز، کاربران (Users) نمایندهی افراد یا سرویسهایی هستند که به سیستم دسترسی دارند، و گروهها (Groups) مجموعههایی از کاربران با مجوزهای مشترکاند.
وقتی تعداد کاربران زیاد میشود، مثلاً در یک شرکت، دانشگاه یا دیتاسنتر، مدیریت دستی آنها از طریق کنترل پنل یا Active Directory Users & Computers بسیار زمانبر و خطاپذیر است. در چنین شرایطی، PowerShell با دستورات خودکار و دقیقش، به مدیران کمک میکند:
- صدها کاربر را در چند ثانیه حذف یا ویرایش کنند.
- دسترسی کاربران غیرفعال یا منقضی شده را مدیریت کنند.
- گروههای غیرضروری یا بلااستفاده را پاکسازی نمایند.
- گزارشگیری خودکار از وضعیت عضویتها داشته باشند.
بنابراین، یادگیری حذف و مدیریت کاربران از طریق پاورشل یک مهارت کلیدی در حوزهی DevOps، IT Administration و Cloud Infrastructure محسوب میشود.
معرفی ماژول ActiveDirectory در PowerShell
قبل از اجرای دستورات مربوط به کاربران و گروهها، باید مطمئن شوید ماژول Active Directory روی سیستم شما فعال است. این ماژول مجموعهای از دستورهای مدیریتی مخصوص اکتیو دایرکتوری را فراهم میکند.

برای بررسی نصب ماژول از دستور زیر استفاده کنید:
Get-Module -ListAvailable | Where-Object { $_.Name -like “ActiveDirectory” }
اگر خروجی خالی بود، باید ماژول را نصب کنید:
Import-Module ActiveDirectory
یا در صورت نیاز به نصب از طریق Server Manager:
Add-WindowsFeature RSAT-AD-PowerShell
اکنون تمام دستوراتی که در ادامه میآیند در محیط PowerShell شما در دسترس خواهند بود.
حذف یک کاربر از تمام گروهها در PowerShell
گاهی لازم است دسترسی یک کاربر را به تمام گروههای موجود لغو کنید، برای مثال زمانی که کارمند شرکت را ترک کرده یا حساب او باید از تمام مجوزهای گروهی پاک شود.
PowerShell برای این کار دستور بسیار قدرتمندی دارد:
$User = “E.Franklin”
$UserDN = (Get-ADUser -Identity $User).DistinguishedName
Get-ADUser -Identity $User -Properties MemberOf | Select-Object -ExpandProperty MemberOf | Where-Object { $_ -notlike “*Domain Users*” } | ForEach-Object { Remove-ADGroupMember -Identity $_ -Members $UserDN -Confirm:$false }
توضیح دستور:
- Get-ADUser کاربر مورد نظر را از Active Directory واکشی میکند.
- -Properties MemberOf لیست گروههایی که کاربر عضو آنهاست را بازیابی میکند.
- ForEach-Object روی هر گروه تکرار میشود.
- Remove-ADGroupMember کاربر را از آن گروه حذف میکند.
- -Confirm:$false یعنی بدون نیاز به تأیید دستی هر مرحله، عملیات حذف انجام شود.
با اجرای این دستور، کاربر مشخص شده از تمام گروهها به جز گروه پیشفرض Domain Users حذف میشود.
نکته: همیشه توصیه میشود قبل از اجرای این دستور در محیط واقعی، ابتدا یک گزارش آزمایشی از گروههای کاربر بگیرید:
(Get-ADUser -Identity E.Franklin -Properties MemberOf).MemberOf
حذف چند کاربر به صورت همزمان از یک گروه
در شرایطی که بخواهید چند کاربر را از یک گروه خاص حذف کنید، استفاده از فایل CSV بهترین روش است.
فایل CSV به شما اجازه میدهد فهرست کاربران را بهصورت جدولی در اختیار اسکریپت قرار دهید و به شکل خودکار حذف کنید.
گام اول: ساخت فایل CSV
در مسیر مثلاً C:\scripts\users.csv فایلی با محتوای زیر بسازید:
users
John.Doe
Mary.Ali
Frank.Karimi
گام دوم: اجرای دستور در PowerShell
Import-CSV “C:\scripts\users.csv” | ForEach-Object {
Remove-ADGroupMember -Identity “Marketing” -Members $_.UserName -Confirm:$false
}
توضیح دستور:
- Import-CSV فایل CSV را به PowerShell وارد میکند.
- -Header users مشخص میکند ستون داده ها نامش چیست.
- Remove-ADGroupMember همان دستور حذف از گروه است.
- “Marketing” نام گروه هدف است که میتوانید با گروه دلخواه جایگزین کنید.
اگر بخواهید نتایج را ثبت کنید، میتوانید خروجی را در فایل لاگ ذخیره نمایید:
… | Out-File “C:\Logs\RemovedUsers.txt”
حذف یک کاربر خاص از یک گروه مشخص
اگر هدف فقط حذف یک کاربر از یک گروه است، مثلاً کاربر J.Robinson از گروه Quality، دستور سادهتر خواهد بود:
Remove-ADGroupMember -Identity “Quality” -Members “J.Robinson”
در صورت تمایل برای حذف بدون پرسش تأیید، میتوانید پارامتر زیر را اضافه کنید:
-Confirm:$false
این دستور یکی از پرکاربردترین دستورات PowerShell در شرکتها و سازمانهاست، زیرا به مدیر سیستم اجازه میدهد بهصورت متمرکز دسترسی کاربران را از گروههای حیاتی حذف کند.
حذف کامل یک گروه در PowerShell

گاهی لازم است گروههایی که دیگر استفاده نمیشوند را از Active Directory حذف کنید. برای این کار از دستور Remove-ADGroup استفاده میشود:
Remove-ADGroup -Identity “Quality”
این دستور پس از اجرا، از شما تأییدیه میخواهد (Yes/No). برای حذف خودکار بدون تأیید میتوانید پارامتر زیر را اضافه کنید:
Remove-ADGroup -Identity “Quality” -Confirm:$false
توصیه:
قبل از حذف یک گروه، با دستور زیر اعضای آن را بررسی کنید تا از حذف ناگهانی کاربران مهم جلوگیری شود:
Get-ADGroupMember -Identity “Quality”
ساخت اسکریپت ترکیبی برای پاکسازی کاربران و گروهها
در محیطهای بزرگ که دهها گروه و صدها کاربر وجود دارد، میتوانید از اسکریپت ترکیبی استفاده کنید تا همزمان کاربران غیرفعال و گروههای خالی حذف شوند.
نمونه اسکریپت:
# حذف کاربران غیرفعال
$inactive = Get-ADUser -Filter {Enabled -eq $false}
foreach ($user in $inactive) {
Remove-ADUser -Identity $user.SamAccountName -Confirm:$false
}
# حذف گروههای بدون عضو
$groups = Get-ADGroup -Filter *
foreach ($group in $groups) {
if ((Get-ADGroupMember $group -ErrorAction SilentlyContinue).Count -eq 0) {
Remove-ADGroup -Identity $group -Confirm:$false
}
}
این اسکریپت به صورت خودکار کاربران غیرفعال و گروههای بدون عضو را شناسایی و حذف میکند.
چنین اسکریپت هایی در سازمانهای بزرگ یا دیتاسنترهای ابری (مثل AradCloud) برای بهینه سازی ساختار دامین بسیار مفید هستند.
بررسی وابستگیها قبل از حذف کاربر یا گروه
گاهی ممکن است کاربر یا گروه در Policy ها، مجوزهای فایل، یا تنظیمات دسترسی دیگر استفاده شده باشد. حذف بدون بررسی میتواند باعث خطا در سرویسها شود.
برای اطمینان از وابستگیها، از دستورات کمکی زیر استفاده کنید:
Get-ACL “C:\SharedFolder” | Select-String “Username”
یا بررسی عضویت گروهها:
Get-ADUser -Identity “John.Doe” -Properties MemberOf
و اگر بخواهید لیست تمام گروههایی که یک کاربر در آن عضو است را در فایل خروجی ذخیره کنید:
(Get-ADUser -Identity “John.Doe” -Properties MemberOf).MemberOf | Out-File “C:\Reports\UserGroups.txt”
نکات مهم پیش از حذف کاربران
- تهیه نسخه پشتیبان از AD:
همیشه قبل از حذف گروهها و کاربران از Active Directory نسخه پشتیبان بگیرید. - بررسی Recycle Bin:
اگر Directory Recycle Bin فعال نیست، فعالسازی آن توصیه میشود تا در صورت اشتباه بتوانید حسابها را بازیابی کنید. - Enable-ADOptionalFeature -Identity ‘Recycle Bin Feature’ -Scope ForestOrConfigurationSet -Target ‘domain.local’
- بررسی وابستگی سرویسها:
مطمئن شوید کاربر یا گروه در حال استفاده توسط سرویس خاصی نیست (مثلاً سرویس SQL یا IIS). - استفاده از تست Dry-Run:
پیش از اجرای نهایی حذف، از -WhatIf استفاده کنید تا نتیجه را شبیهسازی کند:
Remove-ADGroupMember -Identity “Quality” -Members “J.Robinson” -WhatIf
در این بخش از آموزش، با مفاهیم اصلی مدیریت کاربران و گروهها در PowerShell آشنا شدیم.
یاد گرفتیم چگونه:
- ماژول ActiveDirectory را بارگذاری کنیم.
- یک کاربر را از تمام گروهها حذف کنیم.
- چندین کاربر را با فایل CSV از گروهها خارج کنیم.
- گروههای غیرضروری را پاک نماییم.
- و اسکریپت هایی برای پاکسازی خودکار کاربران و گروهها بنویسیم.
بازگردانی کاربران حذف شده با Recycle Bin در Active Directory
یکی از بزرگترین مزیتهای ویندوز سرورهای مدرن، پشتیبانی از قابلیت Active Directory Recycle Bin است. این ویژگی به شما اجازه میدهد کاربران، گروهها یا اشیایی که به صورت تصادفی حذف شدهاند را بازیابی کنید، دقیقاً مانند Recycle Bin در دسکتاپ ویندوز.
اگر هنوز این قابلیت فعال نشده است، میتوانید آن را با دستور زیر روشن کنید:
Enable-ADOptionalFeature `
-Identity “Recycle Bin Feature” `
-Scope ForestOrConfigurationSet `
-Target “aradcloud.local”
پس از فعالسازی، هر زمان که کاربری به اشتباه حذف شد، میتوانید با دستور زیر آن را برگردانید:
Get-ADObject -Filter ‘isDeleted -eq $true -and Name -like “*John*”‘ -IncludeDeletedObjects |
Restore-ADObject
این دستور تمام حسابهای حذف شده با نام مشابه “John” را جستجو و بازیابی میکند.
در محیطهای سازمانی که چندین مدیر شبکه فعال هستند، فعال بودن Recycle Bin نهتنها امنیت داده ها را تضمین میکند بلکه از وقوع اختلال در دسترسیها جلوگیری مینماید.
تفاوت بین حذف حساب کاربری و حذف از گروه
درک تفاوت میان Remove-ADUser و Remove-ADGroupMember بسیار حیاتی است:
| نوع عملیات | دستور | کاربرد | نتیجه نهایی |
| حذف کامل حساب کاربری | Remove-ADUser | حذف حساب از دامین | کاربر بهطور کامل از سیستم پاک میشود |
| حذف از گروه | Remove-ADGroupMember | لغو عضویت از یک گروه خاص | حساب هنوز وجود دارد ولی مجوزهای گروهی را از دست میدهد |
بنابراین، زمانی که هدف شما فقط لغو دسترسی خاصی است، از دستور دوم استفاده کنید.
اما اگر قصد دارید حساب را بطور کامل حذف کنید (مثلاً کارمند شرکت را ترک کرده)، از دستور اول کمک بگیرید:
Remove-ADUser -Identity “E.Franklin” -Confirm:$false
نکته امنیتی: همیشه قبل از حذف کامل، گزارش عضویت و مسیرهای دسترسی کاربر را بررسی کنید. حذف اشتباه یک حساب میتواند باعث توقف سرویسهایی شود که از آن بهعنوان سرویس اکانت استفاده میکنند.
رفع خطاهای متداول در حذف کاربران و گروهها
در هنگام حذف یوزر یا گروه، ممکن است خطاهایی در PowerShell نمایش داده شوند.
در جدول زیر، خطاهای رایج و روشهای رفع آنها آورده شده است:
| نوع خطا | علت احتمالی | راهحل |
| Access Denied | اجرای PowerShell بدون دسترسی ادمین | اجرای PowerShell با Run as Administrator |
| The term ‘Remove-ADUser’ is not recognized | ماژول Active Directory نصب نیست | اجرای Import-Module ActiveDirectory یا نصب RSAT |
| Object not found | کاربر یا گروه وجود ندارد یا حذف شده | بررسی نام دقیق با Get-ADUser یا Get-ADGroup |
| The specified account is a member of Domain Admins | حساب از نوع سیستمی یا حیاتی است | ابتدا از گروه Admin جدا کنید سپس حذف نمایید |
| Cannot delete object because it is a parent of other objects | کاربر دارای Sub Object (مثل mailbox) است | ابتدا وابستگیها را حذف یا منتقل کنید |
در محیطهای بزرگ (مثل زیرساخت ابری ابرآراد)، توصیه میشود عملیات حذف در یک محیط تستی (Staging) انجام شود تا خطاها پیش از اجرا در محیط واقعی شناسایی شوند.
نکات امنیتی در حذف کاربران و گروهها

PowerShell ابزاری بسیار قدرتمند است، و در عین حال اگر بدون سیاستهای امنیتی استفاده شود، میتواند خطرناک باشد.
برای حذف ایمن کاربران و گروهها، موارد زیر را رعایت کنید:
1- محدودسازی دسترسی PowerShell
تنها مدیران با سطح دسترسی Domain Admin مجاز به اجرای اسکریپت های حذف باشند.
2- ثبت تمامی تغییرات در لاگ اختصاصی
Start-Transcript -Path “C:\Logs\AD-Changes.log”
3- ایجاد Snapshot از AD قبل از حذف انبوه کاربران
اگر از سرور مجازی استفاده میکنید، با ابزار Hyper-V یا VMware Snapshot بگیرید.
4- تأیید دوباره در حذفهای دستهای
همیشه از پارامتر -WhatIf برای تست دستور قبل از اجرای واقعی استفاده کنید:
Remove-ADUser -Identity “testuser” -WhatIf
5- تغییر رمز حسابهای سیستمی به جای حذف
اگر حساب متعلق به سرویسهاست، بهجای حذف، آن را Disable کنید:
Disable-ADAccount -Identity “sqlservice”
این نکات در سازمانهایی با چندین مدیر شبکه یا DevOps بسیار حیاتی هستند و از ایجاد خلل در سرویسهای تولیدی جلوگیری میکنند.
اسکریپت خودکار برای پاکسازی گروهها و کاربران غیرفعال
برای نگهداری منظم Active Directory، میتوانید فرآیند حذف را بهصورت خودکار برنامهریزی کنید.
نمونه اسکریپت زیر کاربران غیرفعال بیش از ۹۰ روز را شناسایی و حذف میکند:
$DateLimit = (Get-Date).AddDays(-90)
$InactiveUsers = Get-ADUser -Filter {LastLogonDate -lt $DateLimit -and Enabled -eq $false}
foreach ($User in $InactiveUsers) {
Remove-ADUser -Identity $User.SamAccountName -Confirm:$false
}
همچنین گروههایی که بیش از ۶ ماه بدون عضو ماندهاند را میتوان بهطور خودکار حذف کرد:
$Groups = Get-ADGroup -Filter *
foreach ($G in $Groups) {
if ((Get-ADGroupMember $G -ErrorAction SilentlyContinue).Count -eq 0) {
Remove-ADGroup -Identity $G -Confirm:$false
}
}
برای اجرای زمانبندی شده، کافی است اسکریپت را در Task Scheduler با تریگر هفتگی قرار دهید تا بهصورت خودکار پاکسازی انجام شود.
گزارشگیری از عملیات حذف برای ممیزی (Audit)
در هر سازمان حرفهای، ردیابی عملیات مدیریتی اهمیت بالایی دارد.
PowerShell این امکان را میدهد که تمام حذفها را در قالب فایل CSV یا TXT ذخیره کنید:
$Log = @()
$Users = Get-ADUser -Filter * -SearchBase “OU=Temp,DC=aradcloud,DC=local”
foreach ($U in $Users) {
$Log += [PSCustomObject]@{User=$U.SamAccountName; Action=”Deleted”; Date=(Get-Date)}
Remove-ADUser -Identity $U.SamAccountName -Confirm:$false
}
$Log | Export-Csv “C:\Logs\UserDeletion.csv” -NoTypeInformation
به این ترتیب میتوانید هر زمان بخواهید، گزارشی دقیق از کاربران حذف شده، تاریخ، و مدیر اجرا کننده داشته باشید.
این روش در انطباق با استانداردهای امنیت اطلاعات (ISO 27001) و ممیزی داخلی (Internal Audit) کاربردی است.
نکات عملی برای زیرساخت های ابری (Cloud AD)
در زیرساخت های ابری مانند Azure AD یا AradCloud Directory Service، رفتار PowerShell مشابه ولی با تفاوتهای کوچک است.
در این محیطها، باید از AzureAD Module استفاده کنید:
Install-Module AzureAD
Connect-AzureAD
Remove-AzureADUser -ObjectId user@aradcloud.ir
در Azure AD، حذف کاربر به معنی انتقال او به Soft Delete Pool است که تا ۳۰ روز قابل بازیابی میباشد.
بنابراین قبل از حذف دائمی از Azure Portal یا دستور زیر استفاده کنید:
Remove-AzureADUser -ObjectId user@aradcloud.ir -RemoveFromRecycleBin
این تفاوتها باعث میشود که فرآیند حذف در محیطهای ابری هم امنتر و هم برگشت پذیرتر از محیطهای کلاسیک دامین باشد.
جمعبندی
در این مقاله یاد گرفتید چگونه با استفاده از PowerShell بهصورت حرفهای و ایمن، عملیات حذف کاربران و گروهها را انجام دهید.
از حذف سادهی اعضای یک گروه تا پاکسازی خودکار کاربران غیرفعال و گروههای بدون عضو، تمام مراحل با اسکریپت ها و دستورات عملی پوشش داده شد. علاوهبر آن، اهمیت امنیت، ثبت لاگ، و قابلیت بازیابی کاربران حذفشده بررسی شد.
بهکارگیری این روشها نه تنها کار مدیران سیستم را سادهتر میکند، بلکه انسجام ساختار Active Directory را حفظ و از بروز خطاهای انسانی جلوگیری مینماید.
سوالات متداول
1- چگونه میتوانم حذف کاربران را شبیه سازی کنم بدون اینکه واقعاً حذف شوند؟
با استفاده از پارامتر -WhatIf، PowerShell فقط شبیه سازی انجام میدهد و هیچ کاربری حذف نمیشود.
2- آیا حذف گروه باعث حذف اعضای آن هم میشود؟
خیر، کاربران فقط از گروه جدا میشوند و حسابشان حذف نمیگردد.
3- آیا میتوان حذف کاربران را زمانبندی کرد؟
بله، با Task Scheduler یا Azure Automation میتوانید اسکریپت ها را در بازههای زمانی دلخواه اجرا کنید.
4- آیا حذف یوزر در پاورشل نیاز به ادمین دارد؟
بله، حداقل سطح دسترسی Domain Admin یا Account Operator لازم است.
5- چگونه میتوان کاربر حذف شده را بازگرداند؟
با استفاده از دستور Restore-ADObject در صورتی که Recycle Bin فعال باشد.


