כשאתה עובד עם Windows, בסופו של דבר תצטרך לדעת אילו חשבונות משתמש מחוברים כרגע למחשב. מקומך מקל כי תוכל להשתמש ב- PowerShell כדי לקבל מידע על המשתמשים הנוכחיים במחשב מקומי או מרוחק.
האם יש לך סיסמאות פגומות ב- Active Directory שלך? גלה זאת באמצעות Specops Password Auditor Free.
במדריך זה, תלמד כמה דרכים להשתמש ב- PowerShell כדי לקבל את המשתמשים הנוכחיים במחשב. השיטות שתלמד כוללות פקודות יישומיות, מחלקות .NET ו- פקודות מסוימות של Windows Management Instrumentation (WMI).
האם אתה מוכן לגלות מי מחביא במחשב שלך? בוא נתחיל!
תנאי קדם
במדריך זה, הכי טוב תלמד על ידי עקומות הדוגמה. וכדי לעשות זאת, תצטרך מחשב שרץ על גרסה מודרנית של Windows, כגון Windows 10, Windows Server 2012 או מאוחר יותר.
במדריך זה ישמש מחשב הרץ על Windows Server 2019 בשם DC1.
למה להשתמש ב- PowerShell כדי לקבל את המשתמשים הנוכחיים המחוברים למחשב?
כניסה למערכת כמשתמש נוכחי על מחשב אכן ניתן לבצע גם בלעדיו של PowerShell. למעשה, מנהלי המערכת היו חייבים להשתמש בדרכים אחרות כבר לפני שהתקנו את PowerShell, נכון? אם כך, למה להשתמש ב-PowerShell?
ביצוע אותה משימה באמצעות PowerShell מועיל מכיוון שניתן לטפל בתוצאות כאובייקטים שניתן לעבוד איתם. לדוגמה, אם אתה מריץ סקריפט שמבקש את פרטי המשתמש, PowerShell יכול למלא אוטומטית את שם המשתמש, ואתה רק צריך להקליד את הסיסמה באופן ידני.
דוגמה נוספת מהחיים האמיתיים היא ייצוא רשימת המשתמשים המחוברים כעת לשרת לקובץ. ניתן להשתמש ב-PowerShell כדי לקבל את המשתמשים הנוכחיים ולייצא את התוצאה לקבצי CSV, HTML או XML. לאחר מכן, תהליכי אוטומציה שונים יכולים להשתמש בפלט זה.
יכול להיות אלפי סיבות להשתמש ב-PowerShell כדי לקבל את המשתמשים הנוכחיים, אך המטרה הסופית תלויה בדרישות שלך. והמדריך הזה ילמד אותך את הדרכים השונות להשיג את המטרה הזו.
שאילתת ה- Win32_ComputerSystem Class
שני ה-cmdlets הטבעיים של PowerShell הנקראים Get-WMIObject
ו־Get-CimInstance
. מאפשרים לך לשאול מידע, כולל משתמש המחובר כעת, באמצעות כיתות Windows Management Instrumentation (WMI) במחשב מקומי או מרוחק.
Get-WMIObject
הוא ה-cmdlet הישן (המופקע) וזמין רק עד ל- Windows PowerShell 5.1. להפך,Get-CIMInstance
הוא ה-cmdlet החדש והבטוח יותר וזמין עד ל־גרסאות ה- PowerShell האחרונות.
למידע נוסף, בקר ב־Get-CIMInstance Vs. Get-WMIObject: מה ההבחנה?
על מנת להשתמש ב-PowerShell כדי לקבל את המשתמש הנוכחי, הפעל את ה-cmdlet המתמקד ב-class Win32_ComputerSystem. ה-class Win32_ComputerSystem כולל מגוון מאפיינים, כולל את המאפיין Username
. כדי לעשות זאת, פתח חלון PowerShell והרץ את הפקודות למטה.
הערה: שאילתת ה-class Win32_ComputerSystem תחזיר רק את שם המשתמש של מי שמחובר ישירות למחשב (סשן בקונסול). אם המשתמש מחובר מרחוק (לדוג, רחוק דסקטופ), השם משתמש יהיה ריק.
שתי הפקודות מחזירות את אותו התוצאה, כפי שמוצג למטה. אם המשתמש הנוכחי הוא חשבון משתמש בדומיין, הפקודה תחזיר את הדומיין ושם המשתמש (domain\username
). אך לחשבון משתמש מקומי, הפלט יהיה מחשב\username
.

Get-WMIObject
ו־Get-CimInstance
ישנם פרמטר בשם-computerName
, אשר מקבל את שם המחשב לשאילתה. שימוש בפרמטר זה אומר שניתן לשאול את אותו המידע ממחשב מרוחק ברשת.
אך אם תרצה לקבל רק את שם המשתמש ללא הדומיין, פתרון הוא לפצל את הפלט באמצעות השיטה split()
. על מנת לעשות זאת, הפעל את הפקודה הבאה ב־PowerShell.
כתוצאה מכך, PowerShell מחזיר את חלק המשתמש בלבד, כמו בתמונת המסך למטה.

