رفتن به محتوا
مدیریت سرور

مشاهده یوزر و گروه در پاورشل (PowerShell)

مشاهده یوزر در پاورشل به مدیر سیستم کمک می‌کند حساب‌ها و دسترسی‌های ویندوز را بررسی کند. در این راهنما، کاربران محلی، گروه‌ها و اعضای آن‌ها را با PowerShell مشاهده می‌کنیم. سپس فیلتر، گزارش‌گیری و بررسی حساب‌های دامنه را مرور می‌کنیم. فرمان‌های محلی و Active Directory کاربرد یکسانی ندارند؛…

11 دقیقه مطالعهبلاگ ابر آراد
مجله ابر آرادINSIGHTS / مدیریت سرور

مشاهده یوزر در پاورشل به مدیر سیستم کمک می‌کند حساب‌ها و دسترسی‌های ویندوز را بررسی کند. در این راهنما، کاربران محلی، گروه‌ها و اعضای آن‌ها را با PowerShell مشاهده می‌کنیم. سپس فیلتر، گزارش‌گیری و بررسی حساب‌های دامنه را مرور می‌کنیم. فرمان‌های محلی و Active Directory کاربرد یکسانی ندارند؛ روش مناسب را براساس نوع حساب انتخاب کنید.

یکی از ابتدایی‌ترین و درعین‌حال پراستفاده‌ترین کاربردهای PowerShell، مشاهده‌ی لیست کاربران و گروه‌ها در سیستم است. در این مقاله از مجموعه‌ی آموزش‌های ویندوز و سیستم‌ عامل بلاگ ابرآراد، یاد می‌گیریم چگونه با چند دستور ساده، تمام حساب‌های کاربری و گروه‌های موجود در سیستم خود را مشاهده کنیم، از فیلترهای مختلف برای جستجو استفاده کنیم و حتی نتایج را در قالب گزارش خروجی بگیریم.

مشاهده یوزر در پاورشل؛ کاربرد و پیش‌نیازها

هر سیستم‌ عامل ویندوز، به‌ ویژه در محیط‌های سازمانی و سرور، دارای مجموعه‌ای از حساب‌ های کاربری محلی (Local) و دامنه‌ ای (Domain) است. این حساب‌ها می‌توانند کاربران انسانی یا سرویس‌های سیستمی باشند.
در طول زمان، افزودن یا حذف کاربران متعدد ممکن است باعث ایجاد ابهام یا حتی خطرات امنیتی شود، به‌ ویژه اگر برخی حساب‌ ها بلااستفاده بمانند. در چنین شرایطی، آگاهی از وضعیت کاربران و گروه‌ ها ضروری است.

برای فهرست حساب‌های محلی از Get-LocalUser و برای گروه‌های محلی از Get-LocalGroup استفاده کنید. این فرمان‌ها خروجی آبجکت‌محور دارند و به فیلتر و گزارش‌گیری کمک می‌کنند. ماژول LocalAccounts در PowerShell سی‌ودوبیتی روی سیستم شصت‌وچهاربیتی در دسترس نیست؛ پیش از اجرای مثال‌ها محیط را بررسی کنید.

معرفی دستور Get-LocalUser، مشاهده کاربران محلی در ویندوز

دستور Get-LocalUser یکی از مهم‌ترین دستورات پایه‌ای PowerShell برای مشاهده‌ی کاربران محلی است.
این دستور اطلاعات کاملی از کاربران فعلی سیستم مانند نام، وضعیت فعال/غیرفعال، تاریخ ساخت، و توضیحات حساب ارائه می‌دهد.

برای اجرای اکثر این دستورات و جلوگیری از خطای Access Denied، حتماً پاورشل را به‌صورت Run as Administrator باز کنید

برای مشاهده‌ی همه‌ی کاربران محلی، کافی است دستور زیر را اجرا کنید:

Get-LocalUser

