العودة إلى الأساسيات: فهم كائنات PowerShell

PowerShell هو لغة قوية. ولكن ما الذي يجعل هذه اللغة البرمجية قوية؟ الأجسام في PowerShell. ما هي هذه الأجسام السحرية وكيف يعمل PowerShell معها؟ تابع لمعرفة المزيد.

PowerShell هي لغة برمجة موجهة للكائنات وشل. هذا يعتبر تغييرًا عن الشيل التقليدية مثل cmd و Bash. كانت هذه الشيل التقليدية تركز على النصوص أو السلاسل وعلى الرغم من أنها لا تزال مفيدة ، إلا أنها محدودة في إمكانياتها. تقريبًا كل شيء في PowerShell هو كائن.

في هذه المقالة ، ستتعلم بعض المفاهيم الرئيسية المتعلقة بالأجسام في PowerShell. بحلول نهاية هذه المقالة ، ستكون قد تعلمت كيفية تطبيق هذه المعرفة على البرمجة الخاصة بك من خلال أمثلة مفيدة ورسوم بيانية.

إذا كنت تفضل التعلم المرئي ، فلا تتردد في مشاهدة الفيديو المصاحب لهذه المقالة أدناه.

لذا استعد! ستحظى بتجربة لا تُنسى ستساعدك على إتقان مفهوم الأجسام في PowerShell!

المتطلبات المسبقة

في هذه المقالة ، ستتعلم عن الأجسام في PowerShell من خلال نهج عملي. إذا اخترت متابعة الأمثلة التي تحتوي على الشيفرة ، يجب أن يعمل Windows PowerShell 5.1 أو أي إصدار من PowerShell 6+. ومع ذلك ، سيتم تنفيذ جميع الأمثلة التي تراها على Windows 10 Build 1903 مع Windows PowerShell 5.1.

فهم تشريح الكائن

الكائنات موجودة في كل مكان في PowerShell. قد تتساءل عن نفسك “كيف يبدو الكائن؟” في هذا القسم الأول، ستحصل على نظرة عامة على مكونات الكائن. بمجرد أن تحصل على رؤية شاملة لما يجعل الكائن كائنًا، ستتمكن بعد ذلك من استكشاف بعض أمثلة الشفرة!

اكتشاف أعضاء الكائن بواسطة الأمر Get-Member

الكائنات لديها العديد من أنواع المعلومات المرتبطة بها. في PowerShell، يشار إلى هذه المعلومات أحيانًا بـ “أعضاء”. يعد عضو الكائن مصطلح عام يشير إلى جميع المعلومات المرتبطة بكائن.

لاكتشاف المعلومات حول كائن (الأعضاء)، يمكنك استخدام الأمر Get-Member. الأمر Get-Member هو أمر مفيد يسمح لك بالعثور على الخصائص والطرق المتاحة وما إلى ذلك لأي كائن في PowerShell.

على سبيل المثال، دعنا نفترض أنك ترغب في عرض الأعضاء لكائن معين تم إرجاعه عبر أمر Get-Service. يمكنك فعل ذلك عن طريق توجيه ناتج الأمر Get-Service إلى الأمر Get-Member كما هو موضح أدناه.

language-powershell
Get-Service -ServiceName 'BITS' | Get-Member

تعود إلى الأمر Get-Member. ستستخدمه كثيرًا في هذه المقالة.

يمكن توجيه أي أمر في PowerShell الذي ينتج ناتجًا إلى الأمر Get-Member. فقط تذكر أن تجعل هذا الأمر هو آخر أمر في سلسلة الأوامر حيث سيستبدل الناتج بناتجه الخاص.

أنواع الكائنات والفئات

من دون الخوض في تفاصيل كثيرة حول البرمجة الموجهة للكائنات، يحتوي كل كائن على “مخطط”. مخطط الكائن هو قالب يحتوي على المخطط الأساسي لإنشاء الكائن. يُطلق على هذا المخطط اسم النوع.

يحتوي كل كائن في PowerShell على نوع محدد. يحتوي كل كائن على مخطط من الذي تم إنشاؤه. يتم تحديد نوع الكائن بواسطة الفئة. اعتبر هذا المثال؛ 9 هو رقم، Bluegill هو سمكة، Labrador هو كلب، إلخ. الفئة تأتي قبل النوع.

الكائنات هي مثيلات للفئات ذات نوع معين.

