PrimalForms: Build your Script GUI in Seconds

2010/01/25 بواسطة Sherif Talaat

في أول موضوع كتبته عن PowerShell كنت شرحت مثال على إزاي ممكن نستخدم PowerShell في تصميم GUI لأي PowerShell Script وكان المثال عبارة عن Windows Form، ومع ان الموضوع كان جديد و شد انتباه ناس كتير بس كان مشكلته انه محتاج انك تكتب كود كتير و في نفس الوقت انك يكون عندك خبرة في الـ #C عشان تبقي عارف الـ namespaces الخاصة بـ Windows Forms وتبقي عارف يعني ايه Events handler و إلي اخر المكونات اللي تخص اي Windows Application. طبعا لصعوبة الموضوع بدأ بعض الناس إهمال الخاصية دي لحد ما ظهر PrimalForms.

PrimalForms دي tool عملتها شركة اسمها SAPIEN ووظيفتها هي انها GUI-Builder بتستخدم في تصميم الـ GUI. بإستخدام PrimalForms تقدر تصمم الـ GUI اللي انت عايزه عن طريق مجموعة من الـ Components الخاصة بالـ UI. كل اللي عليك هو انك تختار الـ component اللي عايزها، على سبيل المثال button, textbox, ComboBox و تعمل Drag & Drop جوا الـ Form بتاعتك وبعض متخلص التصميم بتدوس على Export to PowerShell Code علشان تحول الـGUI دي لكود PowerShell تقدر تستخدمه في الـScript بتاعك.

PrimalForms دي ببلاش بجون اي مقابل، هتلاقي مكتوب عليها Community Edition

للتحميل: PrimalForms Community Edition

image 

image

Windows PowerShell Scriptomatic

2010/01/23 بواسطة Sherif Talaat

يوم PowerShell Workshop و تحديداً عند شرح كيف يمكن لـPowerShell التعامل مع الـ WMI، سأل أحد الحاضرين “ هو عشان إستخدم الـ WMI  محتاج أحفظ كل الـ WMI Classes، دا عددها كبير أوووووي؟” الأجابة طبعا كانت لا والفضل هنا يرجع لـ tool  اسمها Windows PowerShell Scriptomatic  ودي وظيفتها انك بإستخدامها تقدر تشوف كل الـ WMI classes عندك في الويندوز و تختار الـclass المناسب و كمان تكتبلك الـPowerShell script اللي بيستخدم و بيتعامل مع الـ WMI class اللي انت اختارته يعني بأختصر كل اللي محتاج تحفظه هو إسم الـtool :) .

image

للتحميل: Windows PowerShell Scriptomatic

PowerShell Workshop @MS Egypt

2010/01/23 بواسطة Sherif Talaat

PowerShell Workshop كانت يوم الأربعاء والخميس 20،21  يناير 2010. في اليوم الأول إتكلمت فيه عن ايه هو Windows PowerShell  وايه اهم مميزاته و ازاي هو مهم للـ Developers  زي ماهو مهم للـ IT Professionals وفي اليوم التاني كان كله تطبيق عملي على كل حاجة اتشرحت في اليوم الأول. الحمدلله اليوم كان كويس وانطباع الحضور عن الموضوع كان كويس جداً، وعشان كده قررت اني هكرر الموضوع اكتر من مرة.

IMG_2090 IMG_2091 IMG_2092 IMG_2093 IMG_2094 IMG_2095  IMG_2098 IMG_2099 IMG_2102 IMG_2104 IMG_2105 IMG_2106 IMG_2107

Enable Remoting on Windows 7

2009/11/28 بواسطة Sherif Talaat

PowerShell Remoting خاصية من أهم الخواص اللي تميز بيها PowerShell عن غيره من الـ Shells التقليدية. زي ما قولت قبل كده ان خاصية الـ Remoting بتوفر إمكانية تشغيل وتنفيذ أوامر PowerShell او ما يعرف بـ cmdlets على أي جهاز كمبيوتر داخل الـ network بشرط ان يكون PowerShell موجود (Installed) على الكمبيوتر ده.