خروجی این دستور شامل فهرستی از تمام حساب‌ های کاربری محلی در سیستم شماست. هر ردیف شامل اطلاعاتی مانند:

  • Name (نام کاربر)
  • Enabled (فعال یا غیرفعال بودن حساب)
  • Description (توضیحات یا نقش حساب)
  • LastLogon (آخرین ورود کاربر به سیستم)

نکته: اگر می‌خواهید فقط نام کاربران فعال را ببینید، از فیلتر زیر استفاده کنید:

Get-LocalUser | Where-Object {$_.Enabled -eq $true}

این فیلتر فقط کاربرانی را نمایش می‌دهد که حسابشان فعال است، روشی مفید برای مدیران امنیتی جهت شناسایی کاربران بلااستفاده یا غیرفعال.

مشاهده جزئیات یک کاربر خاص با Get-LocalUser

اگر بخواهید اطلاعات دقیق یک کاربر خاص را مشاهده کنید (برای مثال کاربر ali)، می‌توانید از پارامتر -Name استفاده کنید:

Get-LocalUser -Name “ali”

این دستور اطلاعاتی مانند وضعیت فعال بودن، تاریخ ساخت حساب و توضیحات مرتبط با آن کاربر را نمایش می‌دهد.
در محیط‌های بزرگ، مشاهده جزئیات کاربران خاص (مثلاً حساب‌ های سرویس) به مدیر کمک می‌کند تا از نحوه‌ی پیکربندی سیستم اطمینان حاصل کند.

برای مشاهده‌ی فقط فیلدهای خاص از خروجی، می‌توانید از Select-Object استفاده کنید:

Get-LocalUser -Name “ali” | Select-Object Name, Enabled, LastLogon

مشاهده اعضای یک گروه با دستور Get-LocalGroupMember

در ویندوز، هر گروه (مثل Administrators، Users یا Remote Desktop Users) شامل مجموعه‌ای از حساب‌ های کاربری با دسترسی‌های مشخص است.
برای مشاهده‌ی اعضای یک گروه خاص از دستور زیر استفاده می‌شود:

Get-LocalGroupMember -Name “Users”

خروجی این دستور فهرستی از تمام اعضای گروه “Users” را نمایش می‌دهد.
هر عضو ممکن است یکی از موارد زیر باشد:

  • حساب محلی (Local Account)
  • حساب دامنه‌ ای (Domain Account)
  • حساب سیستمی (System Account)

به‌عنوان مثال اگر بخواهید بدانید چه کسانی دسترسی مدیریتی دارند، می‌توانید از دستور زیر استفاده کنید:

Get-LocalGroupMember -Name “Administrators”

نتیجه شامل تمام حساب‌هایی است که مجاز به اعمال تغییرات سیستمی هستند، از جمله حساب Administrator و سایر کاربران با دسترسی ادمین.

مشاهده فهرست کامل گروه‌ های محلی با Get-LocalGroup

اگر بخواهید تمام گروه‌ های تعریف‌ شده در سیستم را مشاهده کنید (مثل Users، Guests، Backup Operators و غیره)، کافی است دستور زیر را در PowerShell وارد نمایید:

Get-LocalGroup

این دستور لیست کامل گروه‌ها را همراه با توضیح و زمان ایجاد آن‌ها نمایش می‌دهد.
در سازمان‌های بزرگ، مشاهده‌ی لیست گروه‌ ها برای بررسی دسترسی‌ها و مدیریت نقش‌ ها بسیار حیاتی است.
می‌توانید خروجی را به‌صورت جدولی زیبا قالب‌بندی کنید:

Get-LocalGroup | Format-Table Name, Description, PrincipalSource

توضیح پارامترها:

  • Name: نام گروه
  • Description: هدف یا توضیح گروه
  • PrincipalSource: منبع گروه (محلی یا دامنه‌ ای)

مشاهده یک گروه خاص و اعضای آن

برای مشاهده‌ی فقط یک گروه مشخص (مثلاً گروه HelpDesk) از دستور زیر استفاده می‌کنیم:

Get-LocalGroup -Name “HelpDesk”