لا تقلق بشأن الانغماس في هذا الموضوع. ما لم تكن مطورًا للبرمجيات، ربما لا يلزمك القلق كثيرًا بشأن الدلالات في هذه المرحلة. ومع ذلك، فإنه مفهوم مهم يجب معرفته على المستوى الأساسي.

الخصائص

أهم مفهوم يجب عليك فهمه حول الكائنات هو الخصائص. الخصائص هي سمات تصف الكائن. يمكن أن يحتوي الكائن على العديد من الخصائص المختلفة المرتبطة به، والتي تمثل سمات مختلفة.

واحدة من أسهل الطرق لاكتشاف الخصائص الموجودة على الكائنات هي استخدام الأمر Get-Member. يمكنك أن ترى أدناه أنه باستخدام معامل MemberType، سيقيد الأمر Get-Member المخرجات المرجعة إلى الكائنات فقط. سترى أيضًا أنه يعرض نوع الكائن System.ServiceProcess.ServiceController أيضًا.

PS51> Get-Service | Get-Member -MemberType Property
Get-Service object properties

الآن أخذ مثال خدمة BITS التي تمت مناقشتها سابقًا وراجع القيم المحددة لخصائص تلك الكائن باستخدام الكود التالي. يتيح لك أمر Get-Member العثور على أسماء الخصائص ولكن ليس القيم. ولكن باستخدام أمر Select-Object في PowerShell ، يمكنك تفقد قيم الخصائص.

يمكنك أن ترى أن StartType هي خاصية في الكائن. يحتوي الكائن المُرجع على العديد من الأعضاء المختلفة ولكن باستخدام أمر Select-Object ، فإنه يقتصر عرض النتائج على فقط تلك الخاصية.

PS51> Get-Service -ServiceName 'BITS' | Select-Object -Property 'StartType'
BITS service start type

الخصائص هي بلا شك المكون الأكثر شيوعًا في الكائن الذي ستتعامل معه في PowerShell.

الأسماء المستعارة

بعض الخصائص لها MemberType من النوع Alias. الأسماء المستعارة هي أسماء مستعارة لأسماء الخصائص. وفي بعض الأحيان يمكن أن تعطي الخصائص اسمًا أكثر بديهية.

يمكنك رؤية مثال على كائن يحتوي على أسماء مستعارة باستخدام أمر Get-Service مرة أخرى على النحو الموضح أدناه. الخاصية Name لها اسم مستعار وهو ServiceName والخاصية RequiredServices لها اسم مستعار وهو خاصية ServicesDependedOn.

PS51> Get-Service | Get-Member -MemberType 'AliasProperty'
AliasProperty members on service objects

عندما يكون للخاصية اسم مستعار ، يمكنك الإشارة إلى قيمة تلك الخاصية باستخدام اسم المستعار بدلاً من الاسم الفعلي للخاصية. في هذا المثال ، فإن سمة وصفية مثل Name و RequiredServices هي أكثر بديهية وأسهل في الكتابة من ServiceName و ServicesDependedOn.

يمكنك رؤية مثال على الإشارة إلى هذه الأسماء المستعارة أدناه.

# استخدم خاصية الاسم المستعار بدلاً من اسم الخاصية الفعلي
PS51> $Svc = Get-Service -ServiceName 'BITS' # الكائن الذي تعمل معه
PS51> $Svc.Name
BITS
PS51> $Svc.RequiredServices

يجب أن ترى الناتج التالي. لاحظ مرة أخرى أنك تحافظ على رمز قصير ونظيف وموجز. المعلومات هي نفسها بغض النظر عن استخدام الاسم المستعار أو عدم استخدامه:

Properties on the BITS service object

الأساليب

الخصائص هي جزء واحد فقط يشكل الكائن؛ الأساليب هي أيضًا مفهوم مهم لفهمه. الأساليب هي الإجراءات التي يمكن تنفيذها على الكائن. مثل الخصائص ، يمكنك اكتشاف الأساليب على كائن باستخدام cmdlet Get-Member.

لتحديد ناتج Get-Member إلى الأساليب فقط ، قم بتعيين قيمة المعلمة MemberType إلى Method كما هو موضح أدناه.

PS51> Get-Service | Get-Member -MemberType 'Method'
Methods on service objects

كمبتدئ ، ستستخدم الأساليب بكثرة أقل من الخصائص.