على الرغم من أن PowerShell Remoting خاصية أكتر من ممتازة، لا يمكن إستخدامها في أي Workgroup environment أو peer-to-peer (P2P) network. يمكن إستخدامها فقط في Domain-Environment أو AD-Environment لأسباب أمنية (Security).

دلوقتي في Windows 7 بقي ممكن إستخدام خاصية الـ Remoting في أي workgroup أو Peer-to-Peer.

ملحوظة: قبل ما أبدء في الشرح يفترض ان يكون عندك 2 كمبيوتر (A,B) عليهم Windows 7  و Windows PowerShell v2 و التأكد من الـ 2 كمبيوتر في نفس الـ IP Add. range، على سبيل المثال الـ IP Address لكمبيوتر A هيكون 192.168.1.10 والـ IP Address لكمبيوتر B هيكون 192.168.1.20.

دلوقتي هنحاول أن احنا نفتح Remote Session من كمبيوتر A إلي كمبيوتر B عن طريق إستخدام أمر Enter-PSSession:

Enter-PSSession 192.168.1.20

هنلاقي أن PowerShell Console طلع Error بيقول ان في مشكلة في الـ WinRM. الموضوع ببساطة ان الـ Remoting بيعتمد على حاجة اسمها Windows Remote Management المسئولة عن إستقبال اي Remote Connection، سبب الـ Error هو ان الـ WinRM Service مقفولة على الـ Windows عشان هي Secure by default لأسباب أمنية.

الخطوة الأولي: تشغيل WinRM على كمبيوتر A و B

لتشغيل WinRM هنستخدم أمر  Set-WSManQuickConfig ، قبل متستخدم الأمر تأكد من:

  •  ان ليك Administrative Privileges.
  •  أنك عايز تشغل WinRM وقادر علي تأمين جهازك وشبكتك وده عشان الأمر ده بيعمل الآتي:
  •  بيتأكد أن WinRM شغالة ولا مش شغالة بيشغلها.
  •  بيغير الـ Start mode للـ WinRM Service ويبقي Automatic.
  •  بيقوم بإنشاء Listner لإستقبال أي request من أي IP Address. دائما اي request بيتم عن طريق HTTP Protocol.
  •  بيعمل Firewall Exception rule للـ WinRM Service عشان يتأكد ان الـFirewall مش هيقفل اي traffic يخص الـ WS-Management.

بمجرد كتابة الأمر Set-WSManQuickConfig و الضغط على Enter لتنفيذه، هتظهرلك رسالة توضح الـ 4 نقاط اللي اتكلمنا عليها

Set-WSManQuickConfig

بعد التأكد من تنفيذ الأمر على كمبيوتر A و كمبيوتر B. هنحاول مرة تانية ان نفتح Remote Session من A إلي B عن طريق أمر Enter-PSSession. لكن هيظهر Error تاني بس السبب مختلف المرة دي. أول مرة كان سبب الـError هو ان الـWinRM Service مش شغالة. المرة سبب الـError هو ان الWinRM بترفض (Reject) أي request غير مُأمن بالـ Kerberos او على الأقل يكون بيستخدم نفس الـ Security mechanism أو ان الكمبيوتر اللي بيرسل الـrequest مش موجود في الـtrusted list في الكمبيوتر اللي بيستقبل، و بما أننا  بنستخدم Windows 7 على كمبيوتر A و B يبقي بنستخدم نفس الـ Security mechanism ،يبقي لنا ان الكمبيوتر مش موجود في الـ trusted list. والهدف منها هو التأكد من أن الكمبيوتر المحددة فقط هي المسموح لها بإستخدام خاصية الـ Remoting وليس أي كمبيوتر أخر.

قبل إضافة كمبيوتر B إلي الـ trusted list في كمبيوتر A.