و برای مشاهده‌ی اعضای همان گروه:

Get-LocalGroupMember -Name “HelpDesk”

در محیط‌ های چندکاربره، این ترکیب دو دستور به مدیران کمک می‌کند تا به‌سرعت تشخیص دهند چه حساب‌ هایی به گروه‌ های خاص اضافه شده‌اند، مثلاً در تیم پشتیبانی، فنی یا مدیریت شبکه.

فیلتر کردن خروجی و ایجاد گزارش از کاربران و گروه‌ ها

یکی از مزایای بزرگ PowerShell نسبت به ابزارهای گرافیکی، امکان ساخت گزارش‌ های سفارشی است.
برای مثال، فرض کنید می‌خواهید فهرست تمام کاربران فعال سیستم را در قالب فایل CSV ذخیره کنید:

Get-LocalUser | Where-Object {$_.Enabled -eq $true} | Export-Csv “C:\Reports\ActiveUsers.csv” -NoTypeInformation

یا فهرست اعضای گروه Administrators را به صورت فایل متنی دریافت کنید:

Get-LocalGroupMember -Name “Administrators” | Out-File “C:\Reports\AdminGroup.txt”

این گزارش‌ ها در سازمان‌ ها برای ممیزی (Audit) و بررسی‌های امنیتی بسیار ارزشمند هستند و می‌توانند به‌صورت خودکار با Task Scheduler اجرا شوند تا همیشه به‌روز بمانند.

استفاده از فیلترها و پارامترهای پیشرفته برای جستجوی سریع‌تر

PowerShell به‌صورت ذاتی از فیلترهای قدرتمند پشتیبانی می‌کند. برای نمونه:

  • مشاهده‌ی کاربران ساخته‌ شده بعد از تاریخ خاص:

Get-LocalUser | Where-Object {$_.LastLogon -gt (Get-Date).AddDays(-30)}

  • جستجوی گروه‌ هایی که در نامشان عبارت خاصی وجود دارد:

Get-LocalGroup | Where-Object {$_.Name -like “*Admin*”}

  • شمارش تعداد کاربران فعال:

(Get-LocalUser | Where-Object {$_.Enabled -eq $true}).Count

این فیلترها در محیط‌های بزرگ کمک می‌کنند بدون نیاز به خروجی کامل، به‌ سرعت داده‌ ی مورد نظر را پیدا کنید.

مزایای استفاده از PowerShell برای مشاهده کاربران و گروه‌ ها

در مقایسه با روش‌های سنتی مثل Control Panel یا Computer Management، پاورشل مزایای متعددی دارد:

1- سرعت و خودکارسازی: اجرای ده‌ها بررسی تنها با چند خط دستور

2- امکان اسکریپت‌ نویسی و زمان‌بندی: ساخت گزارش‌های دوره‌ای

3- امنیت بالا: قابلیت مشاهده بدون نیاز به رابط گرافیکی یا Remote Desktop

4- سازگاری با سرورها و ماشین‌ های مجازی: به‌ویژه برای ادمین‌های AradCloud

5- انعطاف در خروجی‌ها: امکان ذخیره، فیلتر، و تجزیه داده‌ ها با فرمت‌های مختلف (CSV, TXT, JSON)

در این بخش از آموزش، یاد گرفتیم چگونه کاربران و گروه‌ها را در محیط PowerShell مشاهده کنیم.
دستورات زیر به‌عنوان پایه‌ای‌ترین ابزارها معرفی شدند:

  • مشاهده‌ی کاربران محلی: Get-LocalUser
  • مشاهده‌ی یک کاربر خاص: Get-LocalUser -Name “UserName”
  • مشاهده‌ی گروه‌ ها: Get-LocalGroup
  • مشاهده‌ی اعضای یک گروه: Get-LocalGroupMember -Name “GroupName”
از مطالعه تا انتخابسرویس مناسب پروژه‌تان را بررسی کنید.

محصولات ابر آراد را ببینید و مشخصات هر سرویس را مقایسه کنید.