أنواع أعضاء أخرى

الخصائص والأساليب والأسماء المستعارة ليست هي الأنواع الوحيدة من الأعضاء التي يمكن أن يحتوي عليها كائن. ومع ذلك ، ستكون هذه هي الأنواع الأكثر شيوعًا بكثير التي ستعمل معها.

للاكتمال ، فيما يلي بعض الأنواع الأخرى من الأعضاء التي قد تواجهها.

  • خاصية النص النصي – تستخدم لحساب قيم الخاصيات.
  • خاصية الملاحظة – تستخدم لأسماء الخاصيات الثابتة.
  • مجموعات الخصائص – هذه تشبه الأسماء المستعارة التي تحتوي على مجموعات من الخصائص. على سبيل المثال ، قمت بإنشاء خاصية مخصصة تسمى Specs لوظيفتك Get-CompInfo. يعد Specs فعلاً مجموعة فرعية من الخصائص Cpu و Mem و Hdd و IP. الغرض الأساسي من مجموعات الخصائص هو توفير اسم خاصية واحدة لدمج مجموعة من الخصائص.

من المهم أيضًا أن نذكر مفهوم أحداث الكائنات. الأحداث خارج نطاق هذه المقالة.

العمل مع الكائنات في PowerShell

الآن بمجرد أن لديك فهم أساسي لمكونات الكائن ، دعنا نبدأ في التعامل مع الكود.

العديد من أوامر PowerShell تنتج الإخراج ولكن في بعض الأحيان لا تحتاج إلى رؤية كل هذا الإخراج. تحتاج إلى تحديد أو تلاعب بهذا الإخراج بطريقة ما. لحسن الحظ ، يحتوي PowerShell على عدة أوامر مختلفة تسمح لك بالقيام بذلك.

لنبدأ بمثال على تعداد جميع الخدمات على الكمبيوتر المحلي باستخدام cmdlet Get-Service كما هو موضح أدناه. يمكنك رؤية العديد من الخدمات (الكائنات) التي تمت إرجاعها من خلال الإخراج.

PS51> Get-Service -ServiceName *
Using a wildcard on ServiceName parameter

التحكم في خصائص الكائن المُرجَع

مستمرين مع مثال Get-Service ، ربما لا تحتاج إلى رؤية كل خاصية. بدلاً من ذلك ، تحتاج فقط إلى رؤية الخصائص Status و DisplayName. لتحديد الخصائص المرجعة ، يُستخدم cmdlet Select-Object.

سيؤدي الأمر Select-Object إلى “تصفية” الخصائص المختلفة من العائدات إلى أنبوب PowerShell. لتصفية خصائص الكائنات المعادة، يمكنك استخدام المعلمة Property وتحديد مجموعة مفصولة بفواصل من خصائص واحدة أو أكثر للعودة.

يمكنك أن ترى أدناه مثالًا على إعادة الخصائص Status و DisplayName فقط.

PS51> Get-Service -ServiceName * | Select-Object -Property 'Status','DisplayName'
Showing the Status and DisplayName properties

ترتيب الكائنات

ربما تقوم ببناء تقرير لعرض الخدمات وحالتها. لسهولة استيعاب المعلومات، ترغب في ترتيب الكائنات المعادة حسب قيمة خاصية Status. للقيام بذلك، يمكنك استخدام أمر Sort-Object.

يتيح لك أمر Sort-Object جمع جميع الكائنات المعادة ثم إخراجها في الترتيب الذي تحدده.

على سبيل المثال، باستخدام المعلمة Property في Sort-Object، يمكنك تحديد خاصية واحدة أو أكثر في الكائنات الواردة من Get-Service لترتيبها. ستمرر PowerShell كل كائن إلى أمر Sort-Object ثم سترجعها مرتبة حسب قيمة الخاصية.

يمكنك أن ترى أدناه مثالًا على إعادة جميع كائنات الخدمة المرتبة حسب خاصية Status وإعادتها بترتيب تنازلي باستخدام معلمة تبديل Descending في Sort-Object.

PS51> Get-Service -ServiceName * | Select-Object -Property 'Status','DisplayName' |
	Sort-Object -Property 'Status' -Descending
Using Sort-Object to sort service objects by Status in descending order

المعامل [ | ] في PowerShell هو واحد من بعض تقنيات استمرار السطر التي يجب استخدامها عند الضرورة. استخدمه بدلاً من backticks.

