ארכיון

Archive for the ‘Windows’ Category

לא לשכוח להתקין TELNET על Windows

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

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

נו טוב… נצטרך עכשיו להתחיל לפשפש ב-ACL של ה-Firewall.

Firewall הוא כמו אישה – אי אפשר איתו ואי אפשר בלעדיו….

מחיקת קבצים ישנים במערכת ההפעלה Windows

לעיתים אנו מעוניינים למחוק קבצים ישנים בספריה מסויימת או בעץ ספריות. למשל: היינו רוצים למחוק את כל הקבצים שגילם 10 ימים ויותר ואת אלה שנוצרו ב-10 הימים האחרונים היינו מעוניינים להשאיר. אבל לצערינו, אין פקודת DOS במערכת ההפעלה Windows המאפשרת מחיקה מותנית שכזו.

ישנן כמה אפשרויות לבצע את זה:

  • לכתוב סקריפט ב-VBSCRIPT
  • לכתוב סקריפט בשפה החדשה POWERSHELL.
  • לכתוב תוכנית קטנה בשפה עילית.

אני חובב סקריפטים. כשאני עובד ב-UNIX או ב- LINUX אני מוצא את עצמי כותב לא מעט סקריפטים. גם ב-Windows ניתן לכתוב סקריפטים בקלי קלות אם ב- VBSCRIPT או POWERSHELL. האחרונה מצריכה רקע בדוט נט.

במאמר זה אני רוצה להציג סקריפט שכזה שכתבתי ב-VBSCRIPT. לסקריפט יש 3 פרמטרים: שם ה-folder ממנו יש למחוק קבצים ישנים, כמה ימים מקסימום יש לשמור על הקבצים (כל השאר יש למחוק) ואופציה למחוק רק קבצים עם סיומת (extension) מסויימת. הסקריפט מוחק באופן רקורסיבי את הכל הקבצים ב-folder המצויין בפרמטר הראשון וכן את כל הקבצים הישנים שבתיקיות תחתיו.

הרי הוא לפניכם:

'
' This VB Script is responsible for deleting files in a given folder (as an external argument)
' that are older than X days.
' The script also scans files recursively in the subfolder of the given folder
'
' Written by: Lior King
'

dim fso
Set fso = CreateObject("Scripting.FileSystemObject")

Dim oArgs, argsCount

Set oArgs = WScript.Arguments.Unnamed
argsCount = WScript.Arguments.Unnamed.Count

dim MainFolder

If argsCount > 0 then
  set MainFolder = fso.GetFolder(oArgs(0))
End if

If argsCount = 1 then
   ProcessFolder MainFolder, 0, ""
Elseif argsCount = 2 then
   ProcessFolder MainFolder, oArgs(1), ""
ElseIf argsCount = 3 then
   ProcessFolder MainFolder, oArgs(1), oArgs(2)
Else
   WScript.Echo "Error – Missing arguments !!!"
   WScript.Echo ""
   WScript.Echo "Argument 1 – Folder name"
   WScript.Echo "Argument 2 (optional) – DaysBack to delete (Default – ignore dates)"
   WScript.Echo "Argument 3 (optional) – File extension to delete (Default – ignore extensions)."
End if

'—————
' ProcessFolder
'—————
Sub ProcessFolder (folder, DaysBack, Extension)
   On Error Resume Next
   Dim f, singlefile, SubFolders,  fileslist, ExtensionPos

   Set fileslist = folder.Files

   For Each singlefile in fileslist
      ' Check if there is an extension to the file
      ExtensionPos = InStrRev(singlefile.Name,".")
      If ExtensionPos > 0 or Len(Extension) = 0 then
   ' Check if the file's extension matches the require extension.
        if UCase(Mid(singlefile.Name, ExtensionPos+1)) = UCase(Extension) or Len(Extension) = 0 then
         if singlefile.DateLastModified < (now()-DaysBack) then
               singlefile.Delete(force)
            end if
         end if
      end if
   Next

   '
   ' Process recursively the subfolders
   '

   Set SubFolders = folder.Subfolders
   For Each f in SubFolders
     ProcessFolder f, DaysBack, Extension
   Next

End Sub

הפעלת הסקריפט לדוגמה (מתוך שורת פקודה ב-DOS), בהנחה שהסקריפט שמור בקובץ ששמו DeleteOldFiles.vbs  ואנו רוצים למחוק קבצים עם סיומת txt שגילם יותר מ-3 ימים:

cscript DeleteOldFiles.vbs  c:\myfolder 3 txt

לאסוף מדדים ממערכת ההפעלה Windows ולתחקר אותם בהמשך

Perfmon הוא כלי נפלא ופשוט המאפשר לראות מדדי מערכת. אבל – לעיתים אנו רוצים לדגום יום שלם או שבוע שלם של מדדים שמייצר שרת Windows ואח"כ לנתח את הנתונים. כמו למשל, מתי היו רגעי שיא של פעולות CPU, רגעי שיא או שפל של תור הפניות ל-I/O  משכי זמן של Peaks וכו'.

