السلام عليكم
فى هذا الموضوع الموجز سأحاول أن أقدم بعضا من جديد هذه اللغة لأن نسختها الثالثة تحوي عشرات الإضافات ولن أتمكن أن أسردها كلها..سأقتصر فى هذه السلسلة على موضوع تسهيل الكتابة فى لغة بورشال 3 للمستخدمين ...فلنبدأ على بركة الله:
*) foreach-object & where-object :
فى النسخة السابقة كنا نستعمل هذين الأمرين هكذا:
gsv | where { $_.canstop }أما الٱن فلنا طريقتين جديدتين لكتابة نفس الكود، الأولى هي إستعمال متغير أوتوماتيكى جديد عوضا عن $_ حتى يتمكن المبتدئ من فهم الكود أما الطريقة الثانية فتمكننا من الإستغناء عن هذا المتغير:
1
gsv | where { $psitem.canstop }
2
gsv | where canstopمع الملاحظة أن الأمر foreach-object له نفس الميزات الجديدة ل Where-Object
*) إستعمال الوظائف Method مباشرة عبر ال Pipe
فى النسخة السابقة إذا أردنا إستعمال وظيفة معينة يجب أن نلحقها بالكائن Object نفسه :
gps *t* | sort Ws -Descending | % { $_.kill() }أما الٱن فيمكن فصل الوظيفة عن كائنها
gps *t* | sort Ws -Descending | kill
*) ال loop الخفية
فى النسخة السابقة إذا أردنا أن نستخرج من المصفوفات
بعضا من خصائصهاproperties وإستعمالها كسلاسل حرفية كان لا بد من إستعمال إما الأمر
select-object مع خاصية ExpandProperty أو القيام ب loop
1
ls | Select-Object -ExpandProperty fullname
2
ls | ForEach-Object { $_.fullname}
أما الٱن فلا نحتاج لهذه المراحل فيكفى أن نلحق الخاصية properties بالكائن Object حتى تنشئ أوتوماتيكيا loop خفية implicit
(ls).fullname
*) المتغير PSDefaultParameterValues
هذا المتغير خاص حيث سيمكننا من ربح الوقت و إنجاز مهامنا بسرعة فهو سيمكننا من التحكم فى خصائص الأوامر كما نشاء ولنضرب على ذلك مثالا على تتضح الصورة..لو كان أمر دائما ما نستعمله مع خصائص معينة مثلا:
Get-ChildItem -File -Filter *.exe -Path c:\
يمكننا الٱن أن نملأ متغيرنا بالخصائص المحددة ونستعمل بالتالى أمرنا بكل سهولة
$PSDefaultParameterValues = @{
"get-chilitem:file"="$true";
"get-chilitem:filter"="*.exe"
"get-chilitem:path"="c:\"
}
get-childitem*) إضافة بعض الخصائص للأمر ls / get-childitem
منها خاصية البحث على المجلدات فقط أو الملفات فقط أو خاصية البحث عن ملفات النظام فقط أو المخفية...الخ
*) إضافة الخاصية in و notin للبحث داخل المصفوفات:
"a" -in "a","b","c" "a" -notin "a","b","c"
*) إمكانية تقطيع الأكواد الطويلة لأجزاء:
فى النسخة السابقة كنا إذا أردنا تقطيع الكود لأجزاء لا بد من إستعمال رمز خاص "`" بذلك ولم يكن بإمكاننا إلا تقطيع أجزاء مسموح بها:
l
s` c:\
أما الٱن فبإمكاننا فعل ذلك دون إضافة أي شيء للكود أو أن نخشي من عدم إشتغال الكود على الوجه الأمثل:
(gps). fullname -match 'n'
*) إضافة مختصرات جديدة لأقسام .NET ك [ordered] و [pscustomobject]
فى النسخة السابقة كنا إذا أردنا أن ننشأ كائنا خاصا نقوم بالتالى:
new-object psobject -property @{a=1}أما الٱن فبإمكاننا الإختصار من خلال كتابة نفس الكود بهذا الشكل
[pscustomobject]@{a=1}*) تسهيل إستعمال الريجسترى registry :
الٱن أصبح الإبحار فى الريجسترى أكثر متعة من قبل فقد أصبحنا وكأننا نبحر فى ال filesytem تماما وذلك بعد التحويرات التى قام بها فريق بورشال على هذا ال provider
هذا الجزء الأول إنتهى وإن شاء الله ننتقل للجزء الثانى عما قريب...مع الملاحظة أنى لم أذكر كل التحديثات حول 'التسهيلات الجديدة فى الكتابة' وإنما إقتصرت على بعض منها