تصفية الكائنات

ربما قررت عدم رؤية جميع الخدمات على جهاز ما. بدلاً من ذلك، تحتاج إلى تقييد النتائج بواسطة معايير محددة. أحد الطرق لتصفية عدد الكائنات المُرجَعة هو باستخدام cmdlet Where-Object.

في حين يحد منتج الأمر Select-Object الإخراج إلى خصائص محددة، يحد منتج الأمر Where-Object الإخراج إلى كائنات بأكملها.

يتمتع منتج الأمر Where-Object بوظيفة مشابهة لـعبارة WHERE في SQL. حيث يعمل كمرشح للمصدر الأصلي لإرجاع كائنات معينة تطابق معيارًا محددًا.

ربما قررت أنك تريد فقط استرجاع الكائنات التي تحمل قيمة خاصية Status تساوي “تشغيل” وفقط تلك التي تحمل قيمة خاصية DisplayName تبدأ بحرف “أ”.

يمكنك رؤية في مقتطف الشفرة التالي إدراج إشارة إلى Where-Object بين Select-Object و Sort-Object في ترتيب سلسلة الأوامر. باستخدام قيمة للكائن النصي مع شرط مطلوب تم إنشاؤه لكل كائن لتلبية من خلال معلمة FilterScript، يمكنك تصميم أي نوع من الاستعلامات التي ترغب فيها.

تحقق من cmdlet Format-Table إذا كنت ترغب في تلاعب كيفية إرجاع النتائج إلى وحدة التحكم.