بررسی محصولات

مشاهده کاربران از راه دور، خطاها، امنیت، و جمع‌بندی نهایی

مشاهده کاربران و گروه‌ها از راه دور (Remote Access)

در محیط‌های سازمانی یا شبکه‌ های ابری، معمولاً لازم است اطلاعات کاربران و گروه‌ ها را از یک سیستم دیگر به‌صورت ریموت مشاهده کنیم. PowerShell این قابلیت را از طریق دستور Get-WmiObject و Invoke-Command فراهم کرده است.

روش اول: استفاده از WMI (Windows Management Instrumentation)

برای مشاهده کاربران محلی از سیستم دیگر (مثلاً نام سیستم Workstation1)، دستور زیر را وارد کنید:

Get-CimInstance -ComputerName Workstation1 -ClassName Win32_UserAccount -Filter “LocalAccount=True”

این دستور لیست تمام کاربران محلی موجود روی سیستم مورد نظر را نمایش می‌دهد، بدون اینکه نیاز باشد مستقیماً وارد آن شوید.
در صورتی که نام کاربری و رمز عبور مدیر آن سیستم را دارید، می‌توانید از پارامتر -Credential نیز استفاده کنید:

$cred = Get-Credential

Get-WmiObject -ComputerName Workstation1 -Class Win32_UserAccount -Credential $cred

این روش زمانی بسیار کاربردی است که شما به چندین سیستم متصل هستید و می‌خواهید وضعیت کاربران را به‌صورت متمرکز بررسی کنید.

روش دوم: استفاده از Invoke-Command

اگر سرویس PowerShell Remoting در سیستم مقصد فعال باشد، می‌توانید دستور مشاهده کاربران را به‌صورت مستقیم اجرا کنید:

Invoke-Command -ComputerName “Server01” -ScriptBlock { Get-LocalUser }

یا برای مشاهده اعضای گروه Administrators:

Invoke-Command -ComputerName “Server01” -ScriptBlock { Get-LocalGroupMember -Name “Administrators” }

با این روش می‌توانید ده‌ها سرور را در چند ثانیه بررسی کنید، بدون نیاز به ورود فیزیکی به هرکدام.
در زیرساخت‌ های ابری مانند AradCloud نیز همین مکانیزم قابل پیاده‌ سازی است.

رفع خطاهای متداول در مشاهده کاربران و گروه‌ ها

گاهی در هنگام اجرای دستورات PowerShell خطاهایی رخ می‌دهد.
در جدول زیر متداول‌ترین خطاها و راه‌حل‌های آن‌ها آورده شده است:

نوع خطاعلت احتمالیراه‌حل پیشنهادی
Access Deniedاجرای PowerShell بدون دسترسی ادمینPowerShell را با Run as Administrator اجرا کنید
The term ‘Get-LocalUser’ is not recognizedماژول LocalAccounts در سیستم نصب نیستدستور Import-Module Microsoft.PowerShell.LocalAccounts را اجرا کنید
RPC Server Unavailableارتباط شبکه‌ای با سیستم مقصد قطع استاز اتصال شبکه و فعال بودن PowerShell Remoting اطمینان حاصل کنید
Access is denied (Remote)کاربر فعلی مجوز دسترسی به سیستم مقصد را ندارداز دستور Get-Credential برای ورود با حساب مدیر استفاده کنید
Parameter not foundاشتباه در نوشتن پارامتراز دستور Get-Help برای بررسی صحیح دستور استفاده کنید

همیشه قبل از اجرای دستورات از دستور زیر برای بررسی پشتیبانی دستور در نسخه فعلی PowerShell استفاده کنید:

Get-Command Get-LocalUser

نکات امنیتی در مدیریت کاربران و گروه‌ ها با PowerShell

PowerShell ابزاری بسیار قدرتمند است، و این قدرت به‌ همراه مسئولیت امنیتی زیادی می‌آید. برای جلوگیری از خطرات احتمالی، نکات زیر را در نظر بگیرید:

1- همیشه از حساب Administrator اصلی استفاده نکنید.
برای مدیریت روزانه، از حساب‌های دارای مجوز محدود استفاده کنید.

2- خروجی اطلاعات کاربران را رمزنگاری کنید.
اگر قصد ذخیره گزارش دارید، با استفاده از پارامتر -AsSecureString رمزگذاری کنید.

3- سطح دسترسی اسکریپت‌ ها را محدود کنید.
اجرای اسکریپت‌ های ناشناخته می‌تواند خطرناک باشد.
از دستور زیر برای تغییر سیاست اجرا استفاده کنید:

Set-ExecutionPolicy RemoteSigned

4- تغییرات مهم را لاگ‌گیری کنید.
با دستور زیر می‌توانید همه دستورات اجرا شده را در فایل لاگ ذخیره کنید:

Start-Transcript -Path “C:\Logs\UserActivity.log”

5- دسترسی ریموت را فقط در صورت نیاز فعال کنید.
سرویس PowerShell Remoting را تنها در شبکه‌ های امن و داخلی روشن کنید:

Enable-PSRemoting -Force

ایجاد گزارش کامل از کاربران و گروه‌ ها

PowerShell می‌تواند داده‌ ها را در قالب‌های مختلف (CSV، TXT، JSON) ذخیره کند.
برای ساخت گزارش کامل کاربران و گروه‌ ها از دستورات زیر استفاده کنید:

گزارش کاربران

Get-LocalUser | Select-Object Name, Enabled, LastLogon | Export-Csv “C:\Reports\LocalUsers.csv” -NoTypeInformation

گزارش گروه‌ ها

Get-LocalGroup | Select-Object Name, Description | Export-Csv “C:\Reports\LocalGroups.csv” -NoTypeInformation

گزارش اعضای گروه ادمین

Get-LocalGroupMember -Name “Administrators” | Export-Csv “C:\Reports\AdminMembers.csv” -NoTypeInformation

سپس می‌توانید گزارش‌ها را با ابزارهایی مثل Excel یا Power BI برای تحلیل امنیتی و مدیریتی بررسی کنید.
در سازمان‌هایی مانند AradCloud که چندین سرور مجازی و ابری دارند، این روش برای ممیزی داخلی (Internal Audit) بسیار حیاتی است.

ساخت اسکریپت خودکار برای بررسی روزانه کاربران

می‌توانید با چند خط کد ساده، اسکریپتی طراحی کنید که هر روز کاربران جدید، غیرفعال یا اعضای جدید گروه‌ها را شناسایی کند و گزارش دهد:

$today = Get-Date -Format “yyyy-MM-dd”

$users = Get-LocalUser | Where-Object {$_.Enabled -eq $true}

$groups = Get-LocalGroup

$report = [PSCustomObject]@{

    Date = $today

    ActiveUsers = $users.Count

    TotalGroups = $groups.Count

}

$report | Export-Csv “C:\Reports\DailyUserReport.csv” -Append -NoTypeInformation

این فایل CSV را می‌توانید به‌صورت روزانه در Task Scheduler اجرا کنید تا همیشه وضعیت کاربران سیستم خود را بدانید.

مشاهده کاربران دامنه‌ ای (Domain Users) در Active Directory

در سرورهای سازمانی (Domain Controllers)، کاربران و گروه‌ ها دیگر محلی نیستند بلکه در Active Directory ذخیره می‌شوند.
برای مشاهده آن‌ها از دستورهای زیر استفاده می‌شود (پیش‌نیاز: نصب ماژول Active Directory):

Import-Module ActiveDirectory

Get-ADUser -Filter * | Select-Object Name, Enabled, Department

برای مشاهده‌ی گروه‌ ها:

Get-ADGroup -Filter * | Select-Object Name, GroupCategory, GroupScope

و برای مشاهده اعضای یک گروه خاص:

Get-ADGroupMember -Identity “IT-Admins”

