חיבור Schedule Task ל-Event

24 בSeptember 2012

אין תגובות

שלום לכולם

כאן תמיר לוי , יועץ תשתיות ב-Agile IT

כבר מהגרסאות הראשונות של Windows אנחנו מכירים את המשימות המתוזמנות – (Task Scheduler) להרצת משימות בתאם לטריגרים מסויימים.
מעטים מנצלים את היכולות שלו ומכירים את ההשתכללויות שלו לאורך השנים.

אני רוצה להציג בפניכם פתרון מאוד יעיל שאני מצאתי לנכון לנצל את יכולות ה-Task Scheduler עבורי בשיתוף עם PowerShell ואיך ניתן להתפרע ולהשתמש בהם לכל כך הרבה דברים מועילים

ב-Windows 8 נוספה אפשרות לרשתות האלחוטיות לקבוע  אם הן Metered Connection או לא.
הרעיון פשוט. לא כל רשת שאנחנו מתחברים אליה היא לא מוגבלת, בדומה לאינטרנט מהרשתות סלולאריות שאנחנו משלמים לפי חבילה חודשית של X GB. (יש עדיין מושג של – לא Unlimited Smile )
בעזרת הגדרת רשת מסויימת כ-Metered Connection אני יכול לקבוע פיצ’רים מסויימים ב-Windows לא יעבדו ברקע בעת חיבור אליה. דוגמא טובה היא Windows update
ובכך ברגע שאני מחובר לרשת שהיא Metered אני יודע שהתעבורת רשת שלי לא תנסוק לשחקים בלי ידיעתי.
Metered Connection

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

אני אפרט את השלבים:

שלב ראשון: יצירת סקריפט PowerShell שמסיים את כל התהליכים שאני יודע שעלולים לנפח את השימוש ברשת ולשמור בקובץ. למשל: hotspotconnected.ps1

get-process dropbox | Stop-Process
get-process SkyDrive | Stop-Process
Get-Process googledrivesync | Stop-Process

שלב שני: יצירת משימה מתוזמנת חדשה דרך Task Scheduler

הגדרת שם ותיאור ל-task:
Scheduled Task step 1

ב-Triggers בחירה באפשרות האחרונה When a specific event is logged:

Scheduled Task step 2

בחירה בלוג של רשתות הוא Microsoft Windows WLAN-AutoConfig/Operational

מס האירוע של חיבור לרשת הוא  Event ID: 11001

Scheduled Task step 3

המשימה היא Start a program:

Scheduled Task step 4

הפקודה במקרה הזה היא powershell.exe והפרמטר הוא הנתיב של הסקריפט
Scheduled Task step 5

כרגע המשימה תעבוד אבל ע”מ לקבוע שהיא תרוץ רק כאשר רשת מסויימת יש להיכנס למאפיינים של המשימה ותחת conditions לסמן את שם הרשת
Scheduled Task step 6

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

כאן התהליך קצת אחר מכיוון שדרך ממשק ניהול המשימות אני יכול לקבוע תנאי שהמשימה תרוץ כל פעם שרשת מסויימת מחוברת אבל לא הפוך.
ע”מ לבצע את הבדיקה מאיזו רשת התנתקתי שהשתמשתי בקריאה של ה-EVENTLOG  דרך PowerShell.

התהליך הוא דיי דומה

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

$NetworkName = ‘Tamir Hotspot’
$discon = Get-WinEvent -FilterHashtable @{logname=’Microsoft-Windows-WLAN-AutoConfig/Operational’; id=8003} -MaxEvents 1
if ($discon.Properties[3].value -eq $NetworkName) {
C:\Users\user\AppData\Roaming\Dropbox\bin\Dropbox.exe /home
C:\Users\user\AppData\Local\Microsoft\SkyDrive\SkyDrive.exe /background
& ‘C:\Program Files (x86)\Google\Drive\googledrivesync.exe’ /autostart
}

שלב שני: זהה ליצירת המשימה בשלב ראשון פרט ל-Event ID שהוא הפעם ניתוק מרשת,  8003,  ואין צורך בבחירת condition מכיוון שהוא נעשה כבר בתוך הסקריפט.

כמובן שאפשר לתת לדמיון לרוץ ולעשות דברים הרבה יותר מעניינים ע”י השילוב של משימות מתוזמנות עם סקריפטים. ללא ספק העננים הם הגבול

בהצלחה בשימוש

תמיר לוי

הוסף תגובה
facebook linkedin twitter email

Leave a Reply

Your email address will not be published. Required fields are marked *