קריאת משתני סביבת Windows
דרך נוספת להשתמש ב- PowerShell כדי לקבל את המשתמש הנוכחי במחשב היא על ידי אחזור ערכים ממשתני הסביבה. משתני הסביבה מייצגים את נתוני מערכת ההפעלה, כולל שם המשתמש הנוכחי, בנוסף לשאר הערכים.
יש שלוש דרכים להתקשר עם משתני הסביבה. בכל דרך שתבחר, התוצאה תהיה זהה.
ה-Env PowerShell Drive
PowerShell מקבצת משתני סביבה ומפעילה אותם דרך "כונן" בשם "Env:". PSDrives הם מיקומים של נתונים שניתן לגשת אליהם כמו כונן במחשב (לדוגמה, C:), אך ניתן לגשת להם רק בתוך PowerShell.
ה- PowerShell יוצר באופן אוטומטי את הכונן Env:
ברגע שאתה פותח מפגש של PowerShell. ומכיוון ש- Env:
הוא כונן, תוכל לקבל את התוכן שלו על ידי הפעלת פקודת cmdlet של Get-ChildItem
, בדומה לכיצד תציין את תוכן הכונן או התיקייה של מערכת הקבצים.
שימוש בכונן Env: ב- PowerShell, קבל את המשתמש הנוכחי על ידי הרצת הפקודה שלמטה.
התמונה למטה מציגה את התוצאה הצפויה. כפי שתוכל לראות, הפקודה מחזירה את הפריט USERNAME
ואת ערך המתאים שלו, שהוא המשתמש שמחובר כעת.

כדי להחזיר רק את ערך השם משתמש, שנה את הפקודה כך שמופיע למטה והפעל אותה מחדש ב- PowerShell.
וכפי שתוכל לראות למטה, הפקודה מחזירה רק את ערך השם משתמש כמחרוזת.

המשתנה $env
בנוסף לגישה למשתני הסביבה כמו כונן PSDrive שמטפל בהם כקבצים בכונן, דרך נוספת היא לגשת לכונן Env כמשתנה. כלומר, תוכל להתייחס למשתני הסביבה באמצעות התחביר הבא.
בהתבסס על התחביר האמור, הרץ את הפקודה למטה בפוורשל כדי לקבל את המשתמש הנוכחי.
כפי שמוצג בתמונה למטה, הפקודה מחזירה את ערך שם המשתמש.

כיתת הסביבה של .NET
פוורשל היא שפת תכנות מונחית עצמים וסביבת פקודות. בעצם, כל מה שאתה עובד עליו בתוך פוורשל הוא אובייקט. כאשר אתה מריץ פקודה, הפלט הוא אובייקט. אם הכרת משתנה, המשתנה הוא אובייקט בעצמו. אתה מבין את הרעיון.
לאובייקטים אלו יש מבנה שמגדיר את סוג הנתונים שהם מייצגים, דומה לתבניות. ותבניות אלו נקראות כיתות .NET או פשוט כיתות.
כדי לקבל את המשתמש הנוכחי ב-PowerShell בקשר למשתני הסביבה, המחלקה הקשורה אליו היא מחלקת Environment. איך ניתן להשתמש במחלקת Environment כדי לקבל את המשתמש הנוכחי ב-PowerShell?
כמו במשתנה $env
, יש למחלקת Environment ישות בשם Username
, שערכה הוא שם המשתמש הנוכחי. כדי לקבל את ערך המאפיין שם המשתמש, הפעילו את הפקודה למטה ב-PowerShell.

בנוסף למאפיין Username
, למחלקת Environment יש גם שיטה לקבלת ערך של משתני סביבה. שם השיטה הוא GetEnvironmentVariable
.
כדי לקבל את המשתמש הנוכחי באמצעות שיטה זו, הפעילו את הפקודה למטה.

שימוש במחלקת .NET WindowsIdentity
המחלקה WindowsIdentity היא מחלקת .NET נוספת שניתן לקרוא ב-PowerShell כדי לקבל את המשתמש הנוכחי. למחלקה זו יש שיטה בשם GetCurrentName
, שמחזירה אובייקט המייצג את המשתמש הנוכחי ב-Windows.
כדי לקבל את פרטי המשתמש הנוכחי, הריצו את הפקודה למטה.
כפי שניתן לראות למטה, הפקודה מחזירה את פרופרטים של אובייקט המשתמש הנוכחי, כולל פרופרטי Name
. ערך הפרופרט Name
מתקבל בפורמט domain\user
.

כדי להחזיר רק את שם המשתמש, ערכו של הפקודה הקודמת לבחירה רק של פרופרטי Name
, והחלו את טכניקת חיתוך המחרוזת. כדי לעשות זאת, העתיקו את הפקודה למטה והריצו אותה ב-PowerShell.

