יום רביעי, 11 בנובמבר 2020

מדריך ל PowerShell בעברית חלק 6 - עבודה עם רגיסטרי




כמו תמיד במידה ואל עברתם על כל שאר המאמרים, אז אין לכם מה לקרוא את המאמר הזה מאחר והוא רק יגרום לכם לבור הרבה יותר גדול בידע בנושא ה PowerShell.

ככה שקודם כל תעברו על המדריכים הבאים:

1) חלק ראשון - "מאיפה מתחילים?" - מיועד למי שלא פתח אף פעם PowerShell בחיים : כאן
2) חלק שני - "מיונים, מודולים ו Alias" : כאן
3) חלק שלישי - "הרחבה של סינונים ומיונים": כאן
4) חלק רביעי - "לולאת foreach והפקודה foreach-object" : כאן
5) חלק שישי - "עבודה עם רגיסטרי" : כאן

פקודות שימושיות ל PowerShell : כאן


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

[reg query HKCU\Software\[PATH_TO_MY_DIR] /v [KEY_NAME

ב PowerShell זה נראה כך:

\Get-ItemProperty HKCU:\SOFTWARE\Google\Chrome

ממש כאילו אתם משתמשים בסייר קבצים בשביל לסייר בין תיקיות, ולמה זה? זה תודות ל - Psproviders, ומה זה בעצם?  מדובר ב"מתאם" שהופך חלקים מסויימים של המידע ל"כונן דיסק" ובעצם מיצר PsDrives , ו PsDrive הוא PowerShell Drive - שזה למעשה סוג של מידע - שמותאם\ממופה ונראה כ"כונן דוסק" שאנחנו מכירים ורואים ב CMD, מה שמאפשר לנו לגשת לכל מיני מקומות במערכת הפעלה בצורה של סייר קבצים, כמו לדוגמא אפשרות לגשת לרג'יסטרי בהיררכיה של ספריות או למפות אותו לאות כונן ולהשתמש בפקודה כמו Dir, CD וכד'.

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

מי שרוצה לקרוא יותר על האופציות של ה Providers\PsDrives - מומלץ לקרוא באתר של מיקרוסופט: כאן


איך עובדים עם הריגסטרי ב PowerShell?

1. נתחיל עם השאלה הכי חשובה - איך לסייר ברגיסטרי כאילו זאת תיקייה רגילה ?

אני מאוד שמח ששאלתם, קודם כל בשביל להבין אילו ל Psdrives יש, אפשר לגשת, נריץ בקונסול את הפקודה:
Get-PSDrive



בתוצאה שנקבל, נראה לאילו נתונים ניתן לגשת, אותנו מעניין הרגיסטי, אנחנו יכולים לגשת ל
1) HKEY_LOCAL_MACHINE - בקונסול (חלון ה PowerShell) נשתמש בקיצור - hklm
2) HKEY_CURRENT_USER - בקונסול (חלון ה PowerShell) נשתמש בקיצור hkcu

בכל מפתח ניתן להוסיף את הערכים הרגילים שאנחנו מכירים מהרגיסטרי (כמה לדוגמא):

1) REG_SZ
2) REG_DWORD 
3) REG_MULTI_SZ

להלן דוגמא להגדרה של אחד הלקוחות שאני נוהג להתחבר אליהם בעזרת FortiClient לצורך תמיכה:





ישנן כמה דרכים לגשת לתוך הערכים של הרגיסטרי, הראשונה, להשתמש בפקודות הרגילות של ה"דוס" כמו cd בשביל לגשת לאיזשהו ענף ברגיסטרי ואנחנו נעשה את זה בצורה הרגילה שאנחנו מכירים -  :cd hklm

לאחר מכן נקבל מצב מאוד מוכר לכולנו - כאילו אנחנו נמצאים בכונן מסויים : 
<\:PS HKLM
:בערך כמו
<c:\users\lev
ועכשיו החלק הכי מעניין, אם נריץ את הפקודה שלומדים בכיתה א' לאנשי Microsoft שהיא dir או בהקבצה א' של לינקוס שהיא ls, נקבל את מה שאנחנו מכירים, תצוגה של התיקייה, או במקרה הזה את הרגיסטרי שאנחנו מכירים מהממשק הגרפי של מיקרוסופט (אל תתיחסו להודעת השגיאה): 




