יום שלישי, 6 באוגוסט 2019

פקודות PowerShell שימושיות

פקודות שיעשו את החיים שלכם הרבה יותר קלים ופרודוקטיביים

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

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

(אצרף גם פקודות שיכולות לעבוד ב CMD למצבים בהם אתם עובדים עם מערכות ישנות יותר מ Windows 8)

מחשבים מקומיים

1) בדיקת תאריך התקנה של מערכת הפעלה:

:PowerShell

Get-CimInstance Win32_OperatingSystem | select Version, InstallDate, OSArchitecture

:CMD
systeminfo | find /i "install date"

2) קבלת מספר סידורי של מחשב עוזר במיוחד למחשבים ניידים :

:PowerShell

Get-WmiObject win32_bios | fl SerialNumber

:CMD
wmic bios get serialnumber


3) בדיקת דגם של מחשב:

:PowerShell
Get-CimInstance -ClassName Win32_ComputerSystem |select Manufacturer, Model

:CMD
wmic computersystem get model

4) בדיקת גירסת מערכת הפעלה כולל סוג ארכטיקטורה:

:PowerShell
Get-CimInstance Win32_OperatingSystem | select Version,OSArchitecture

:CMD
wmic OS get Caption, OSArchitecture

5) בדיקה - כמה זמן המחשב דלוק?

:PowerShell
(get-date) - (gcim Win32_OperatingSystem).LastBootUpTime |select Days, Hours |ft -AutoSize

:CMD
systeminfo | find "System Boot Time"

6) במידה והמחשב בדומיין ואתם מקבלים הודעה על trust relationship (אני אישית לא בדקתי את זה)

Test-ComputerSecureChannel -Credential domain\admin -Repair



פקודות לשרתים: 

1) ניתוק כל המשתמשים שהסשן שלהם במצב Disconnected (טוב לשרתי טרמינל):

Get-RDUserSession |where sessionstate -like *STATE_DISCONNECTED* |Invoke-RDUserLogoff

2) מציאת משתמש ב Active Directory והצגת הנתיב בו הוא ממוקם (עוזר לעבודה עם נתיבי LDAP):

Get-ADUser -Filter 'Name -like "*lev*"' |select name, DistinguishedName |Format-Table -AutoSize

3) מציאת כל המאפיינים של המשתמש: 

Get-ADUser -Filter 'Name -like "*sus*"' -Properties *|gm

4) מציאת קבצים שנפתחו על ידי משתמש (ניתן לרשום גם את שם הקובץ בעברית):

Get-SmbOpenFile |where {$_.Path –like "*.xls"} |select ClientUserName, path

במידה ורוצים לסגור את הקובץ באותח הפקודה - נוסיף סימן " Pipe" ( נמצא מעל האנטר -> | ) ואז נוסיף את הפקודה 

Close-SMBOpenFile

או שניתן להעתיק את הפקודה כאן:

Get-SmbOpenFile |where {$_.Path –like "*.pdf"} | Close-SMBOpenFile



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

1) קודם כל אם אתם על windows 7\8\8.1 ביצעו הורדה של של גירסת ה PowerShell האחרונה - כאן

2) פתחו את PowerShell עם משתמש אדמיניסטרטור (לא משנה אם זה ISE או הרגיל) והריצו:
Install-Module -Name AzureAD

3) לאחר מכן התקינו את Microsoft Online Services Sign-In Assistant for IT Professionals (מסיבה לא מובנת ניתן להתקין את זה אך ורק על מערכות 64 ביט): כאן

4) לאחר שביצעתם התקנה - פתחו את PowerShell בתור מנהל (לא משנה אם ISE או הרגיל) והריצו:
Install-Module MSOnline 
* במהלך ההתקנה תצטרכו לענות על שאלות - אני מאמין שתאשרו את הכל.

להלן המקור של המדריך מהאתר של מיקרוסופט : לינק


פקודות לשימוש באופיס 365:

לידע כללי

 לצורך עבודה עם אופיס 365 הכולל בתוכו Exchange, Skype, SharePoint, ActiveDirectory Azure, office 365 ישנן כמה אפשרויות, או להתחבר לכל השירותים ביחד, או להתחבר לשירות ספציפי, בסביבת העובדה שלי יש לי צורך בחיבור אך ורק לכמה שירותים, אבל במידה ואתם רוצים להתחבר להכל ביחד, להלן סקריפט שניתן לבצע בו עריכה כרצונכם - באתר של מיקרוסופט: לינק