באמצעות הפקודה whoami
פקודה נוספת נוחה שמאפשרת לך לקבל מהר את המשתמש הנוכחי היא פקודת whoami
. פקודה זו היא קובץ ניתן להרצה שניתן למצוא בתיקיית %WINDIR%\System32 תחת שם הקובץ whoami.exe
.
כדי לקבל את שם המשתמש הנוכחי, הריצו את הפקודה למטה.
הפקודה תחזיר אזור בפורמט domain username
, דוגמת התמונה למטה.

כדי לקבל את שם המשתמש ללא התחום, יש להחיל את טכניקת החלוקה למחרוזת שלמדת בקודם במדריך זה על ידי הרצת הפקודה הבאה.

פקודת whoami
יכולה גם להחזיר את שם המשתמש המלא (FQDN) המפורט באופן מלא של המשתמש הנוכחי ואת שם המשתמש הראשי (UPN). פלט פקודה זה עשוי להיות מועיל אם אתה מתכנן להריץ סקריפט שמביא את זהות המשתמש הנוכחית מעבר לשם המשתמש.
הרץ את הפקודה הבאה בפוורשל כדי לקבל את FQDN ו-UPN של המשתמש הנוכחי.

הערה: ערכי FQDN ו-UPN זמינים רק אם המשתמש המחובר נוכחי הוא משתמש בתחום. אם תנסה לקבל את הערכים הללו עבור משתמש מקומי, הפקודה תחזיר שגיאה, כפי שמוצג למטה.

שימוש בפקודת query
אם אתה מנהל מערכת או משתמש בתחום, יש סיכוי שהתחברת למחשב מרחוק באמצעות פרוטוקול שולחן עבודה מרחוק (RDP) לפחות פעם אחת, אולי כדי לנהל משאבים או להשתמש ביישומים. בכל מקרה, תרצה לדעת מי מחובר כרגע ומשתמש במשאבי המערכת.
ממש מזל טוב, ב-Windows יש כלי פקודה מובנה בשורת הפקודה שנקרא query
שיכול לרשום את כל המשתמשים המחוברים כעת למחשב. הפקודה גם מציגה אם המשתמש מחובר דרך משימת שולחן עבודה מרחוק או מקומית למחשב.
הפקודה query
יש שני פרמטרים הקשורים לקבלת המשתמשים המחוברים; session
ו-user
. הפרמטר session
מפרט את המספרים המחשב, בעוד הפרמטר user
מפרט את המשתמשים ואת המספרים שלהם.
הפקודה
query session
יש לה אם מזהה שנקראqwinsta
, בעוד שהפקודה מזהה עבורquery user
היאquser
.
לדוגמה, הפעל את הפקודה למטה כדי לרשום את המספרים ב-DC1.
התמונה למטה מציגה את הפלט של הפקודה. בדוגמה זו, שני משתמשים התחברו למחשב DC1 – אחד בהפעלת הקונסול והשני דרך RDP. כפי שאתה רואה, qwinsta
מחזיר את כל ההפעלות, גם אלה שאינן משתמשים.

כאשר אתה מריץ
qwinsta
אוquser
לבד בלי הארגומנט/server:<computer>
, שתי הפקודות תשאירו שאילתה למחשב המקומי כברירת מחדל.
באשר לרשימת כל המשתמשים עם הפעלות התחברות קיימות, רוץ את הפקודה user
למטה.
לאחר הרצת הפקודה, תשים לב מייד ש- quser
מחזיר את הפעלות והמשתמשים כמו הפקודה qwinsta
. אך הפעם, אין הפעלות ריקות.
קיימות גם שני עמודות נוספות: IDLE TIME
, שמציינת את זמן ההשהייה של המשתמשים, ו- LOGON TIME
המציינת את חותמת ההתחברות של המשתמשים.

לבסוף, בהשוואת תוצאות הפקודות qwinsta
ו- quser
, quser
היא הפקודה המתאימה יותר ב-PowerShell לקבלת המשתמשים הנוכחיים.
האם יש לך סיסמאות מסוכנות במאגר הנתונים הפעילים שלך? גלה זאת עם Specops Password Auditor Free.
Conclusion
על פי שישנן דרכים רבות ב-PowerShell לקבל את המשתמשים המחוברים כעת, השיטה הטובה ביותר תלויה בהתוצאה שאתה מתכוון לקבל וכיצד אתה מתכוון להשתמש בה.
פקודות ה-cmdlets הקשורות ל-WMI הטבעיות ופקודת ה-query
מאפשרות לך לקבל את המשתמשים המחוברים במחשב מקומי או מרחוק. שימוש ב-Class-ים של .NET ובמשתנים של הסביבה מציעים דרכים מהירות לקבלת התוצאות אותן, אך רק על המחשב המקומי.
בין אם אתה מתכוון להפעיל סקריפט או להציג תוצאות במסך באופן ידני, יש שיטה שתתאים לדרישות שלך לשימוש ב-PowerShell לקבלת המשתמש הנוכחי. מה הבא? אולי ללמוד איך ל-פענח תוצאות של פקודת ה-query ולהמיר אותן ל-אובייקטים של PowerShell על ידי כתיבה של פונקציות עם RegEx?
Source:
https://adamtheautomator.com/powershell-get-current-user/