השלב הבא, כפי שכבר ניחשתם, יאפשר לנו פשוט להכנס לכל תיקייה כמו שאנחנו רגילים בדוס, או באחת הפקודות של PowerShell, לדוגמא נכנס ל Software (אל תשכחו שניתן להשתמש ב TAB לצורך השלמה אוט'): 

PS HKLM:\> cd .\SOFTWARE
ואם נקיש עכשיו dir, נקבל את התוכן, כמו שאנחנו רגילים בדוס:



בפקודות של PowerShell יש כמה וכמה פקודות שמקבילות ל cd, כמו שלמדנו בפרקים הקודמים ניתן להשתמש בפקודה get-alias בשביל לבדוק מה מקביל לפקודות שאנחנו מכירים:





 זאת אומרת שאם נרצה להציג את הענף software נוכל לכתוב גם set-location .\software ונגיע לאותו המקום:



2. הצגת ערכים של "מפתחות רגיסטרי" רגיסטרי.

ישנם כמה דברים שניתן להציג: 

א. את המפתח (key) עצמו ואת מה שמתחתיו (Subkey) בעזרת הפקודה - Get-Item
לדוגמאGet-item HKLM:\SOFTWARE\7-Zip


ב. ערך של המפתח ואת מה שהערך מחזיק בתוכו בעזרת הפקודה- Get-ItemProperty
לדוגמאGet-ItemProperty HKLM:\SOFTWARE\7-Zip

ג. ערך ספציפי בתוך קי (Key) מסויים בעזרת הפקודה - Get-ItemPropertyValue
לדוגמא: Get-ItemPropertyValue HKLM:\SOFTWARE\7-Zip\ -Name path64



לצורך הדגמא נגיד ונרצה לדעת מה יש תחת הערך 7zip, פשוט נריץ את הפקודה הבאה :


Get-Item HKLM:\SOFTWARE\7-Zip

ונקבל את התוצאה הבאה :


וכמובן שברגיסטרי הרגיל אנחנו נראה את אותו הדבר:


3) הוספת מפתחות וערכים חדשים

הוספת המפתחות היא קצת יותר מסובכת מאחר וקודם כל יש ליצור את המפתח (key) עצמו ורק לאחר מכן את הערך שלו וההגדרה של הערך:

לדוגמא: ניצור תחת Software את המפתח LeiderTech וניצור ערך מסוג REG_SZ ונרשום בו Lev1 וניצור עוד אחד בשם Lev2 וניצור ערך מסוג dWord וניתן לו את הסיפרה 1

אז נתחיל ביצירת המפתח במקום הרצוח:

New-Item HKLM:\SOFTWARE\LeiderTech

יצרנו את המפתח הרצוי:



לאחר מכן ניצור את הערכים הרצויים בתוך המפתח:

יצירת סטרינג - REG_SZ:

New-ItemProperty HKLM:\SOFTWARE\LeiderTech\ -Name Lev1

יצירת ערך Dword:

"New-ItemProperty HKLM:\SOFTWARE\LeiderTech\ -Name Lev2 -Value 1 -PropertyType "Dword


התוצאה של כלל הפקודות ביחד:


4. שינוי של מפתחות וערכים ברגיסטרי (לא השם של הערך, אלה הערך עצמו)

שינוים ב PowerShell מתבצעים בעזרת פקודות שמתחילות בפועל "set", מי שקרא את החלקים הראשונים של המדריך (במידה ולא - כדי מאוד לקרוא - ישלים לכם הרבה ידע !)  יודע שניתן להריץ את get-command ולקבל את כלל הפקודות הרלוונטיות אז נריץ את הפקודה הקצת ארוכה הזאת:

Get-Command -Noun Item,ItemProperty,ItemPropertyValue |Sort-Object -Property Name |select name




לצורך שינוי הערך, נשתמש בפקודה Set-ItemProperty ובעצם נבצע רק את השינוי המינורי שהוא ההתחלה של הפקודה מ New ל Set, ולאחר מכן נמחק את הערך Dword בסוף מאחר ואנחנו רוצים רק לשנות את הערך:

Set-ItemProperty HKLM:\SOFTWARE\LeiderTech\ -Name Lev2 -Value 258

וכמובן התוצאה בהתאם :





5. מחיקת מפתחות וערכים

