כיצד לקבל רשימה של מנהלי מערכת מקומיים במחשבים?
במאמר זה, נבחן כיצד לקבל רשימה של משתמשים וקבוצות בעלי זכויות מנהל מערכת מקומיות בתחנות עבודה ובשרתים של Windows ברשת שלך.
איתור מנהלי מערכת מקומיים במחשב המקומי
ב- Windows, באפשרותך להשתמש ביישום ה- Snap-in 'ניהול מחשב' (
compmgmt.msc) כדי להציג, להוסיף או להסיר משתמשים בקבוצה Administrators המקומית. הרחב את ניהול המחשב > משתמשים מקומיים וקבוצות > קבוצות. לאחר מכן בחר את הקבוצה Administrators.
כברירת מחדל, כאשר מחשב Windows מצורף לתחום של Active Directory, זכויות מנהל מוענקות למשתמשי מנהל מערכת מקומיים ולקבוצת האבטחה Domain Admins.
כל שאר המשתמשים או הקבוצות מתווספים לקבוצה Administrators בנפרד (באופן ידני, באמצעות מדיניות קבוצתית, קבצי Script וכו').
באפשרותך להשתמש ב- cmdlet Get-LocalGroupMember מהמודול המוכלל Microsoft.PowerShell.LocalAccounts כדי לפרט את החברים בקבוצה Administrators המקומית:
Get-LocalGroupMember -Group "Administrators"שים לב שהפרמטר Principal מכיל את המקור של משתמש/קבוצה זה, שיכול להיות התחום Local, Active Directory או Azure AD.
כך תוכל לפרט רק את המשתמשים המקומיים בעלי הרשאות מנהל מערכת:
Get-LocalGroupMember Administrators | Where-Object { (Get-LocalUser $_.SID -ErrorAction SilentlyContinue).Enabled }ניתן לסנן את הרשימה כך שתכלול רק משתמשי AD:
Get-LocalGroupMember Administrators | Where-Object {$_.PrincipalSource -eq "ActiveDirectory"} | select PrincipalSource,class,name,SIDאם מודול Active Directory for Windows PowerShell מחבילת RSAT מותקן במחשב שלך, באפשרותך לקבל מידע נוסף אודות משתמשי AD או קבוצות לפי ה- SID שלהם.
בדוגמה זו, קובץ ה-script מוצא את החברים בכל קבוצות Active Directory שהם מנהלי מערכת מקומיים במחשב זה (ה- cmdlet Get-ADGroupMember משמש לקבלת רשימת המשתמשים של קבוצת AD). לאחר מכן Get-ADUser משמש כדי לקבל את SamAccountName ואת מצב החשבון
Enabled = True/False$admins=Get-LocalGroupMember Administrators | Where-Object {$_.PrincipalSource -eq "ActiveDirectory"}
Foreach ($admin in $admins)
{
If ($admin.objectclass -eq "User") {get-aduser $admin.sid|select SamAccountName,enabled }
If ($admin.objectclass -eq "Group") {Get-ADGroupMember $admin.sid | foreach { Get-ADUser $_ |Select-Object SamAccountName,enabled }}
}באופן דומה, באפשרותך לקבל תכונות משתמש אחרות מ- Active Directory.
קבל חבר בקבוצה 'מנהלי מערכת מקומיים' ממחשב מרוחק
הדוגמה לעיל מקבלת את רשימת המשתמשים בעלי זכויות מנהל במחשב המקומי. עכשיו בואו נסתכל על איך לקבל את החברים של קבוצת Administrators המקומית ממחשב Windows מרוחק.
כדי להפעיל פקודות במחשבים מרוחקים, עליך להגדיר את PowerShell Remoting ולפתוח את יציאת חומת האש TCP 5985. באפשרותך להפוך WinRM (PSRemoting) לזמין ולקבוע את תצורתו באמצעות GPO ולאחר מכן לשנות את הגדרות המדיניות הקבוצתית של חומת האש של Windows Defender כדי לפתוח יציאה נוספת.
השתמש ב- cmdlet Invoke-Command PowerShell כדי להפעיל פקודה במחשב מרוחק. כדי לפרט את מנהלי המערכת במחשב המרוחק בשם wsk-m2211, השתמש בפקודה הבאה:
Invoke-Command -ComputerName wsk-m2211 -ScriptBlock {Get-LocalGroupMember -Name 'Administrators'|select Name,ObjectClass,PrincipalSource|ft}עכשיו בואו נראה כיצד לקבל רשימה של מנהלי מערכת ממחשבים מרובים. מטעמי נוחות, לא נכלול את הקבוצה Domain Admins בתוצאות:
$results = Invoke-Command wsk-m2211,srv-sql01,srv-rds02 -ScriptBlock {Get-LocalGroupMember -Name 'Administrators'|where {$_.name -notlike "*Domain Admins*"}|select Name,ObjectClass,PrincipalSource}
$results | Select-Object PSComputerName,Name,ObjectClass,PrincipalSourceבאפשרותך לא לכלול את מנהל המערכת המובנה או חשבונות אחרים בתוצאות.
השתמש בפקודה Export-CSV כדי לייצא את רשימת המשתמשים והקבוצות המתקבלת לקובץ CSV:
$results | Export-CSV "C:\PS\admins.CSV" -NoTypeInformation -Encoding UTF8באפשרותך לבצע שאילתה על מחשבים או שרתים מרובים מתחום בו-זמנית. בדוגמה זו, ברצוני לקבל רשימה של מנהלי מערכת בכל מארחי Windows Server ב- AD. השתמש ב- cmdlet Get-ADComputer כדי לפרט מחשבי Windows Server זמינים ב- Active Directory:
$computers = (Get-ADComputer -Filter 'operatingsystem -like "*Windows server*" -and enabled -eq "true"').Nameלאחר מכן, קבל את רשימת חברי קבוצת Administrators המקומיים בכל מארח:
$results = Invoke-Command -ComputerName $computers -ScriptBlock {Get-LocalGroupMember -Name 'Administrators'|where {$_.name -notlike "*Domain Admins*"}|select Name,ObjectClass,PrincipalSource} -ErrorAction SilentlyContinueהסרת משתמשים מהקבוצה Local Administrators
חשוב ביותר למנהלי מערכת ארגוניים לעקוב אחר החברים בקבוצה Administrators המקומית במחשבי תחום. הרעיון המרכזי הוא למזער את מספר המשתמשים בעלי הרשאות ניהול מקומיות.
מומלץ להשתמש בהעדפות מדיניות קבוצתית או בקבוצות מוגבלות כדי להוסיף משתמשים באופן אוטומטי לקבוצת מנהלי המערכת המקומית. GPO אלה יוסיפו באופן אוטומטי את המשתמשים הדרושים לקבוצה Administrators ולא יכללו את כל המשתמשים האחרים (שנוספים באופן ידני).
באפשרותך להסיר משתמש באופן ידני מקבוצת המנהלים המקומית באמצעות הפקודה:
Remove-LocalGroupMember -Group Administrators -Member usernameבאפשרותך להסיר משתמש מקבוצה במחשב מרוחק:
Invoke-Command -ComputerName wsk-m2211 -ScriptBlock {Remove-LocalGroupMember -Group Administrators -Member username}עם זאת, יש שיטה מתקדמת יותר שבה אתה יכול להשתמש. נניח שיצרת רשימה של משתמשים בעלי הרשאות ניהול במחשבים ושמרת אותה במשתנה $results.
$results = Invoke-Command wsk-m2211,wsk-m2233 -ScriptBlock {Get-LocalGroupMember -Name 'Administrators'|where {$_.name -notlike “*Domain Admins*”}|select Name,ObjectClass,PrincipalSource,SID}לאחר מכן הצג רשימה של משתמשים ומחשבים בצורה של רשימת Out-GridView:
$principals_to_remove=$results | Out-GridView -Title "Select principal to remove from local admins" -OutputMode Multipleהדבר הבא שעליך לעשות הוא לבחור את המשתמשים שברצונך להסיר מהקבוצה Administrators (לחץ והחזק את מקש CTRL לחוץ כדי לבחור שורות מרובות בטבלה) ולהפעיל את הקוד:
foreach ($principal in $principals_to_remove)
{
Invoke-Command $principal.PSComputerName -ScriptBlock {Remove-LocalGroupMember -Group Administrators -Member $using:principal.name}
}הערה. ה
$using:principal.nameמבנה מאפשר להעביר ערך משתנה מקומי מהמחשב להפעלת PSRemoting מרוחקת.
פעולה זו תסיר את המשתמשים שבחרת מהקבוצה Administrators המקומית במחשבים המרוחקים.