این دستورات در سازمان‌هایی که از زیرساخت دامنه استفاده می‌کنند (مثل بانک‌ها، مراکز داده یا محیط‌های ابری ابرآراد) ضروری هستند

برای استفاده از دستورات Get-ADUser، باید ویژگی RSAT (Remote Server Administration Tools) روی ویندوز نصب باشد. بدون RSAT، حتی با Import-Module هم دستوری کار نمی‌کند (مگر روی خود ویندوز سرور).

تفاوت بین کاربران محلی و دامنه‌ای

ویژگیکاربر محلی (Local)کاربر دامنه‌ای (Domain)
محل ذخیره‌سازیسیستم محلیکنترلر دامنه (Active Directory)
مدیریتفقط در همان سیستماز طریق سرور مرکزی
امنیتمحدود به دستگاهسیاست‌های امنیتی سازمانی
ابزار مدیریتPowerShell محلی (Get-LocalUser)PowerShell AD (Get-ADUser)
کاربردلپ‌تاپ‌ها و کامپیوترهای شخصیسازمان‌ها و سرورها

در محیط‌های ابری مانند AradCloud، معمولاً از ساختار دامنه‌ای برای یکپارچگی و کنترل مرکزی استفاده می‌شود.

جمع‌بندی

در این آموزش از سری مقالات آموزش سیستم‌ عامل بلاگ ابرآراد، یاد گرفتید چگونه با استفاده از PowerShell:

  • کاربران و گروه‌ ها را مشاهده کنید
  • اعضای گروه‌ ها را بررسی کنید
  • از راه دور کاربران را کنترل نمایید
  • گزارش‌های تحلیلی تولید کنید
  • و با نکات امنیتی و خطاهای متداول آشنا شوید

PowerShell ابزاری است که اگر آن را بیاموزید، مدیریت ده‌ها سرور یا سیستم به‌ سادگی چند خط کد خواهد بود.
برای مدیران فناوری اطلاعات و تیم‌های زیرساخت ابری، تسلط بر این ابزار، گامی بزرگ به‌ سوی مدیریت خودکار (Automation) و امنیت متمرکز است.

سوالات متداول

1- آیا می‌توان کاربران را بدون ورود به سیستم مقصد مشاهده کرد؟

بله، با استفاده از Get-WmiObject یا Invoke-Command و داشتن مجوز ادمین.

2- دستور Get-LocalUser در همه نسخه‌های ویندوز کار می‌کند؟

در ویندوز ۱۰ و بالاتر با PowerShell 5.1 به بعد پشتیبانی می‌شود.

3- اگر PowerShell خطای دسترسی بدهد چه باید کرد؟

با اجرای PowerShell در حالت Administrator یا استفاده از Get-Credential خطا برطرف می‌شود.

4- آیا می‌توان خروجی دستورات را به فایل اکسل منتقل کرد؟

بله، کافی است از Export-Csv استفاده کنید. فایل خروجی را می‌توانید با Excel باز کنید.

5- آیا مشاهده کاربران با پاورشل خطر امنیتی دارد؟

خیر، اگر صرفاً خواندن اطلاعات انجام شود و تغییری در سیستم ایجاد نگردد. با این حال باید مراقب افشای داده‌ های حساس باشید.

قدم بعدی شمابرای انتخاب سرویس، درباره نیاز پروژه صحبت کنیم.

از صفحه تماس ابر آراد، مسیر ارتباط با تیم را انتخاب کنید.

گفت‌وگو با تیم آراد
به انتهای این مقاله رسیدید. مسیر یادگیری را با مقاله‌های دیگر ادامه دهید.
گفت‌وگو درباره این مقاله

دیدگاه‌ها و پرسش‌های شما

تجربه یا پرسش خود را درباره موضوع مقاله با ما در میان بگذارید.

هنوز دیدگاهی ثبت نشده است؛ شما گفت‌وگو را شروع کنید.

دیدگاه خود را بنویسید

نشانی ایمیل شما نمایش داده نمی‌شود. فیلدهای ستاره‌دار الزامی هستند.