כיצד להגדיר את Windows לעבוד עם PowerShell סקריפטים בקלות רבה יותר
ל- Windows ול- PowerShell יש תכונות אבטחה מובנות ותצורות ברירת מחדל שנועדו למנוע ממשתמשי קצה להפעיל בטעות סקריפטים במהלך הפעילות היומיומית שלהם. עם זאת, אם פעולות היומיום שלך כרוכות בכתיבת והפעלת סקריפטים משלך PowerShell, זה יכול להיות יותר מטרד מאשר תועלת. כאן, נראה לך כיצד לעקוף תכונות אלה מבלי להתפשר לחלוטין על אבטחה.
כיצד ומדוע Windows & PowerShell מונעים ביצוע סקריפט.
PowerShell הוא למעשה פגז הפקודה שפת scripting המיועד להחליף CMD ו אצווה סקריפטים במערכות Windows. ככזה, סקריפט PowerShell יכול להיות מוגדר במידה רבה לעשות כל דבר שאתה יכול לעשות ידנית משורת הפקודה. זה משווה כמעט כל שינוי אפשרי על המערכת שלך, עד ההגבלות על חשבון המשתמש שלך. אז, אם אתה יכול פשוט לחיצה כפולה על סקריפט PowerShell ולהפעיל אותו עם הרשאות מנהל מלא, פשוט אחד אניה כזה יכול באמת להרוס את היום שלך:
Get-ChildItem "$ env: SystemDrive \" -Recurse -ErrorAction SilentlyContinue | הסר פריט- Force -Recurse -ErrorAction SilentlyContinue
אל תפעיל את הפקודה הנ"ל!
זה פשוט עובר דרך מערכת הקבצים ומוחק כל מה שהוא יכול. מעניין, זה לא יכול להפוך את המערכת unoperable מהר ככל שאתה יכול לחשוב - גם כאשר לרוץ מ מושב מוגבה. אבל אם מישהו קורא לך לאחר הפעלת סקריפט זה, כי פתאום הם לא יכולים למצוא את הקבצים שלהם או להפעיל כמה תוכניות, "כיבוי אותו שוב ושוב" יהיה כנראה רק להוביל אותם לתוך Windows ההפעלה תיקון איפה הם הולכים להיות אמר שיש שום דבר שניתן לעשות כדי לתקן את הבעיה. מה יכול להיות גרוע יותר, במקום לקבל תסריט זה פשוט trashes מערכת הקבצים שלהם, חבר שלך עלול להיות מרומה לתוך מפעיל אחד כי מוריד ומתקין keylogger או שירות גישה מרחוק. לאחר מכן, במקום לשאול אותך שאלות על תיקון אתחול, הם עשויים בסופו של דבר לשאול את המשטרה כמה שאלות על הונאות בנק!
עכשיו זה צריך להיות ברור מדוע דברים מסוימים נדרשים כדי להגן על משתמשי הקצה מעצמם, אם אפשר לומר כך. אבל משתמשים כוח, מנהלי מערכת, גיקים אחרים הם בדרך כלל (אם כי יש יוצאים מן הכלל) קצת יותר זהיר של איומים אלה, בידיעה איך לזהות בקלות להימנע מהם, רק רוצה להמשיך עם מקבל את העבודה שלהם. כדי לעשות זאת, הם יצטרכו לבטל או לעקוף כמה מחסומי דרכים:
- PowerShell אינו מאפשר ביצוע סקריפט חיצוני כברירת מחדל.
ההגדרה ExecutionPolicy ב- PowerShell מונעת ביצוע של סקריפטים חיצוניים כברירת מחדל בכל הגירסאות של Windows. בגירסאות מסוימות של Windows, ברירת המחדל אינה מאפשרת ביצוע Script כלל. הראינו לך כיצד לשנות הגדרה זו ב כיצד לאפשר ביצוע של סקריפטים PowerShell ב- Windows 7, אבל אנחנו יכסה את זה בכמה רמות גם כאן. - PowerShell אינו משויך לסיומת הקובץ .PS1 כברירת מחדל.
הבאנו את זה בהתחלה שלנו PowerShell חנון בסדרה הספר. Windows מגדיר את פעולת ברירת המחדל עבור קובצי .PS1 כדי לפתוח אותם בפנקס הרשימות, במקום לשלוח אותם למתורגמן הפקודה PowerShell. זה כדי למנוע ישירות ביצוע מקרי של סקריפטים זדוניים כאשר הם פשוט לחיצה כפולה. - חלק מהסקריפטים של PowerShell לא יפעלו ללא הרשאות מנהל.
גם אם אתה משתמש בחשבון ברמת מנהל המערכת, עדיין עליך לעבור את בקרת חשבון המשתמש (UAC) כדי לבצע פעולות מסוימות. עבור כלי שורת הפקודה, זה יכול להיות קצת מסורבל בלשון המעטה. אנחנו לא רוצים להשבית את UAC, אבל זה עדיין נחמד כאשר אנחנו יכולים לעשות את זה קצת יותר קל להתמודד עם.
אלה נושאים דומים הם הביאו כיצד להשתמש בקובץ אצווה לעשות סקריפטים PowerShell קל יותר לרוץ, שבו אנחנו הולכים לך דרך כתיבת קובץ אצווה באופן זמני לעקוף אותם. עכשיו, אנחנו הולכים להראות לך איך להגדיר את המערכת שלך עם פתרון לטווח ארוך יותר. זכור כי בדרך כלל אין לבצע שינויים אלה במערכות שאינן בשימוש בלעדי על ידך - אחרת, אתה מציב משתמשים אחרים בסיכון גבוה יותר להיתקל באותן בעיות אותן נועדו למנוע.
שינוי שיוך קובץ .PS1.
הראשון, ואולי בראש ובראשונה, מטרד כדי לעקוף את ברירת המחדל של אסוציאציה .PS1 קבצים. שיוך קבצים אלה למשהו אחר מלבד PowerShell.exe הגיוני למניעת ביצוע מקרי של סקריפטים לא רצויים. עם זאת, בהתחשב בכך PowerShell מגיע עם סביבת Scripting משולבת (ISE) אשר תוכנן במיוחד עבור עריכת סקריפטים PowerShell, למה אנחנו רוצים לפתוח קבצים. PS1 ב Notepad כברירת מחדל? גם אם אינך מוכן לעבור באופן מלא להפעלת פונקציונליות של לחיצה פעמיים להפעלה, קרוב לוודאי שתרצה לשנות את ההגדרות האלו.
אתה יכול לשנות את השיוך קובץ .PS1 לכל תוכנית שאתה רוצה עם לוח הבקרה תוכניות ברירת המחדל, אבל לחפור ישירות לתוך הרישום ייתן לך קצת יותר שליטה על איך בדיוק הקבצים ייפתחו. זה גם מאפשר לך להגדיר או לשנות אפשרויות נוספות הזמינים בתפריט ההקשר עבור קבצי .PS1. אל תשכח לבצע גיבוי של הרישום לפני שתעשה זאת!
הגדרות הרישום השולטות על אופן פתיחת סקריפטים של PowerShell מאוחסנות במיקום הבא:
HKEY_CLASSES_ROOT \ Microsoft.PowerShellScript.1 \ Shell
כדי לבדוק את ההגדרות האלה לפני שנמשיך לשנות אותן, יש להסתכל על המפתח הזה ועל מפתחות המשנה שלו עם Regedit. מפתח Shell צריך רק יש ערך אחד, "(ברירת מחדל)", אשר מוגדר "פתח". זוהי מצביע לפעולת ברירת המחדל ללחיצה כפולה על הקובץ, שנראה במפתחות המשנה.
הרחב את המקש Shell, ותראה שלושה מקשי משנה. כל אחד מהם מייצג פעולה שניתן לבצע, שהיא ספציפית לסקריפטים של PowerShell.
ניתן להרחיב כל מקש כדי לחקור את הערכים שבתוכו, אך הם משווים למעשה את ערכי ברירת המחדל הבאים:
- 0 - הפעלה עם PowerShell. "הפעל עם PowerShell" הוא למעשה שם של אפשרות כבר בתפריט ההקשר עבור סקריפטים PowerShell. הטקסט הוא פשוט משך ממיקום אחר במקום להשתמש בשם המפתח כמו אחרים. והיא עדיין לא ברירת המחדל של לחיצה כפולה על הפעולה.
- עריכה - פתח ב- PowerShell ISE. זה עושה הרבה יותר הגיוני מאשר פנקס רשימות, אבל אתה עדיין צריך ללחוץ לחיצה ימנית על קובץ .PS1 לעשות את זה כברירת מחדל.
- פתח - פתח ב - Notepad. שים לב כי שם מפתח זה הוא גם מחרוזת מאוחסנים "(ברירת מחדל)" הערך של מקש Shell. משמעות הדבר היא לחיצה כפולה על הקובץ יהיה "פתח" את זה, וכי פעולה מוגדר בדרך כלל להשתמש פנקס רשימות.
אם אתה רוצה להישאר עם מחרוזות הפקודה שנבנו מראש כבר זמין, אתה יכול פשוט לשנות את "(ברירת מחדל)" ערך במפתח Shell כדי להתאים את השם של המפתח שתואם את מה שאתה רוצה לחץ פעמיים לעשות. זה יכול להיעשות בקלות מתוך Regedit, או שאתה יכול להשתמש לקחים שנלמדו הדרכה שלנו על לחקור את הרישום עם PowerShell (בתוספת לצבוט PSDrive קטן) להתחיל לבנות תסריט לשימוש חוזר שיכול להגדיר את המערכות שלך בשבילך. יש להפעיל את הפקודות הבאות מהפעלת PowerShell מוגבהת, בדומה להפעלת CMD כמנהל מערכת.
ראשית, אתה רוצה להגדיר PSDrive עבור HKEY_CLASSES_ROOT מאז זה לא מוגדר כברירת מחדל. הפקודה עבור זה היא:
חדש PSDrive HKCR הרישום HKEY_CLASSES_ROOT
כעת תוכל לנווט ולערוך מפתחות וערכים של רישום ב- HKEY_CLASSES_ROOT בדיוק כפי שהיית עושה ב- HKCU הרגיל וב- HKLM PSDrives.
כדי להגדיר לחיצה כפולה להפעלת סקריפטים PowerShell ישירות:
Set-ItemProperty HKCR: \ Microsoft.PowerShellScript.1 \ Shell '(ברירת מחדל)' 0
כדי להגדיר לחיצה כפולה כדי לפתוח את הסקריפטים של PowerShell ב- PowerShell ISE:
Set-ItemProperty HKCR: \ Microsoft.PowerShellScript.1 \ Shell '(ברירת מחדל)' ערוך '
כדי לשחזר את ערך ברירת המחדל (קובע לחיצה כפולה כדי לפתוח את הסקריפטים של PowerShell בפנקס הרשימות):
Set-ItemProperty HKCR: \ Microsoft.PowerShellScript.1 \ Shell '(ברירת מחדל)' פתח '
זה רק את היסודות של שינוי ברירת המחדל לחיצה פעמיים פעולה. נלמד בפירוט רב יותר כיצד להתאים את התסריטים של PowerShell כאשר הם נפתחים ב- PowerShell מ- Explorer בחלק הבא. זכור שהסקופין מונע מ- PSDrives להתמיד במהלך הפעלות באתר. לכן, סביר להניח שתרצה לכלול את קו New-PSDrive בתחילת כל סקריפט תצורה שאתה בונה למטרה זו, או להוסיף אותו לפרופיל PowerShell שלך. אחרת, יהיה עליך להפעיל את הסיביות באופן ידני לפני שתנסה לבצע שינויים בדרך זו.
שינוי ההגדרה PowerShell ExecutionPolicy.
PowerShell של ExecutionPolicy היא שכבה נוספת של הגנה מפני ביצוע של סקריפטים זדוניים. ישנן מספר אפשרויות עבור זה, וכן כמה דרכים שונות ניתן להגדיר. מרוב הכי פחות מאובטח, האפשרויות הזמינות הן:
- מוגבל - אין סקריפטים מורשים לפעול. (הגדרת ברירת המחדל עבור רוב המערכות). פעולה זו תמנע גם הפעלה של סקריפט הפרופיל שלך.
- AllSigned - כל הסקריפטים חייבים להיות חתומים דיגיטלית על ידי בעל אתר מהימן שיפעל מבלי להציג את המשתמש. סקריפטים החתומים על ידי בעלי אתרים המוגדרים במפורש כבלתי מהימנים, או סקריפטים שאינם חתומים דיגיטלית כלל, לא יפעלו. PowerShell תנחה את המשתמש לקבל אישור אם סקריפט חתום על ידי בעל אתר שאינו מוגדר עדיין מהימן או לא מהימן. אם לא חתמת דיגיטלית על סקריפט הפרופיל שלך, והקמת אמון בחתימה זו, היא לא תוכל לפעול. היזהר אילו שותפים אתה בוטח, כפי שאתה עדיין יכול בסופו של דבר מפעיל סקריפטים זדוניים אם אתה בוטח אחד טועה.
- RemoteSigned - עבור סקריפטים שהורדו מהאינטרנט, זה למעשה זהה "AllSigned". עם זאת, סקריפטים שנוצרו באופן מקומי או מיובאים ממקורות אחרים מלבד האינטרנט מורשים לפעול ללא כל הנחיה לאישור. כאן, תצטרך גם להיות זהיר אשר חתימות דיגיטליות אתה בוטח, אבל אפילו להיות זהירים יותר של סקריפטים שאינם חתומים תבחר להפעיל. זוהי רמת האבטחה הגבוהה ביותר שבה אתה יכול לקבל סקריפט פרופיל עובד ללא צורך לחתום דיגיטלית על זה.
- ללא הגבלה - כל הסקריפטים מורשים לפעול, אך בקשת אישור תידרש עבור סקריפטים מהאינטרנט. מנקודה זו ואילך, זה תלוי אך ורק בך כדי למנוע הפעלת סקריפטים לא מהימנים.
- עוקף - הכל פועל ללא אזהרה. תיזהר עם זה.
- לא מוגדר - לא הוגדרה מדיניות בהיקף הנוכחי. זה משמש כדי לאפשר ליפול בחזרה למדיניות המוגדרת בטווח נמוך (פרטים נוספים בהמשך) או את ברירת המחדל של מערכת ההפעלה.
כפי שהוצע על ידי תיאור של לא מוגדר, המדיניות הנ"ל ניתן להגדיר אחד או יותר של כמה טווחים. ניתן להשתמש ב- Get-ExecutionPolicy, עם הפרמטר -List, כדי לראות את כל הסקופים ואת התצורה הנוכחית שלהם.
טווחי מופיעים בסדר עדיפות, עם היקף מוגדל העליון מעל כל האחרים. אם לא הוגדרו מדיניות, המערכת חוזרת להגדרת ברירת המחדל שלה (ברוב המקרים, זה מוגבל).
- MachinePolicy מייצג מדיניות קבוצתית בתוקף ברמת המחשב. זה מיושם בדרך כלל רק בתחום, אבל ניתן לעשות זאת באופן מקומי גם כן.
- UserPolicy מייצג מדיניות קבוצתית בתוקף על המשתמש. זה גם בדרך כלל משמש רק בסביבות ארגוניות.
- התהליך הוא טווח ספציפי למופע זה של PowerShell. שינויים במדיניות בהיקף זה לא ישפיעו על תהליכים אחרים של PowerShell הפועלים, ולא יהיו יעילים לאחר סיום ההפעלה. זה יכול להיות מוגדר על ידי הפרמטר -ExecutionPolicy כאשר PowerShell הוא הושק, או שזה יכול להיות מוגדר עם התחביר הנכון- ExecutionPolicy מתוך הפגישה.
- CurrentUser הוא טווח המוגדר ברישום המקומי והוא חל על חשבון המשתמש המשמש להפעלת PowerShell. ניתן לשנות טווח זה באמצעות Set-ExecutionPolicy.
- LocalMachine הוא טווח המוגדר ברישום המקומי ומחיל על כל המשתמשים במערכת. זהו טווח ברירת המחדל שמשתנה אם Set-ExecutionPolicy מופעל ללא הפרמטר -Scope. כפי שהוא חל על כל המשתמשים במערכת, זה יכול רק להיות שונה מ הפעלה מוגבה.
מאז מאמר זה הוא בעיקר על מקבל סביב אבטחה כדי להקל על השימושיות, אנחנו מודאגים רק בשלוש התחתון scopes. הגדרות MachinePolicy ו- UserPolicy הן שימושיות רק אם אתה רוצה לאכוף מדיניות מגבילה שאינה עקיפה. על ידי שמירה על השינויים שלנו ברמת התהליך או למטה, אנו יכולים בקלות להשתמש בכל הגדרה מדיניות שנראה לנו מתאים למצב נתון בכל עת.
כדי לשמור על איזון מסוים בין האבטחה לבין השימושיות, המדיניות המוצגת בצילום המסך היא כנראה הטובה ביותר. הגדרת המדיניות LocalMachine ל- Restricted מונעת בדרך כלל הפעלה של קבצי Script על ידי כל אדם אחר. כמובן, זה יכול להיות לעקוף על ידי משתמשים שיודעים מה הם עושים ללא מאמץ רב. אבל זה צריך לשמור על כל המשתמשים שאינם טק מתמצא בטעות מפעילה משהו קטסטרופלי ב PowerShell. לאחר CurrentUser (כלומר: אתה) מוגדר כמו בלתי מוגבל מאפשר לך לבצע באופן ידני סקריפטים משורת הפקודה, אבל אתה רוצה לשמור על תזכורת של זהירות עבור סקריפטים שהורדו מהאינטרנט. ההגדרה RemoteSigned ברמת התהליך צריכה להיעשות בקיצור דרך ל- PowerShell.exe או (כפי שנעשה בהמשך) בערכי הרישום השולטים בהתנהגות של סקריפטים PowerShell. פעולה זו תאפשר פונקציונליות של לחיצה כפולה להפעלה קלה עבור כל הסקריפטים שאתה כותב, תוך הצבת מחסום חזק יותר מפני ביצוע לא מכוון של סקריפטים (זדוניים פוטנציאליים) ממקורות חיצוניים. אנחנו רוצים לעשות את זה כאן כי זה הרבה יותר קל בטעות לחיצה כפולה על סקריפט מאשר בדרך כלל היא לקרוא את זה באופן ידני מתוך מפגש אינטראקטיבי.
כדי להגדיר את מדיניות CurrentUser ו- LocalMachine כמו בתמונת המסך לעיל, הפעל את הפקודות הבאות מהפעלת PowerShell מוגבהת:
הגדרת-ביצועהגבלתהגדרתהגבלתהגבלתהגבלתהגבלתהגבלתהקצאת-מגבלות
כדי לאכוף את מדיניות RemoteSigned בסקריפטים המופעלים מתוך Explorer, יהיה עלינו לשנות ערך בתוך אחד ממפתחות הרישום שהצגנו קודם לכן. זה חשוב במיוחד, כי בהתאם לגירסה PowerShell או Windows, תצורת ברירת המחדל עשויה להיות לעקוף את כל ההגדרות ExecutionPolicy למעט AllSigned. כדי לראות מה התצורה הנוכחית עבור המחשב שלך, באפשרותך להפעיל פקודה זו (וודא שה- HKD PSDrive ממופה תחילה):
HKCR: \ Microsoft.PowerShellScript.1 \ Shell \ Command בחר-אובייקט '(ברירת מחדל)'
תצורת ברירת המחדל שלך תהיה ככל הנראה אחת משתי המחרוזות הבאות, או משהו דומה למדי:
(ניתן לראות ב- Windows 7 SP1 x64, עם PowerShell 2.0)
"C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe" "-file" "% 1"
(ראה ב- Windows 8.1 x64, עם PowerShell 4.0)
"C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe" "-Command" "אם ((Get-ExecutionPolicy) -ne 'AllSigned') Set-ExecutionPolicy -Scope Process Bypass; & '% 1 '
הראשון הוא לא רע, כי כל מה שהוא עושה הוא לבצע את התסריט תחת הגדרות ExecutionPolicy הקיים. זה יכול להיות טוב יותר, על ידי אכיפת הגבלות הדוקה יותר על פעולה נוטה יותר תאונה, אבל זה לא נועד במקור להיות מופעלות על לחיצה כפולה בכל מקרה, ואת מדיניות ברירת המחדל היא בדרך כלל מוגבל אחרי הכל. האפשרות השנייה, עם זאת, היא לעקוף את כל מה ExecutionPolicy אתה צפוי להיות במקום - אפילו מוגבל. מכיוון שהמעקף יופעל בהיקף התהליך, הוא ישפיע רק על הפעלות המופעלות כאשר הסקריפטים מופעלים מתוך Explorer. עם זאת, משמעות הדבר היא שאתה יכול בסופו של דבר הפעלת סקריפטים כי אחרת אתה יכול לצפות (ואת רוצה) מדיניות שלך לאסור.
כדי להגדיר את ExecutionPolicy ברמת התהליך עבור סקריפטים שהושקו מ- Explorer, בהתאם לתמונת המסך לעיל, יהיה עליך לשנות את אותו ערך רישום שעליו נשאלנו. ניתן לעשות זאת באופן ידני ב- Regedit, על ידי שינוי זה:
"C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe" "-ExecutionPolicy" "RemoteSigned" "-file" "% 1"
ניתן גם לשנות את ההגדרה מתוך PowerShell אם אתה מעדיף. זכור לעשות את זה מתוך הפעלה מוגבהת, עם HKD PSDrive ממופה.
("ברירת מחדל)" "C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe" "-ExecutionPolicy" "RemoteSigned" "-file" % 1 "'
הפעל סקריפטים PowerShell כמנהל.
בדיוק כפי שזה רעיון רע כדי להשבית לחלוטין UAC, זה גם פרקטיקת אבטחה רעה להפעיל סקריפטים או תוכניות עם הרשאות גבוהות, אלא אם כן אתה באמת צריך אותם לבצע פעולות הדורשות גישה למנהל. לכן, בניית בקשת UAC לפעולת ברירת המחדל עבור סקריפטים PowerShell אינה מומלצת. עם זאת, אנו יכולים להוסיף תפריט תפריט ההקשר החדש כדי לאפשר לנו בקלות להפעיל סקריפטים בהפעלות גבוהות כאשר אנחנו צריכים. זה דומה לשיטה המשמשת כדי להוסיף "פתח עם Notepad" לתפריט ההקשר של כל הקבצים - אבל כאן אנחנו הולכים רק היעד סקריפטים PowerShell. אנחנו גם הולכים על כמה טכניקות המשמשות את המאמר הקודם, שבו השתמשנו בקובץ אצווה במקום פריצות הרישום להפעלת סקריפט PowerShell שלנו.
כדי לעשות זאת ב- Regedit, חזור אל המקש Shell, בכתובת:
HKEY_CLASSES_ROOT \ Microsoft.PowerShellScript.1 \ Shell
שם, ליצור מפתח משנה חדש. התקשר אליו "הפעל עם PowerShell (Admin)". מתחת לזה, ליצור תת מפתח נוסף בשם "פקודה". לאחר מכן, קבע את הערך "(ברירת מחדל)" תחת פקודה זו:
Msgstr "" "& Start-Process PowerShell.exe -ArgumentList '-ExecutionPolicy RemoteSigned-File \"% 1 \ "' -Verb RunAs
לעשות את אותו הדבר ב PowerShell למעשה צריך שלוש שורות הפעם. אחד עבור כל מפתח חדש, ואחד כדי להגדיר את "(ברירת מחדל)" ערך עבור פקודה. אל תשכח את הגובה ואת מיפוי HKCR.
פריט חדש 'HKCR: \ Microsoft.PowerShellScript.1 \ Shell \ Run עם PowerShell (Admin)' פריט חדש 'HKCR: \ Microsoft.PowerShellScript.1 \ Shell \ Run עם PowerShell (Admin) \ Command' Set-ItemProperty ' HKL: \ Microsoft.PowerShellScript.1 \ Shell \ Run עם PowerShell (Admin) \ Command "(ברירת מחדל)" "C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe" "-Command" Start-Process PowerShell.exe -ArgumentList "-תוצאהקובץ RemoteSigned-File \"% 1 \ "" - פועל RunAs "'
כמו כן, לשים לב היטב ההבדלים בין מחרוזת זה להיות לשים דרך PowerShell ואת הערך בפועל זה הולך הרישום. במיוחד, אנחנו חייבים לעטוף את כל העניין ציטוטים יחיד, כפול על ציטוטים יחיד פנימי, על מנת למנוע שגיאות ניתוח הפקודה.
עכשיו אתה צריך להיות חדש תפריט ההקשר ערך עבור PowerShell סקריפטים, שנקרא "הפעלה עם PowerShell (Admin)".
האפשרות החדשה תזרז שני מופעי PowerShell רצופים. הראשון הוא רק משגר עבור השני, אשר משתמשת Start-Process עם הפרמטר "-Verb RunAs" כדי לבקש עלייה עבור הפגישה החדשה. משם, התסריט שלך אמור להיות מסוגל לפעול עם הרשאות מנהל לאחר לחיצה על דרך UAC הפקודה.
גימור נוגע.
יש רק עוד tweaks זה יכול לעזור להפוך את החיים קצת יותר קל עדיין. ראשית, מה דעתך להיפטר הפונקציה Notepad לחלוטין? כל שעליך לעשות הוא להעתיק את "(ברירת מחדל)" ערך מתוך מקש Command תחת Edit (להלן), אל אותו מיקום תחת פתח.
"C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell_ise.exe" "% 1"
לחלופין, ניתן להשתמש בחלק זה של PowerShell (עם Admin & HKCR כמובן):
"\" C \ \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell_ise.exe ""% 1 "
עוד מטרד קל הוא הרגל של קונסולה להיעלם לאחר תסריט שלם. כאשר זה קורה, אין לנו שום סיכוי לסקור את הפלט Script עבור שגיאות או מידע שימושי אחר. זה יכול להיות מטופל על ידי לשים הפסקה בסוף כל אחד הסקריפטים שלך, כמובן. לחלופין, אנו יכולים לשנות את "(ברירת מחדל)" ערכים עבור מפתחות הפקודה שלנו כדי לכלול את הפרמטר "-NoExit". להלן הערכים שהשתנו.
(ללא גישה למנהל המערכת)
Msgstr "" "-NoExit" "-ExecutionPolicy" "RemoteSigned" "-file" "% 1"
(עם גישה למנהל המערכת)
Msgstr "" "& Start-Process PowerShell.exe -ArgumentList '-NoExit -ExecutionPolicySystem -File \"% 1 \ "' - פועל RunAs "
וכמובן, אנחנו נותנים לך את אלה פקודות PowerShell מדי. תזכורת אחרונה: Elevation & HKCR!
(לא-מנהל)
("ברירת מחדל)" "C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe" "-NoExit" "-ExecutionPolicy" "RemoteSigned" - ""% 1 "
(מנהל מערכת)
(ברירת מחדל) "" C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe "" -Command " "" Start & Process PowerShell.exe -ArgumentList "-NoExit -ExecutionPolicySystem -File \"% 1 \ "" - פועל RunAs "'
לוקח את זה לסחרור.
כדי לבדוק את זה, אנחנו הולכים להשתמש בסקריפט שיכול להראות לנו את ההגדרות ExecutionPolicy במקום האם או לא את הסקריפט הושק עם הרשאות מנהל. התסריט ייקרא "MyScript.ps1" וישמור ב "D: \ Script Lab" במערכת המדגם שלנו. הקוד הוא למטה, עבור הפניה.
(). () [Security.Principal.WindowsBuiltInRole] "מנהל")) (כתיבת פלט '' מנהל מערכת ') אחר כתיבת פלט 'פועל מוגבל!' Get-ExecutionPolicy-List
באמצעות הפעולה "הפעל עם PowerShell":
באמצעות הפעולה "הפעל עם PowerShell (Admin)", לאחר לחיצה באמצעות UAC:
כדי להדגים את ExecutionPolicy בפעולה בהיקף התהליך, אנו יכולים לגרום ל- Windows לחשוב שהקובץ הגיע מהאינטרנט באמצעות קוד זה של קוד PowerShell:
Add-Content -Path 'D: \ Script Lab \ MyScript.ps1' -שיעור '' [ZoneTransfer] 'nZoneId = 3' -Stream 'Zone.Identifier'
למרבה המזל, היה לנו - NoExit מופעלת. אחרת, השגיאה הזאת היתה רק מצמצה, ולא היינו יודעים!
ניתן להסיר את Zone.Identifier באמצעות זה:
Clear-Content -Path 'D: \ Script Lab \ MyScript.ps1' -Stream 'Zone.Identifier'
הפניות שימושיות:
- הפעלת סקריפטים של PowerShell מקובץ אצווה - בלוג התכנות של דניאל שרדר
- בדיקת הרשאות מנהל ב- PowerShell - היי, Scripting Guy! בלוג