PS51> Get-Service * | Select-Object -Property 'Status','DisplayName' |
	Where-Object -FilterScript {$_.Status -eq 'Running' -and $_.DisplayName -like "Windows*" |
		Sort-Object -Property 'DisplayName' -Descending | Format-Table -AutoSize
Formatting object output

عد الكائنات المُرجَعة وحساب المتوسط.

تُرجِع أمر Get-Service العديد من الكائنات المختلفة. باستخدام أمر Where-Object، تمت تصفية جزء من تلك الكائنات ولكن بكمية كم؟ دعونا نقدم أمر Measure-Object.

أمر Measure-Object هو أمر PowerShell يمكنه، من بين العمليات الرياضية الأخرى، عد الكائنات التي يتلقاها عبر الأنبوب.

ربما تود معرفة عدد الكائنات التي يتم إرجاعها في النهاية بعد تنفيذ الأوامر المشتركة. يمكنك توجيه الناتج النهائي إلى أمر Measure-Object لإيجاد إجمالي عدد الكائنات المرجعة كما هو موضح أدناه.

PS51> Get-Service * | Select-Object -Property 'Status','DisplayName' |
	Where-Object {$_.Status -eq 'Running' -and $_.DisplayName -like "Windows*" |
		Sort-Object -Property 'DisplayName' -Descending | Measure-Object

بمجرد انتهاء المعالجة من التنفيذ، سترون، في هذه الحالة، أن هناك 21 كائنًا تم إرجاعها في البداية بواسطة أمر Get-Service.

Finding the number of objects returned with Measure-Object

ربما تبحث فقط عن إجمالي الكائنات المرجعة. نظرًا لأن أمر Measure-Object يرجع إجمالي الكائنات الموجودة عبر خاصية Count، يمكنك الإشارة إلى أمر Select-Object مرة أخرى. ولكن هذه المرة، سترجع فقط خاصية Count.

PS51> Get-Service * | Select-Object -Property 'Status','DisplayName' |
	Where-Object {$_.Status -eq 'Running' -and $_.DisplayName -like "Windows*" |
		Sort-Object -Property 'DisplayName' -Descending |
			Measure-Object |
				# نبدأ من جديد، نقوم بتصفية أولاً وتنسيق في النهاية
				Select-Object -Property 'Count'
Only returning the count property

اتخاذ إجراءات على الكائنات باستخدام حلقات الكود

أثناء معالجة كل كائن عبر الأنبوب، يمكنك اتخاذ إجراء على كل كائن باستخدام حلقة الكود. هناك أنواع مختلفة من حلقات الكود في PowerShell ولكن بالاستمرار في أمثلة الأنبوب، دعونا نلقي نظرة على أمر ForEach-Object.

يتيح لك أمر ForEach-Object اتخاذ إجراء على كل كائن يتدفق إليه. يمكن تفسير هذا السلوك بشكل أفضل باستخدام مثال.

مواصلة استخدام مثال Get-Service ، ربما ترغب في العثور على جميع الخدمات على جهاز كمبيوتر يعمل بنظام Windows بأسماء تبدأ بـ “Windows” وتعمل. باستخدام cmdlet Where-Object ، يمكنك إنشاء الشروط كما فعلت سابقًا.

Where-Object -FilterScript {$_.DisplayName -Like "Windows*" -and $_.Status -eq 'Running'}

لكن الآن بدلاً من إرجاع كائنات كاملة أو حتى بعض الخصائص ، ترغب في إرجاع السلسلة <اسم_الخدمة> يعمل لكل كائن باستخدام الكود **Write-Host -ForegroundColor 'Yellow' <اسم_الخدمة> "يعمل".

أنت تقوم الآن بتلاعب في الإخراج وإنشاء سلسلة خاصة بك. الطريقة الوحيدة لفعل ذلك هي استخدام cmdlet ForEach-Object كما هو موضح أدناه. يمكنك أن ترى أنه لكل كائن يتم إرجاعه عبر Where-Object ، يقوم PowerShell بتشغيل الكود Write-Host -ForegroundColor 'Yellow' $_.DisplayName "يعمل".

PS51> Get-Service -ServiceName * |
	Where-Object {$_.DisplayName -Like "Windows*" -and $_.Status -eq 'Running'} | 
		Foreach-Object {
			Write-Host -ForegroundColor 'Yellow' $_.DisplayName "is running"
		}
Filtering by property with Where-Object

يعد cmdlet ForEach-Object مفيدًا بعدة طرق. على سبيل المثال ، يمكنك بناء منطق إضافي لتعداد كل كائن خدمة تم العثور عليه وبناءً على قيمة الخاصية ، تغيير لون وصياغة سلسلة الإخراج أو حتى تنفيذ إجراء إضافي مثل بدء خدمة متوقفة.

تخيل الإمكانات التي يوفرها لك هذا! مع بعض التفكير والتخطيط ، يمكنك إنشاء نص يأخذ أمرًا وينفذه بسهولة عبر العديد من الكائنات.

مقارنة الكائنات

في بعض الأحيان ، قد تحتاج إلى النظر في كائنين ومقارنة قيم الخاصيات.

ربما لديك نظامان في شبكتك يكادان يكونان متطابقين تقريبًا. ومع ذلك، تواجه مشكلة تكوينية متوقعة في خدمة على أحد النظامين.

تستنتج أنه نظرًا لأن هذه الأنظمة في أجزاء مختلفة من الشبكة، فإنه سيتعين عليك استخدام أوامر عن بُعد لجمع المعلومات في جلسة PowerShell. تفتح المحرر المفضل لديك وتنشئ نصًا برمجيًا. يتصل هذا النص البرمجي، كما يمكنك رؤيته أدناه، بخادمين مختلفين ويعدد كافة العمليات على كل منهما.

$A = 'Svr01a.contoso.com'
$B = 'Svr02b.contoso.com'

$ProcA = Invoke-Command -Computername $A -Scriptblock {Get-Process -Name *}
$ProcB = Invoke-Command -ComputerName $B -Scriptblock {Get-Process -Name *}

لقد قمت الآن بالتقاط جميع العمليات على كل جهاز في المتغيرين $ProcA و $ProcB. الآن تحتاج إلى مقارنتهما. يمكنك أن تبحث يدويًا في كل مجموعة من العمليات أو يمكنك القيام بذلك بالطريقة السهلة واستخدام أمر يسمى Compare-Object.

يتيح لك Compare-Object مقارنة قيم خصائص كائنين مختلفين. يقرأ هذا الأمر البرمجي كل خاصية في كل كائن، ويراجع قيمهما ثم يعيد ما هو مختلف افتراضيًا وأيضًا ما هو متطابق.

لاستخدام Compare-Object، حدد معلمتي ReferenceObject و DifferenceObject وحدد كل كائن كقيم للمعلمات كما هو موضح أدناه.

Compare-Object -ReferenceObject $ProcA -DifferenceObject $ProcB

افتراضيًا، سيعيد Compare-Object فقط الاختلافات في الكائنات المشار إليها بواسطة خاصية SideIndicator. استخدم الرموز أو مؤشرات الجانب المستخدمة هي >، <، و = لإظهار تطابق الكائنات المقارنة.

Running Compare-Object

يمكنك استخدام معامل التبديل IncludeEqual مع الأمر Compare-Object لإرجاع خصائص الكائن المتطابقة. إذا كان الأمر كذلك ، سترى == كمؤشر جانبي. بالمثل ، يمكنك استخدام ExcludeDifferent لاستبعاد الاختلافات.

أمر Compare-Object هو أمر مفيد جدًا. إذا كنت ترغب في معرفة المزيد ، تأكد من زيارة وثائق الإنترنت.

العمل مع الكائنات المخصصة

الآن بعد أن لديك فهم جيد لما هي الكائنات وكيف يمكنك العمل معها ، حان الوقت لإنشاء كائناتك الخاصة!

إنشاء كائنات مخصصة باستخدام الجداول المتجهة

طريقة واحدة لإنشاء كائنات مخصصة هي باستخدام الجداول المتجهة. الجداول المتجهة هي مجموعات من أزواج المفاتيح/القيم بالضبط ما تحتاجه لإنشاء خصائص لكائن.

لنبدأ بإنشاء كائن مخصص في PowerShell ببعض المفاتيح/القيم باستخدام جدول متجه. في المثال أدناه ، أنت تقوم بإنشاء جدول متجه. يمثل هذا الجدول المتجه كائنًا واحدًا وخصائصه. بمجرد تعريف جدول المتجه $CarHashtable ، يمكنك بعد ذلك استخدام PsCustomObject تسريع النوع.

تعتبر مسرعة النوع “pscustomobject” وسيلة سريعة لإنشاء مثيل من صنف “pscustomobject”. يُطلق على هذا السلوك مصطلح التحويل.

بنهاية مقتطف الكود التالي، ستكون لديك كائن ($CarObject) من نوع pscustomobject بخمسة خصائص تم تعيينها له.

## تعريف الجدول المجمع
$CarHashtable = @{
	Brand      = 'Ford'
	Style      = 'Truck'
	Model      = 'F-150'
	Color      = 'Red'
	Drivetrain = '4x4'
}

## إنشاء كائن
$CarObject = [PsCustomObject]$CarHashTable

بديلاً عن ذلك، يمكنك أيضًا استخدام أمر cmdlet New-Object. باستخدام نفس الجدول المجمع، بدلاً من استخدام مسرع النوع pscustomobject، يمكنك القيام بذلك بالطريقة الطويلة باستخدام New-Object. يتم عرض مثال على ذلك أدناه.

$CarHashtable = @{
	Brand      = 'Ford'
	Style      = 'Truck'
	Model      = 'F-150'
	Color      = 'Red'
	Drivetrain = '4x4'
}
#إنشاء كائن
$CarObject = New-Object -TypeName PsObject -Properties $CarHashtable

عند إنشاء $CarObject، يمكنك الآن أن ترى أنه يمكنك الإشارة إلى كل خاصية تمامًا كما لو كانت قادمة من cmdlet PowerShell المدمج مثل Get-Service.

Inspecting object properties

إضافة وإزالة الخصائص

لا يمكنك فقط إنشاء كائنات مخصصة، ولكن يمكنك أيضًا إضافة خصائص لها. هل تتذكر استخدام cmdlet “Get-Member”؟ يوجد نسخة مشابهة لـ “Get-Member” تسمى “Add-Member”. لا يقوم cmdlet “Add-Member” بفحص الأعضاء، بل يقوم بإضافتها.

باستخدام كائن المخصص الذي تم إنشاؤه سابقًا كمثال، ربما ترغب في إضافة خاصية تاريخ الطراز إلى ذلك الكائن. يمكنك القيام بذلك عن طريق توصيل كائن إلى cmdlet “Add-Member” وتحديد:

  • نوع العضو (في هذه الحالة NoteProperty)
  • اسم الخاصية (السنة)
  • قيمة الخاصية (القيمة)

يمكنك رؤية مثال على ذلك أدناه.

PS51> $CarObject | Add-Member -MemberType NoteProperty -Name 'Year' -Value '2010'

يمكنك رؤية أدناه مرة أخرى حيث يظهر تمامًا مثل أي خاصية أخرى.

Adding and viewing a new property

يمكنك استخدام تقنيات مماثلة لإضافة العديد من أنواع الأعضاء المختلفة. إذا كنت ترغب في استكشاف المزيد بمفردك ، فتحقق من توثيق أضف-عضو.

يمكنك بسهولة نفسها إزالة عضو من كائن. على الرغم من عدم وجود أمر أزل-عضو ، يمكنك لا تزال جعل ذلك يحدث عن طريق استدعاء طريقة Remove() على الكائن كما هو موضح أدناه. ستتعرف على الأساليب في القسم التالي.

PS51> $CarObject.psobject.properties.remove('Drivetrain')

مقدمة سريعة عن الأساليب

طوال هذه المقالة ، كنت تعمل مع الخصائص. لقد قرأت قيم الخاصية ، وأنشأت خصائصك الخاصة وأضفتها وأزلتها. ولكنك لم تفعل الكثير في البيئة العمل. لم تقم بتغيير أي شيء على الخادم. دعنا نتخذ بعض التحركات مع الأساليب.

الأساليب تقوم بأداء بعض الإجراءات. تخزن الكائنات المعلومات بينما تقوم الأساليب باتخاذ إجراء.

على سبيل المثال ، قد تكون على دراية بأمر Stop-Service. يتوقف هذا الأمر عن تشغيل خدمة Windows. للقيام بذلك ، يمكنك إرسال كائن من Get-Service مباشرة إلى Stop-Service لجعله يحدث.

يمكنك رؤية مثالاً أدناه لإيقاف خدمة BITS. يقوم هذا المثال بإيقاف خدمة BITS ثم يتحقق من الحالة للتأكد من أنها توقفت. لقد قمت باتخاذ إجراءين باستخدام cmdlets؛ إيقاف الخدمة والتحقق من الحالة.

PS51> Get-Service -ServiceName 'BITS' | Stop-Service
PS51> Get-Service -ServiceName 'BITS'

بدلاً من تشغيل Get-Service مرتين وتنفيذ أمر منفصل، Stop-Service، يمكنك بدلاً من ذلك الاستفادة من الأساليب المدمجة في كائنات الخدمة. العديد من الكائنات لديها أساليب. في هذه الحالة، الأسلوب هو Stop-Service ولا حاجة حتى للإشارة الثانية لـ Get-Service.

Running commands to stop and start a service

عن طريق استدعاء الأساليب على كائن الخدمة نفسه، يمكنك إيقافها واسترداد الحالة المحدثة باستخدام كائن واحد فقط. يمكنك رؤية ذلك في الأمثلة أدناه. لاحظ أنه باستخدام الأساليب Stop() و Start() ، يمكنك التحكم في الخدمة تمامًا مثل الأوامر التي تم تنفيذها.

لضمان تحديث قيمة خاصية Status بعد تغيير حالة الخدمة، يمكنك استدعاء الأسلوب Refresh() الذي يعمل مثل استدعاء آخر لأمر Get-Service.

## أوقف BITS على الجهاز المحلي
$Svc = Get-Service -ServiceName 'BITS' #الكائن الذي تعمل عليه
$Svc.Stop() #الطريقة / الإجراء الذي تقوم به
$Svc.Refresh() #الطريقة / الإجراء الذي تقوم به
$Svc.Status #الخاصية

#ابدأ BITS على الجهاز المحلي
$Svc = Get-Service -ServiceName 'BITS' #الكائن الذي تعمل عليه
$Svc.Start() #الطريقة / الإجراء الذي تقوم به
$Svc.Refresh() #الطريقة / الإجراء الذي تقوم به
$Svc.Status #الخاصية

يجب أن ترى الناتج التالي:

Executing methods on the service object

لمزيد من المعلومات حول الطرق، تفضل بزيارة موضوع المساعدة حول_الطرق.

الاستنتاج

هناك العديد من الأشياء التي يمكنك القيام بها باستخدام الكائنات في PowerShell. كان هذا المقال مقدمة لتبدأ في تعلمها. في هذا المقال، تعلمت بعض الأساسيات حول ماهية الكائنات وكيفية اتخاذ إجراءات عليها وتلاعبها وإنشائها. رأيت بعض السيناريوهات المختلفة التي أظهرت لك كيفية أداء هذه المهام باستخدام أمثلة الشفرة. استمر في الهدوء وتعلم PowerShell. شكرًا لقراءتك!

Source:
https://adamtheautomator.com/powershell-objects/