לגופו של עניין:

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

מדוע להתחבר לשירותים הללו ביחד ולא בנפרד?
בעצם ברגע שאנחנו מבצעים התחברות לשירות כזה או אחר של מיקרוסופט, במהלך החיבור PowerShell מייבא פקודות רלוונטיות ואז במידה ואתם תרצו להשתמש בפקודות של Exchange לא תצטרכו לבצע חיבור חדש או לחלופין במידה ואתם התחברתם ל 365 יתבצע יבוא של פקודות רלוונטיות ולא תצטרכו להתחבר לשירות של Exchange.

¿? מאחר וכאן אני לא עוסק בהסברים יותר מדי - מי שמעוניין "לחפור" יותר עמוק - מוזמן לעשות זאת לבד¿?

התחברות ראשונית לשירותי מיקרוסופט

(העדיפות כאן היא לעבוד עם ISE - כי פשוט יותר נוח)

לאחר שתריצו את הסקריפט תקבלו חלון שבו תתבקשו להכניס הרשאות - אלו הן הרשאות לחיבור עם חשבון מנהל ה 365 שלכם ללא דומיין וללא שום דבר
שם משתמש (לדוגמא) :levadmin@leidertch.co.il
סיסמא: ToLongPassw0rd2Remmber!

לאחר מכן לחצו אינטר וכל שאר הדברים יתבצעו לבד.


$creds = Get-Credential