המחיקה היא גם כן באותה הצורה, רק לשנות את ההתחלה בהתאם למה שאתם צריכים - במקרה הזה נמשתמש ב Remove בשביל למחוק את כל המפתח LeiderTech מהרגיסטרי:

Remove-Item HKLM:\SOFTWARE\LeiderTech\ -Force

הוספתי את הפרמטר Force בסוף עלמנת שלא יקפצו לי כל מיני "האם אתה בטוח?" למיניהם.


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


בדקתי את זה על אופיס 2016 - תהנו:

(ניתן לעשות "העתק" - "הדבק" לתוך ה ISE ולהשתמש)

## ==============================================
 office global Active X configuration##
## ==============================================

new-item "HKCU:\\Software\Microsoft\Office\Common\Security"
New-ItemProperty "HKCU:\\Software\Microsoft\Office\Common\Security" -name UFIControls -value 1  -PropertyType "DWord"
New-ItemProperty "HKCU:\\Software\Microsoft\Office\Common\Security" -name DisableAllActiveX -value 0  -PropertyType "DWord"


## ==============================================
## Excel configuration##
## ==============================================


#Enable macros in Excel##

Set-ItemProperty -Path "HKCU:\\Software\Microsoft\Office\16.0\Excel\Security" -Name "VBAWarnings" -value 1
New-ItemProperty "HKCU:\\Software\Microsoft\Office\16.0\excel\Security" -name AccessVBOM -value 1  -PropertyType "DWord"

#Trusted Locations in Excel:#

Set-ItemProperty -Path "HKCU:\\Software\Microsoft\Office\16.0\Excel\Security\Trusted Locations" -name "AllowNetworkLocations" -value 1


#Disabel protected view in Excel#

New-Item "HKCU:\\Software\Microsoft\Office\16.0\Excel\Security\ProtectedView"
New-ItemProperty "HKCU:\\Software\Microsoft\Office\16.0\Excel\Security\ProtectedView" -name DisableAttachmentsInPV -value 1  -PropertyType "DWord"
New-ItemProperty "HKCU:\\Software\Microsoft\Office\16.0\Excel\Security\ProtectedView" -name DisableInternetFilesInPV -value 1  -PropertyType "DWord"
New-ItemProperty "HKCU:\\Software\Microsoft\Office\16.0\Excel\Security\ProtectedView" -name DisableUnsafeLocationsInPV -value 1  -PropertyType "DWord"


## ==============================================#
## Word Configuration#
## ==============================================#


#Enable macros in Word#

New-ItemProperty "HKCU:\\Software\Microsoft\Office\16.0\word\Security" -name AccessVBOM -value 1  -PropertyType "DWord"
New-ItemProperty "HKCU:\\Software\Microsoft\Office\16.0\word\Security" -name VBAWarnings -value 1  -PropertyType "DWord"

#Trusted Locationsin word:#

Set-ItemProperty "HKCU:\\\Software\Microsoft\Office\16.0\Word\Security\Trusted Locations" -name "AllowNetworkLocations" -value 1


#Disable protected View in Word#

New-Item "HKCU:\\Software\Microsoft\Office\16.0\word\Security\ProtectedView"
New-ItemProperty "HKCU:\\Software\Microsoft\Office\16.0\word\Security\ProtectedView" -name DisableAttachmentsInPV -value 1  -PropertyType "DWord"
New-ItemProperty "HKCU:\\Software\Microsoft\Office\16.0\word\Security\ProtectedView" -name DisableInternetFilesInPV -value 1  -PropertyType "DWord"
New-ItemProperty "HKCU:\\Software\Microsoft\Office\16.0\word\Security\ProtectedView" -name DisableUnsafeLocationsInPV -value 1  -PropertyType "DWord"




כמו תמיד, לכל שאלה המייל שלי levl@leidertech.co.il

ומדריך מצולם:




לחלקים הקודמים:

1) חלק ראשון - "מאיפה מתחילים?" - מיועד למי שלא פתח אף פעם PowerShell בחיים : כאן
2) חלק שני - "מיונים, מודולים ו Alias" : כאן
3) חלק שלישי - "הרחבה של סינונים ומיונים": כאן
4) חלק רביעי - "לולאת foreach והפקודה foreach-object" : כאן
5) חלק שישי - "עבודה עם רגיסטרי" : כאן

פקודות שימושיות ל PowerShell : כאן


אין תגובות:

פרסום תגובה

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

תודה :)