|
13-10-2006, 00:44
|
|
מנהל פורום מערכות הפעלה - הרובע המייקרוסופטי.
|
|
חבר מתאריך: 07.10.04
הודעות: 13,777
|
|
ספקים - providers
לפני שנתחיל, הסעיף הזה (וכנראה סעיפים קודמים) כוללים פקודות שעלולות לצאת מאוד ארוכות.
בpowershell, כמו בכול prompt טקסטואלי שמכבד את עצמו, יש אפשרות להשלמת פקודות, שמות קבצים ושמות תיקיות באמצעות לחיצה על המקש <TAB>
כלומר, במקום לרשום ForEach-Object, ניתן לכתוב ForEach- ולהשלים את המילה ע"י הקשה על המקש TAB.
כנ"ל לגבי פקודות כמו cd c:\windows, ניתן לכתוב cd c:\wi ולהשלים את המילה ע"י לחיצה על <TAB>, אם קיימות כמה אפשרויות, הקשה על TAB תעבור קדימה בין האפשרויות, הקשה על <SHIFT>+<TAB> תדפדף בין האפשרויות אחורה.
ועכשיו נמשיך.
עד עכשיו השתמשנו בpowershell כדי לגשת לקבצים ותיקיות מקומיים במחשב, העקרון נראה מאוד פשוט.
יש לנו מחשב, במחשב יש כוננים, תחתיהם יש תיקיות ו/או קבצים.
העקרון (המאוד פשוט הזה) נכון, כי כברירת מחדל בכניסה לpowershell אנחנו מגיעים לתיקיית המשתמש שלנו, שנמצאת על הכונן המקומי במחשב.
מה שאנחנו לא יודעים, זה שכדי לגשת לכונן המקומי שלנו, הpowershell משתמש בשירות מיוחד לגישה לכוננים מקומיים, השרות הזה נקרא ספק (או - provider).
אני מניח שהרבה יושבים עכשיו (הרבה = מי שממש קורא את זה) ותוהים "למה לעזאזל הוא מספר לנו דברים לא מעניינים שכאלה?"
התשובה היא מאוד פשוטה, כי באמצעות הproviders האלו, אנחנו יכולים לגשת, דרך הcommand line למקומות שלא חשבנו שניתן לגשת אליהם.
לדוגמה, קיים לנו provider לגישה לשיתופי רשת.
זאת אומרת, שאם אנחנו יודעים שיש לנו מחשב ברשת בשם naomi ואנחנו יודעים שתחתיו יש לנו שיתוף בשם MP3, אנחנו יכולים לכתוב את הפקודה הבאה:
קוד:
PS C:\> cd \\naomi\mp3
PS Microsoft.PowerShell.Core\FileSystem::\\naomi\mp3>
כמובן שמכאן ניתן לעשות את כל הפעולות שניתן לעשות על קבצים מקומיים כמו dir, copy, rename וכו'
אבל... לא באתי להרדים אתכם בסיפורים על ספקים למיניהם, אלא להראות תכל'ס לאן זה יכול להגיע.
אז בואו נכיר פקודה חדשה - Get-PSProvider
קוד:
PS C:\> Get-PSProvider
Name Capabilities Drives
---- ------------ ------
Alias ShouldProcess {Alias}
Environment ShouldProcess {Env}
FileSystem Filter, ShouldProcess {C, D, E, S...}
Function ShouldProcess {Function}
Registry ShouldProcess {HKLM, HKCU}
Variable ShouldProcess {Variable}
Certificate ShouldProcess {cert}
כמו שיכלתם לנחש מהפקודה עצמה, הפקודה מציגה את כל הproviders המותקנים על המחשב, ואת ה"כוננים" המשוייכים אליה.
על כל אחד מהproviders ניתן לתת "שיעור" שלם, אבל לא כולם באמת מעניינים, בסופו של דבר אנחנו נדבר (אם יהיה טעם להמשיך בכ"א) על כולם חוץ מcert, אבל ניתן עכשיו תיאור זריז על כל אחד מהם:
Environment - הכונן שמחזיק את משתני הסביבה.
Variable - הכונן שמחזיק את כל המשתנים שייצרתם (כאשר עשינו $size = 0 למעשה "יצרנו" מאפיין/קובץ בשם size תחת תיקיית variable)
Alias - הכונן שמחזיק קיצורים לפקודות, אם תעברו לכונן ותעשו dir תוכלו לגלות קיצורים די שימושיים, לדוגמה תגלו שבמקום לכתוב ForEach-Object מספיק לכתוב "%", ושdir הוא עצמו קיצור לפקודה Get-ChildItem וכ'
Function - הכונן שמחזיק פונקציות המוגדרות למשתמשים בpowershell, כאם תגלו שפקודת more היא פונקצייה, ואפילו path הוא פונקצייה (חלק מאוד חשוב שאני כנראה אסביר עליו בהמשך)
Registry - על זה רציתי לדבר היום למעשה, אחרי הרבה מאוד זמן, יש לנו אפשרות לגשת לregistry בממשק סטנדרטי ונוח דרך הcommand line.
נניח ואנחנו נכנסנו לmsconfig, וראינו תחת startup כמה פעולות שעולות ביחד עם המחשב שאנחנו לא רוצים, במקרה שלנו זה יהיה הפריט המסומן:
אם היינו גוררים את החלו ימינה (אתם מוזמנים לעשות זאת בעצמכם) נראה שה"תיקייה" שבה מוגדר הפריט הזה היא: " HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Ru n"
אז אנחנו ניכנס לpowershell שלנו ונכתוב את הפקודות הבאות (השלמה אוטומטית עובדת גם כאן, כך שאין צורך להתענות ולכתוב את כל המילה, 2 אותיות ראשונות מספיקות בהחלט):
קוד:
PS C:\> cd hklm:
PS HKLM:\> cd HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Ru n
PS HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Ru n>
ועכשיו מתחיל הנושא הבעייתי...
אם היינו במערכת קבצים, פקודת DIR הייתה מחזירה את כל הפריטים שמוגדרים תחת המפתח הזה... אבל לא כאן.
לא ניכנס להסבר של מה ולמה, פשוט תסמכו עלי בקטע הזה (או שתנסו לבד, אבל DIR יראה לכם רק מפתחות אחרים שנמצאים תחת תיקייה זו)
אז איך אנחנו רואים מאפיינים שמוגדרים במפתח מסויים בregistry?
נשתמש בפקודה Get-ItemProperty, או בקיצור gp ונבקש פרטים על התיקייה הנוכחית (מסומנת בנקודה - "."):
קוד:
PS HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Ru n> gp .
PSPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MAC HINE\SOF
TWARE\Microsoft\Windows\CurrentVersion\Run
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MAC HINE\SOF
TWARE\Microsoft\Windows\CurrentVersion
PSChildName : Run
PSDrive : HKLM
PSProvider : Microsoft.PowerShell.Core\Registry
ATICCC : "d:\Program Files\ATI Technologies\ATI.ACE\cli.exe" runtim
e -Delay
ClamWin : "d:\Program Files\ClamWin\bin\ClamTray.exe" --logon
SunJavaUpdateSched : d:\Program Files\Java\jre1.5.0_06\bin\jusched.exe
SoundMAXPnP : d:\Program Files\Analog Devices\SoundMAX\SMax4PNP.exe
SoundMAX : "D:\Program Files\Analog Devices\SoundMAX\Smax4.exe" /tray
dla : C:\WINDOWS\system32\dla\tfswctrl.exe
UpdateManager : "C:\Program Files\Common Files\Sonic\Update Manager\sgtray
.exe" /r
QuickTime Task : "D:\Program Files\QuickTime\qttask.exe" -atboottime
IMONTRAY : C:\Program Files\Intel\Intel(R) Active Monitor\imontray.ex
e
FastTVSync : "C:\Program Files\Common Files\InterVideo\FastTVSync\FastT
VSync.exe"
SonicFocus : "D:\Program Files\Sonic Focus\SFIGUI\SFIGUI.EXE" BOOT
NeroFilterCheck : C:\Program Files\Common Files\Ahead\Lib\NeroCheck.exe
Windows Defender : "d:\Program Files\Windows Defender\MSASCui.exe" -hide
iTunesHelper : "d:\Program Files\iTunes\iTunesHelper.exe"
deleteme : delete me alraedy, I'm not a realt software!
מבט מהיר יגלה שאנחנו רוצים למחוק את המאפיים האחרון, זה שנושא בגאווה את השם "deleteme".
כדי למחוק את המאפיין הזה נשתמש בפקודה Remove-ItemProperty (או בקיצור - rp) בצורה הבאה:
עכשיו בואו נשחק קצת, כדי להכיר את ההרגשה של הגישה לregistry דרך הpowershell (מומלץ לעשות על מפתח נפרד, לא על אחד קריטי כמו זה שאני משחק איתו)
אני רוצה ליצור מאפיין חדש (Set-ItemProperty, או, sp)
קוד:
PS HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Ru n> sp . -name a -value b
PS HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Ru n> gp . -name a
PSPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MAC HINE\SOFTWARE\
Microsoft\Windows\CurrentVersion\Run
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MAC HINE\SOFTWARE\
Microsoft\Windows\CurrentVersion
PSChildName : Run
PSDrive : HKLM
PSProvider : Microsoft.PowerShell.Core\Registry
a : b
אני עכשיו רוצה לשנות את הערך של a, שיהיה משהו ארוך יותר:
קוד:
PS HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Ru n> sp . -name a -value "No
one knows what it's like, To be the bad man, To be the sad man, Behind blue eyes
"
PS HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Ru n> gp . -name a
PSPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MAC HINE\SOFTWARE\
Microsoft\Windows\CurrentVersion\Run
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MAC HINE\SOFTWARE\
Microsoft\Windows\CurrentVersion
PSChildName : Run
PSDrive : HKLM
PSProvider : Microsoft.PowerShell.Core\Registry
a : No one knows what it's like, To be the bad man, To be the sad ma
n, Behind blue eyes
הםם... המקום הזה לא מתאים לי, אני רוצה ליצור תחת software מפתח בשם songs ולהעביר לשם את המאפיין... אז הנה מה שאני אעשה:
יצירת המפתח (זהה לתחלוטין לצורה שבה יוצרים תיקייה במערכת קבצים:
קוד:
PS HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Ru n> mkdir HKLM:\SOFTWARE\Son
gs
Hive: Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MAC HINE\SOFTWARE
SKC VC Name Property
--- -- ---- --------
0 0 Songs {}
העברת המאפיין (באמצעות Move-ItemProperty, או בקיצור - mp):
קוד:
PS HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Ru n> mp . -Name a -Destinatio
n HKLM:\SOFTWARE\Songs
PS HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Ru n> gp . -name a
Get-ItemProperty : Property a does not exist at path HKEY_LOCAL_MACHINE\SOFTWAR
E\Microsoft\Windows\CurrentVersion\Run.
At line:1 char:3
+ gp <<<< . -name a
PS HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Ru n> gp HKLM:\SOFTWARE\Songs
-name a
PSPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MAC HINE\SOFTWARE\
Songs
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MAC HINE\SOFTWARE
PSChildName : Songs
PSDrive : HKLM
PSProvider : Microsoft.PowerShell.Core\Registry
a : No one knows what it's like, To be the bad man, To be the sad ma
n, Behind blue eyes
היו כאן כמה פקודות למעשה - העברת המאפיין, ניסיון להציג אותו במפתח המקורי (שהעלה שגיאה בגלל זה) והצגה שלו במפתח החדש.
ולסיום, מחיקת המפתח Songs:
קוד:
PS HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Ru n> cd \
PS HKLM:\> cd SOFTWARE
PS HKLM:\SOFTWARE> rmdir Songs
חשוב לשים לב - למרות שהיו מאפיינים בתיקייה הזו (כי הרי לפני שנייה ראינו שקיים שם "a" שיצרנו), עדיין לא הייתה לו בעייה למחוק את כל המפתח בלי לשאול אפילו, והוא לא יחזור יותר, כך שצריך להיזהר עם הפעולות האלו מאוד!
עד-כאן עריכת registry מpowershell, מקווה שנהניתם...
בגלל מיעוט התגובות אני מסיק מסקנות ומבין שזה לא הכי מעניין אתכם, אז אל חשש, העונש הזה ייגמר כנראה מוקדם מהצפוי
_____________________________________
|
|