$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/powershell-liveid/ `
                         -Credential $creds -Authentication Basic -AllowRedirection

Import-Module MSOnline

Connect-MsolService -Credential $creds

Import-PSSession $Session


רשימת הפקודות:

1) יצירת משתמש חדש - אך ורק במידה ויש רישיונות פנויים (אין אפשרות לרכוש רישיון חדש דרך PowerShell) אלה רק להקצות:

New-MsolUser -UserPrincipalName sararuchama@expattaxcpas.com -DisplayName "Lev It" -FirstName "Lev" -LastName "WhatEver" -LicenseAssignment EXPATTAXCPAS:EXCHANGESTANDARD -UsageLocation IL

2) מציאת משתמש:

Get-MsolUser -SearchString sar

3) איפוס סיסמא:

Set-MsolUserPassword -UserPrincipalName user@yourdomain.com -NewPassword blah123

4) שינוי שם תצוגה:

Set-MsolUser -UserPrincipalName garfield@odie.net -DisplayName "Garfield"

5) שינוי מייל ראשי של משתמש אך ורק בתוך Exchange online:

Set-MsolUserPrincipalName -UserPrincipalName anne.wallace@contoso.onmicrosoft.com -NewUserPrincipalName anne.jones@whatever.com

עבודה עם רשימות תפוצה (Distribution groups) 

1) הצגת כל רשימות התפוצה:
Get-DistributionGroup

2) הצגת רשימת משתמשים בתוך רשימת תפוצה ספציפית:

Get-DistributionGroupmember "group name"

3) הוספת משתמש (מאפשר הוספה של משתמש אחד בלבד - להוספה מרובה, עבור לסעיף 8) לרשימת תפוצה:

Add-DistributionGroupMember -Identity "admin team" -Member moshecohen -BypassSecurityGroupManagerCheck

4) שינוי שם לרשימת תפוצה: 

Set-DistributionGroup -Identity OldGroupName -Name NewGroupName -IgnoreNamingPolicy

5) מציאת כל רשימות התפוצה שמשתמש נמצא בהן: 

$Username = "email_adress@OfTheUser.com"

Get-DistributionGroup | where { (Get-DistributionGroupMember $_.Name | foreach {$_.PrimarySmtpAddress}) -contains "$Username"}

6) מחיקת משתמש מרשימת תפוצה:

Remove-DistributionGroupMember -Identity "Group Name" -Member wanteduser -BypassSecurityGroupManagerCheck

7) בדיקת כמות משתמשים בחשבון הנוכחי:

(get-user).count

8) הוספת כמה משתמשים ביחד לרשימת תפוצה:

Update-DistributionGroupMember -Identity "Research Reports" -Members
lev@leidertech.co.il,moshe@leidertech.co.il,hava@leidertech.co.il,shula@leidertech.co.il

9) יצירת רשימת תפוצה חדשה והוספת משתמש לתוכה:

New-DistributionGroup -Name "Test Distribution Group" -members Damian@leidertech.co.il -type Distribution

העברת מייל למשתמש אחר (Email Forwarding):

הגדרת Mail Forword - מומלץ לבצע את הפעולות הבאות על מנת שלא נתבלבל:

  •  מציאת משתמש : *get-mailbox -identety *tsipy
  • לאחר מכן  נעתיק את ה UserPrincipalname
ונדביק באחת מהפקודות הבאות:

¿?במידה ואתם לא רוצים שישאיר עותק אל המשתמש שאליו המייל מגיע¿?:

Set-Mailbox -Identity tsipy -ForwardingSMTPAddress lev@LeiderTech.co.il

¿?במידה ואתם כן רוצים שישאיר עותק אל המשתמש שאליו המייל מגיע¿?:

Set-Mailbox -Identity "User NAme" -DeliverToMailboxAndForward $true -ForwardingSMTPAddress "lev@LeiderTech.co.il"

נבצע בדיקה שהכל עבר כמו שצריך:

Get-Mailbox lev | select UserPrincipalName,ForwardingSmtpAddress,DeliverToMailboxAndForward

8) ביטול Mail Forwarding:

set-mailbox -Identity "User Name" -ForwardingSmtpAddress $Null

עבודה עם Alias:

1) בדיקת  האליאס שמוגדר למשתמש: 

Get-Mailbox lev | select -ExpandProperty emailaddresses | Select-String -Pattern "smtp"

2) הוספת אליאס למשתמש:

Set-Mailbox lev -EmailAddresses @{Add='levvv@leidertech.co.il'}

3) מחיקת אליאס ממשתמש:

Set-Mailbox lev -EmailAddresses @{Remove=’alias@LeideTech.co.il’}

ניהול רשימת תפוצה\קבוצה מסוג"אופיס365" - אשר נקראות בשפת ה Unified Group" Powershell":

1) הצגת כל רשימות תפוצה\קבוצה מסוג "אופיס365":
Get-UnifiedGroup

2) ביצוע שינוי לרשימת תפוצה\קבוצה מסוג" אופיס365":

Set-UnifiedGroup -Identity "HelpDesk Department" -PrimarySmtpAddress helpdesk@leidertech.co.il -RequireSenderAuthenticationEnabled $false


3) הוספת רשימת תפוצה\קבוצה חדשה מסוג "אופיס365":

New-UnifiedGroup -DisplayName "HR Department" -Alias HR

4) מחיקת רשימת תפוצה\קבוצה מסוג "אופיס365":

Remove-UnifiedGroup -Identity "PR Department"

5) הצגת חברות ובעלות של רשימת תפוצה\קבוצה מסוג "אופיס365":

Get-UnifiedGroupLinks -Identity "PR Department" -LinkType Members

6) הוספת חברות לרשימת תפוצה\קבוצה מסוג "אופיס365"

Add-UnifiedGroupLinks -Identity "Management Department" -LinkType Members -Links uri@leidertech.co.il,shula@leidertech.co.il

7) הסרת חברות מרשימת תפוצה\קבוצה מסוג "אופיס365"

Remove-UnifiedGroupLinks -Identity "Management Department" -LinkType Members -Links uri@leidertech.co.il,shula@leidertech.co.il

הוספת תמונות למשתמשים באופיס 365

1) הצגת תמונה של משתמש מסויים:
Get-UserPhoto "Moshe Cohen"

2) תצוגה מקדימה של קובץ שעלה למשתמשת אבל לא נשמר:

Get-UserPhoto "Moshe Cohen" -Preview

3) העלת תמונה למשתמש:

Set-UserPhoto -Identity "Shmuel Cohen" -PictureData ([System.IO.File]::ReadAllBytes("C:\Users\Admin\Desktop\Shmuel.jpg"))

4) מחיקת תמונה של משתמש:

Remove-UserPhoto "Simon Cohen"


במידה ותרצו ללמוד אודות PowerShell עוד - יש מדריך שכתבתי בעברית למתחילים בעל 2 חלקים:

1) בסיס ל PowerShell - מיועד לאלה שבחיים לא נגעו בו: כאן
2) חלק ב : כאן
3) חלק ג: כאן
4) חלק ד: כאן

3 תגובות:

  1. תותח על!
    כתיבה יפה מאוד

    השבמחק
  2. נראה שימושי ביותר. מדריך מצויין, תודה רבה לב !

    השבמחק

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

תודה :)