חוויית משתמש בעדכון לווינדוס 11

חוויית משתמש בעדכון לווינדוס 11

מדי פעם אני מפרסם מאמר בנושא סיסטם או אבטחת מידע, כשהכלי החביב עליו הוא PowerShell.

הפעם נעסוק בהפצה של הודעה קופצת למשתמשים. הודעה שתעדכן אותם בנושא מסוים בצורה שלא יוכלו להתעלם ממנה.

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

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

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

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

3.     פירמוט המחשב והתקנה של ווינדוס 11 על פלטפורמה נקיה.

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

הבעיה:

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

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

איך עושים את זה?

הפתרון:

כעת אסביר את פעולת הסקריפט, ולבסוף אביא אותו במלואו.

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

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

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

–         יש לוודא שהתמונה לא גדולה מדי מבחינת פיקסלים, שלא תהיה גדולה יותר מהתצוגה של המשתמש.

לאחר שנבנתה חלונית ההודעה (22 שורות), מתבצע תנאי שבודק האם מותקן במחשב ווינדוס 10. הרי מי שכבר שדרג לווינדוס 11 או עבר איתחול, לא נרצה שההודעה תקפוץ אצלו.

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

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

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

תצורת העבודה המומלצת:
  • להפיץ את הסקריפט על מנת שירד למחשבים של המשתמשים המיועדים לעדכון.
  • עוד לפני שיורד העדכון, לוודא שהופץ לכל מי שצריך.
  • להגדיר הפעלה מחזורית כל 10-20 דקות. את זה עושים באמצעות SCCM Package.

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

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

הסקריפט:

$pic = [System.Drawing.Image]::Fromfile('C:\win11.png')

 

$form = new-object Windows.Forms.Form

$form.Text = "!התרעת איתחול"

$form.Width = $pic.Size.Width + 20;

$form.Height = $pic.Size.Height + 70;

$window = new-object Windows.Forms.PictureBox

$window.Width = $pic.Size.Width + 10;

$window.Height = $pic.Size.Height + 30;

$window.Left = 3

 

$okButton = New-Object System.Windows.Forms.Button

$okButton.Size = New-Object System.Drawing.Size(75,23)

$okButton.Location = New-Object System.Drawing.Point((($pic.Size.Width - $okButton.Size.Width) / 2),($pic.Size.Height + 5))

$okButton.Text = 'OK'

$okButton.DialogResult = [System.Windows.Forms.DialogResult]::OK

$form.AcceptButton = $okButton

$form.Controls.Add($okButton)

 

$window.Image = $pic;

$form.controls.add($window)

$form.Add_Shown( { $form.Activate() } )

#$form.ShowDialog()

 

if (((Get-WmiObject -class Win32_OperatingSystem).Caption).substring(20,2) -eq "10") {

   $Session = New-Object -ComObject "Microsoft.Update.Session"

   $Searcher = $Session.CreateUpdateSearcher()

   $historyCount = $Searcher.GetTotalHistoryCount()

   $UpdateHistory = $Searcher.QueryHistory(0, $historyCount)

   $checker = $UpdateHistory | ?{$_.title -eq "windows 11"}

   if ($checker -ne $null) {

       #[console]::beep(2000, 1000)

       $form.ShowDialog()       

   }
}
הודעת תמונה למשתמש
דוגמה לתמונה שקופצת

ולבסוף:

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

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

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

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

הוספתי פה כמה  צפצופים, אבל כאמור – לא מומלץ להשתמש. אולי במקרה שבו ההודעה קופצת בתגובה לפעולה אסורה או משהו דומה.

#[console]::beep(2000, 1000

#[console]::beep(2000, 1000)

#[console]::beep(2000, 1000)

#[console]::beep(2000, 1000)

$not = @"

!הודעה חשובה

"@

$pop = New-Object -ComObject Wscript.Shell 

$pop.Popup($not)

#[console]::beep(2000, 2000) )
חלונית הודעה
וכך זה נראה

כתיבת תגובה