ישנן שתי דרכים לעשות זאת:

דרך אחת – להשתמש ב-Utility של Windows הנקראת LOGMAN.

דרך שניה – לבצע "שאילתות" למשאבי השרת באמצעות אובייקטים של WMI או Windows Management Instrumentation. במקרה זה אפשר להשתמש ב-VBScript או לכתוב תוכנית בשפה עילית (DOT NET או Unmanaged code).

במאמר הזה אתמקד בשימוש ב-LOGMAN. שימוש ב-WMI הוא נושא למאמר נפרד ואולי אפילו לכמה מאמרים. נשאיר את זה בצד לעת עתה.

LOGMAN היא תוכנית שירות שבאה בכל גרסאות WINDOWS והיא מאפשרת דגימות של מדדי המערכת בדומה ל-PerfMon. שלא כמו PerfMon, תוכנית LOGMAN רצה ברקע ללא ממשק משתמש ובכך היא מהווה נטל מינימלי ביותר על השרת. LOGMAN יכולה לדגום את השרת במרווחי זמן קבועים שניתן לקבוע לה (כל שנייה זה המינימום של הדגימה) והיא יכולה להזין את המדדים לקובץ או אפילו ל-DB רלציוני. אפשר אפילו להפעיל את כריית המדדים על שרת אחר ברשת.

ב-Books On Line (או BOL) של מיקרוסופט אפשר למצוא תיעוד של כל שלל האפשרויות לשימוש בתוכנה זו.

כדי ללמוד איך להשתמש ב-LOGMAN, בואו פשוט נראה דוגמה. בחלון שורת פקודה (CMD) נבצע את הפקודה הבאה:

logman create counter MyTrace -s MyServer -f  sql -si "00:00:05" –v -o DBServer!DBA -cf "c:\counters.config" -u MyUsername MyPassword

בפקודה זו הגדרנו תהליך איסוף מדדים בשם MyTrace שדוגם מדדים משרת בשם MyServer כל 5 שניות ואת התוצאות אנחנו רוצים להזין לטבלה ב-DB רלציוני התומך ODBC. הנתונים יכנסו לשרת DB בשם DBServer  לבסיס נתונים הנקרא DBA (באורקל זאת תהיה סכימה בשם DBA). ה-LOGIN לבסיס הנתונים יהיה עם המשתמש MyUsername ועם הסיסמה MyPassword. המדדים שברצוננו לדגום מפורטים בקובץ בשם counters.config.

כדי העסק יעבוד, יש להגדיר את ה-DB שאליו יש להזין את המדדים ב- ODBC Data Sources (ע"י Control Panel -> Administrative tools -> Data Sources). בלשונית SYSTEM DSN הוסיפו את שרת בסיס הנתונים (יכול להיות SQL Server, אורקל, MySQL או כל בסיס נתונים אחר שתומך ODBC).

LOGMAN יצור באופן אוטומטי טבלה (אם היא לא קיימת) שאליה הוא יזין את המדדים.

את רשימת המדדים אפשר לבנות בקלות ע"י PerfMon. אספו את המדדים שברצונכם לדגום עם LOGMAN באמצעות PerfMon. אח"כ לחצו CTRL-L ויפתח חלון. בלשונית DATA תוכלו לראות את שמות המדדים שבחרתם כפי שיש לציינם בקובץ הקונפיגורציה. אפשר כמובן לציין לא רק מדדים של Windows אלא גם מדדים של SQL Server או אורקל.

לאחר שהגדרנו את תהליך איסוף המדדים, כל שנותר הוא להפעיל אותו ע"י הפקודה:

logman start -s MyServer MyTrace

ה-LOGMAN יצא לדרך ועכשיו הוא מתחיל להזין נתונים לטבלה.

כדי לעצור את התהליך אפשר להריץ:

logman stop -s MyServer MyTrace

התהליך נעצר. ניתן לשוב ולהפעילו ע"י START.

 

הבלוג שלי

הבנתי שהגיע הזמן לכתוב בלוג מקצועי משלי.

כיועץ בתחומי IT שונים ומגוונים (בעיקר בסיסי נתונים), אני נתקל בכל מיני מיקרים וחשבתי: מדוע לא לשתף אנשים נוספים בבלוג שלי? ואם כבר – אז שיהיה בעברית, בשפת האם. למרות ששפת האם של המקצוע היא לחלוטין אנגלית.

הבעסה שבלכתוב בלוג מקצועי בעברית היא להפוך כיוון כל שניה מעברית ל-English וחוזר חלילה – אבל … אתגבר.

אני מקווה לקבל תגובות של גולשים על הפוסטים שלי ומקווה להועיל במשהו לקולגות שלי במקצוע.