هنستخدم أمر Test-WSMan عشان نتأكد ان على الأقل كمبيوتر A وكمبيوتر B قادرين على فتح Remote Sessions بينهم بغض النظر عن قبول او رفض الـ requests.

Test-WSMan 192.168.1.20

 

الخطوة الثانية: إضافة كمبيوتر A و B إلي الـ TrustedHosts list

الخطوة رقم 2 هي ان احنا هنعرف الـ WinRM على كل كمبيوتر على الكمبيوتر التاني عشان يسمح بإستقبال أي request لفتح اي remote session عن طريق إضافة الكمبيوتر في الـ trustedhosts list. على سبيل المثال عشان نسمح لكمبيوتر B ان يبعت request إلي كمبيوتر A يبقي لازم نُضيف الـ IP Address لكمبيوتر B في الـtrustedhosts list لكمبيوتر A. ويمكن كتابة “ * ” بدلاً من الـIP Address وفي هذه الحالة سيقوم الـWinRM بإستقبال اي Request من اي كمبيوتر وده بيكون عن طريق الأمر ده:

Set-Item WSMan:\localhost\client\trustedhosts * –force

الخطوة الثالثة: جرب و إستمتع…!!! :) :)

بعد تنفيذ الخطوة رقم 2 أصبحت خاصية  الـ remoting جاهزة للإستخدام.

Enter-PSSession 192.168.1.20

بعد لحظات من الضغط على Enter لتنفيذ الأمر (الفترة اللي بيفتح فيها الـremote session) هيظهر الـ PS prompt لكمبيوتر B. دلوقتي تقدر تنفذ اي cmdlet على كمبيوتر B من خلال كمبيوتر A عن طريق PowerShell Remoting.

يمكن إستخدام أمر Exit-PSSession عشان تقفل الـRemote Session.

PowerShell Sessions in PDC2009

2009/11/26 بواسطة Sherif Talaat

CEC 2009 and windows PowerShell

2009/11/26 بواسطة Sherif Talaat

أعلن Jeffrey Snover ان Windows PowerShell دلوقتي بقي جزء من Microsoft Common Engineering Criteria 2009 وده معناه ان PowerShell  هيكون موجود built-in في أي إصدار جديد من أي سوفت وير هتقوم بإصداره شركة ميكروسوفت إبتداءً من عام 2009.

PowerShell in Windows 7

2009/03/07 بواسطة Sherif Talaat

ميكروسوفت أصدرت النسخة التجريبية (Beta) من Windows 7،و من أهم مميزات Windows 7 هو أن PowerShell v2 يتم تحميله تلقائياً بمجرد تحميل Windows 7. كده يبقي Windows PowerShell موجود على الجيل الجديد من Windows Platform اللي يشمل Windows 7 – Windows Server 2008 مع العلم أن PowerSehll لم يكن متاح في Windows Server 2008 ServerCore ولكن تم إضافته مؤخراً في Windows Server 2008 R2. وطبعا كده مشكلة ان PowerSehll موجود على Windows Server ومش موجود على Windows Client إتحلت وهيبقي الـPowerShell موجود زي الـcmd.exe على أي Windows Operating System، وطبعاً ده هيبقي فرصة لكل الناس انها تعرف وتستخدم Windows PowerShell.

WMI in PowerShell

2009/01/19 بواسطة Sherif Talaat

في موضوع WMI in brief اتكلمنا بإيجاز عن الـWMI وإستخداماته. وإتكلمنا عن حاجة إسمها WMI Consumer أو WMI Application وقولنا ان دي الـTool اللي من خلالها نقدر نستخدم الـWMI علشان نحصل على أي معلومات عن الـManaged Resource. وذكرنا أمثلة ليها وكان من ضمنها الـPowerShell Script. وفي الموضوع ده هنعرف إزاي نقدر نستخدم WMI من خلال Windows PowerShell.

في PowerShell طريقتين علشان تقدر تستخدم الـWMI.

الطريقة الأولي: هي إنك تستخدم أمر Get-WmiObject

إستخدام الأمر: get-help get-wmiobject -full علشان تعرف كل المعلومات الخاصة بالأمر Get-Wmiobject زي الـsyntax والـparameters.

مثال 1: عرض معلومات عن الكمبيوتر بإستخدام WMI

{"Get-Wmiobject -class Win32_ComputerSystem | Where {$_.Name -eq "XYZ

في مثال 1، إستخدمت إسم الـWMI class الخاص بالـBIOS كـparameter للأمر Get-WmiObject

مثال 2: عرض كل الـWMI Classes الموجوده في CIMV2 namespace

Get-Wmiobject -namespace "Root\CIMV2" -list

في مثال 2، إستخدمت الـnamespace كـparameter للأمر Get-Wmiobject.

مثال 3: إستخدام WMI Query للحصول على معلومات عن الـService

"Get-Wmiobject -Query "Select * from Win32_Service

الطريقة الثانية: إستخدام  PowerShell WMI Type Accelerator

الـType Accelerator الخاصة بـWMI:

  •  [WMI]
  •  [WMIClass]
  • [WMISearcher]

 [WMI]: وظيفته أنه يساعدك في الحصول على معلومات عن WMI Object محدد عن طريق أنك تستخدم خاصية من خصائص الـObject ده في الحصول على كل معلوماته. أحياناً بيكون أسهل من الـGet-WMIobject في حالة توافر معلومات عن الـWMI Object. أو بمعني أخر الـ[WMI] يستخدم مع الـObjects.

مثال 4: عرض معلومات عن الكمبيوتر بإستخدام WMI] Type Accelerator]

' "WMI]'\\.\root\CIMv2:Win32_ComputerSystem.Name="COMPUTERNAME]

في مثال 4، إستخدمنا [WMI] بدلاً من Get-Wmiobject، وحددنا الـWMI Object path و إختارنا خاصية (Property) من خصائص الـ Object  المطلوب عرض معلوماته، في هذا المثال الخاصية هي (Name)

[WMIClass]: ده بيكون مخصص للإستخدام مع الـWMI Classes

مثال 5:

* WMIClass]'\\.\root\CIMv2:Win32_ComputerSystem' | format-list]

[WMISearcher]: هذا النوع يستخدم الـWMI Query في شكل String. ثم يقوم بإنشاء WMI Searcher Object تستخدم الـQuery. أخيراً يستخدم ()Get لتنفيذ الـQuery  وعرض الناتج.

مثال 6:

"ComputerInfo = [WMISearcher]"Select * From Win32_ComputerSystem$
()ComputerInfo.GET$

WMI in brief

2009/01/18 بواسطة Sherif Talaat

إيه هو الـWMI؟

WMI دي إختصار لـWindows Management Instrumentation وهو عبارة عن تكنولوجيا مختصة بالتحكم وإدارة نظام تشغيل ويندوز أو ما يسمي بـ Windows Management. يعتبر WMI واحد من مكونات نظام تشغيل ويندوز إبتداً من Windows 2000.

من أهم مميزات WMI و بردو من أهم أسباب تطويره، هو أنه يوفر طريقة سهلة و مباشرة للتعامل مع الـManaged Resources الخاصة بالكمبيوتر من خلال الويندوز. الكمبيوتر ده ممكن يكون Local Computer أو ممكن يكون Remote Computer.

يعني إيه Managed Resources؟

المقصود بالـManaged Resources هي أي مكونات جوا الكمبيوتر يمكن للـWMI انه يتعامل معاها سواء كانت Logical Components زي معلومات عن نظام التشغيل، معلومات عن الـUser Accounts. أو Physical Components زي الـBIOS أو الـProcessor. يعني نقدر نقول سواء كانت Software أو Hardware.

يعني إيه WMI namespace؟

ببساطة الـnamespace هو طريقة لتجميع الحاجات(objects) اللي شبه بعض او مرتبطه ببعض في مجموعة واحده (Scope). مفهوم الـnamespace ده ممكن نطبقه على أي حاجة في الدنيا. هناخد الكمبيوتر كمثال للتوضيح. مكونات الكمبيوتر زي الـMotherBoard,Processor,RAM,Hard Disk دي كلها مرتبطه ببعضها وليها علاقة ببعض، في الحالة دي ان احنا نعملها namespace اسمه ComputerHardware. وبكده أول متسمع كلمه Computer Hardware هتفهم ان المقصود بيها هي المكونات زي الـMotherBoard,Processor,RAM,Hard Disk. دلوقتي بعد ما عرفت يعني ايه namespace من السهل انك تعرف يعني إيه WMI namespace. الـWMI namespace هي الـnamespace الخاصة بكل حاجة يقدر الـWMI يتعامل معاها. يعني على سبيل المثال وليس لبحصر هتلاقي WMI namespace إسمه Hardware ده علشان الـhardware اللي يقدر الـWMI يتعامل معاه. كمان هتلاقي namespace اسمه SQL Server علشان الـWMI الخاص بالـSQL

يعني إيه WMI Class؟

الـWMI بيستخدم الـClasses علشان يوصف الخصائص (Properties) لكل object موجود جوا الـnamespace. يعني مثلاً الـWMI class اللي اسمه Win32_BIOS ده بيبقي جواه كل الملعومات اللي تخص الـBIOS زي نوعه، والسوفت وير اللي موجود عليه، والشركة المنتجة، وتاريخ إصداره.

http://msdn.microsoft.com/en-us/library/aa394554(VS.85).aspx

يعني إيه WMI Provide؟

الـProviders بيستخدمها الـWMI في إنه يطلب (Request) المعلومات عن Managed Resource من الويندوز. يعني مثلاً في DNS Provider علشان تقدر تتعامل مع الـDNS من خلال الـWMI.

http://msdn.microsoft.com/en-us/library/aa394570(VS.85).aspx

يعني إيه WMI Consumer أو WMI Application؟

الـProvider كان وظيفته أن يحصل على المعلومات من نظام التشغيل – الويندوز – و الـConsumer وظيفته أن يحصل على المعلومات من الـWMI أو بمعني تاني أنه يحصل على المعلومات اللي بيحصل عليها الـWMI من الـProviders. الـConsumer ده ممكن يكون برنامج بيستخدم الـWMI، على سبيل المثال برنامج Microsoft System Management Server المشهور بإسم SMS. أو ممكن يكون PowerShell Script – VBScript بيستخدم الـWMI Query.

يعني إيه WMI Query؟

الـWMI Query هو الأمر المستخدم بواسطه الـWMI للحصول على معلومات عن الـobjects.

يعني إيه WMI Query Language؟

WQL هي اللغة اللي بيتك كتابه الـWMI Queries بإستخدامها. وهي لغة فرعية من لغة SQL المستخدمه مع قواعد البيانات Database. مما يعني أن الـWQL تشبه في كتابتها لغة SQL.

يعني إيه WMI Repository أو WBEM؟

الـWMI Repository أو WBEM هو المكان الذي يحتوي على المعلومات الخاصة بالنظام والمستخدم بواسطة الـWMI. يمكننا تخيل الـWBEM أنه قاعدة البيانات DB الخاصة بمعلومات النظام.

الـWMI Repository موجود في:

 SystemRoot%\system32\wbem\Repository%

WMI Tools:

WMI Administrative Tools

WMI Code Creator V1.0

Scriptomatic v2.0

WMI Diagnosis Utility V2.0

PowerShell WorkShop Book – Arabic Edition

2009/01/16 بواسطة Sherif Talaat

النسخة المترجمة إلي اللغة العربية من كتاب Windows PowerShell WorkShop 1 لـ Frank Koch، دلوقتي بقت متاحة للتحميل

Download: الكتاب باللغة العربية