دليل PowerShell Hashtable النهائي مع أمثلة

20 مايو 2021 5546 الآراء PowerShell Hashtable دليلك النهائي مع أمثلة

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

في جوهرها ، تعد علامة التجزئة في PowerShell بمثابة 'طاولة' لمتجر القيمة / المفتاح.

في منطقة S هذه ، سأعلمك كل ما تحتاج لمعرفته حول علامات التجزئة الخاصة بـ PowerShell. يستكشف القسم الأول الفرق بين Hashtable و Array.

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

أخيرًا ، سأستكشف طرقًا مختلفة لاستخدام علامات التجزئة في البرمجة النصية.

تصفح مواضيع المنشور

PowerShell Hashtable مقابل PowerShell Array

PowerShell Hashtable مقابل PowerShell Array

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

في مقدمة هذا الدليل ، أوضحت أن علامة التجزئة هي مخزن مفتاح / قيمة. بالإضافة إلى ذلك ، فإن علامة التجزئة مثل الجدول الذي يحتوي على مفاتيح وقيم.

على العكس من ذلك ، فإن مصفوفة PowerShell عبارة عن مجموعة من القيم أو الكائنات.

يتمثل الاختلاف الأساسي بين جدول تجزئة PowerShell ومصفوفة PowerShell في أن علامة التجزئة عبارة عن مجموعة من العناصر (المفاتيح) وقيمها - بينما المصفوفة هي مجرد قائمة من العناصر.

للحصول على مثال سريع ، الرموز أدناه هي أمثلة لعلامات التجزئة والمصفوفة - يُنشئ الرمز الأول علامة تجزئة بينما يُنشئ الرمز الثاني مصفوفة:

Get-EventLog
$hashtable = @{ Name = 'Document' PSProvider = 'FileSystem' Root = 'C:UsersvictoDocuments' } 
من أمثلة التعليمات البرمجية ، يمكنك أن ترى أنه بينما يتم تضمين علامة التجزئة في {} ، يتم تضمين المصفوفة في ().

تعرض لقطة الشاشة أدناه نتائج الرمزين.

PowerShell Hashtable مقابل PowerShell Array

الجزء المسمى (1) من لقطة الشاشة هو نتيجة علامة التجزئة. هل رأيت زوج المفتاح / القيمة؟

في المثال أعلاه ، المفتاح ، الجذر له قيمة C: Users victo Documents. أيضًا ، يحتوي مفتاح PSProvider على قيمة تسمى FileSystem.

أخيرًا ، الاسم له قيمة المستند.

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

طرق وخصائص PowerShell Hashtable

طرق وخصائص PowerShell Hashtable

في المقدمة ، وعدت بأخذك خلف غطاء PowerShell Hashtables. هذه هي!

في هذا القسم ، سوف أعلمك كيفية استخدام Get-Member Cmdlet للبحث عن علامات التجزئة.

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

دعنا نعود إلى مثالنا الأول المتسرع أعلاه:

$array = @('Document', 'FileSystem', 'C:UsersvictoDocuments')

انسخ الرمز إلى مستند PowerShell ISE جديد. ثم قم بتشغيل الكود.

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

$hashtable = @{ Name = 'Document' PSProvider = 'FileSystem' Root = 'C:UsersvictoDocuments' } 

لتشغيل الأمر أعلاه ، قم بلصقه أسفل الرمز الأخير. ثم قم بتمييزه واضغط على F8 أو انقر فوق الرمز المميز.

طرق وخصائص PowerShell Hashtable

سيعرض الأمر النتائج في جزء وحدة تحكم PowerShell.

في الوقت الحالي ، انظر إلى أعلى النتيجة. لديها TypeName: System.Collections.Hashtable.

هذا يؤكد أن الكائنات الموجودة في Get-Member Cmdlet عبارة عن Hashtable!

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

كيفية إضافة أو إزالة العناصر إلى Hashtable الموجودة

في هذا القسم ، ستتعلم إضافة عناصر جديدة إلى جدول تجزئة PowerShell موجود. علاوة على ذلك ، سوف تتعلم أيضًا كيفية إزالة عنصر من قابل للتجزئة موجود في PowerShell.

قبل أن أتعمق فيه ، أود أن أذكر أنه يمكنك أيضًا إنشاء علامة تصنيف فارغة. بعد ذلك ، أضف مفاتيح / قيمًا إلى علامة التجزئة - المزيد حول هذا لاحقًا.

العودة إلى إضافة العناصر أو إزالتها من PowerShell hastables الموجودة - عندما قمنا بتشغيل ملف قابل للتجزئة | الحصول على عضو الأمر ، إحدى الطرق المعروضة في النتيجة هي يضيف . هناك أيضًا طريقة ، إزالة .

انظر الأجزاء المميزة من لقطة الشاشة أدناه:

طرق وخصائص PowerShell Hashtable

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

$hashtable | Get-Member

يحتوي الهاشتابل على 3 إدخالات. في هذا المثال ، سأضيف مفتاحًا آخر يسمى 'الوصف' مع القيمة 'خرائط' إلى مجلد 'المستندات'.

لإكمال هذه المهمة ، سأقوم بتشغيل الأمر أدناه (على نفس وحدة تحكم PowerShell ISE التي قمت بتشغيل الأوامر السابقة)

$hashtable = @{ Name = 'Document' PSProvider = 'FileSystem' Root = 'C:UsersvictoDocuments' } 
لاحظ كيف استخدمت الوظيفة Add طريقة . أقوم بإضافة نقطة (.) بجوار المتغير الذي يحمل علامة التجزئة. ثم قمت بتضمين الطريقة ، يضيف ، تليها (). أخيرًا ، قمت بتضمين زوج المفتاح / القيمة الجديد الذي أريد إضافته إلى علامة التجزئة.

بمجرد تشغيل الأمر ، لتأكيد إضافة المفتاح الإضافي ، قم بتمييز قابل للتجزئة $ واضغط على F8.

$hashtable.  Add  ( 'Description', 'Maps to my 'My Documents' folder.' )

فيما يلي لقطة شاشة للنتيجة - تؤكد إضافة المفتاح / القيمة الجديدة.

للمضي قدمًا ، يمكنك استخدام نفس الطريقة لإزالة قيمة من PowerShell hashtable.

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

هذا هو الأمر:

$hashtable
ال إزالة الأسلوب يشمل فقط مفتاح . لا تحتاج إلى تضمين المفتاح القيمة في الأمر.

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

$hashtable.  Remove  ( 'Description' )

نتيجة الأمر تؤكد إزالة المفتاح!

طرق وخصائص PowerShell Hashtable - كيفية إضافة أو إزالة العناصر إلى Hashtable الحالي

كيفية التحقق من احتواء PowerShell Hashtable على مفتاح

عندما قمنا بتوصيل العجلة أدناه إلى الحصول على عضو Cmdlet ، إحدى الطرق المعروضة هي ملف يحتوي على مفتاح الطريقة - انظر لقطة الشاشة أدناه.

$hashtable

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

تطبيق آخر لبرنامج يحتوي على مفتاح تتمثل طريقة تجزئة PowerShell في استخدامه ببساطة للتحقق من وجود اسم مفتاح في علامة التجزئة.

للتحقق مما إذا كان هناك مفتاح موجود في جدول تجزئة PowerShell باستخدام امتداد يحتوي على مفتاح الطريقة ، قم بتشغيل الأمر أدناه:

$hashtable = @{ Name = 'Document' PSProvider = 'FileSystem' Root = 'C:UsersvictoDocuments' } 

يتحقق هذا الأمر من وجود مفتاح بالاسم ، والوصف موجود في علامة التجزئة المحفوظة في متغير $ hashtable. تعرض نتيجة الأمر خطأ.

طرق وخصائص PowerShell Hashtable - كيفية التحقق من احتواء PowerShell Hashtable على مفتاح

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

هذا هو الكود المحسن.

$hashtable.  ContainsKey  ('Description')

يستخدم الكود العبارة الشرطية IF للتحقق مما إذا كان هناك مفتاح بالاسم ، الوصف موجود في علامة التجزئة.

بعد ذلك ، إذا كانت النتيجة False ، في جزء تنفيذ الأمر من جملة IF ، نستخدم الامتداد يضيف طريقة تجزئة PowerShell لإضافة المفتاح إلى علامة التجزئة.

ومع ذلك ، إذا كان المفتاح موجودًا في علامة التجزئة ، في الجزء الآخر من جملة IF ، فإننا نعرض رسالة تخبر الشخص الذي قام بتشغيل الأمر أن المفتاح موجود بالفعل.

بعد تشغيل الأمر الأخير ، قم بتمييز ملف قابل للتجزئة $ متغير وتشغيله بمفرده. تؤكد النتيجة أن المفتاح ، الوصف قد تمت إضافته إلى المتغير لأنه لم يكن موجودًا.

لاختبار ما إذا كان هذا البرنامج النصي يعمل - قم بتشغيله مرة أخرى ...

If ($hashtable.  ContainsKey  ('Description') -eq $False) { $hashtable.  Add  ( 'Description', 'Maps to my 'My Documents' folder.' ) } Else { Write-Host 'The key alredy exists in the hashtable' }

هذه المرة ، لم يقم البرنامج النصي بإضافة المفتاح. بدلاً من ذلك ، أعادت المعلومات الموجودة في الجزء الآخر من بيان IF - المفتاح موجود بالفعل في علامة التجزئة .

طرق وخصائص PowerShell Hashtable - كيفية التحقق من احتواء PowerShell Hashtable على مفتاح

كيفية تحويل PowerShell Hashtable إلى سلسلة

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

لإرجاع القيم الموجودة في علامة التجزئة ، قم باستدعاء قيم ملكية الهاشتابل.

هذا هو الأمر الذي يُرجع القيم في علامة التجزئة:

If ($hashtable.  ContainsKey  ('Description') -eq $False) { $hashtable.  Add  ( 'Description', 'Maps to my 'My Documents' folder.' ) } Else { Write-Host 'The key already exists in the hashtable' }

بمجرد إرجاع القيم في PowerShell hashtable ، فإن الخطوة التالية هي تمرير $ hashtable. خارج السلسلة يأمر…

$hashtable.Values
لاحقًا في هذا الدليل ، ستقدر أهمية تحويل PowerShell hashtable إلى سلسلة. لمشاهدة التطبيق العملي لهذا في البرمجة النصية لـ SysAdmin في العالم الحقيقي ، تابع القراءة.

كيفية استخدام PowerShell Hashtable GetEnumerator طريقة

طريقة أخرى مهمة لجدول تجزئة PowerShell هي ملف GetEnumerator طريقة.

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

$hashtable.Values | Out-string -stream

كما ترى من نتيجة الأمر أعلاه ، يتم إرجاع المفاتيح والقيم في رؤوس فردية. لا يمكنني التفكير في تطبيق الآن ، ومع ذلك ، إذا احتجت في أي وقت إلى فصل المفاتيح في قابلة للتجزئة في PowerShell ، فأنت تعرف كيفية القيام بذلك!

كيفية حساب عناصر PowerShell Hashtable

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

مثل ال قيم الخاصية ، لاستدعاء خاصية Count ، استخدم أمرًا مشابهًا للأمر أدناه:

$hashtable.GetEnumerator() |% Out-String 

يؤكد الأمر أن علامة التجزئة ، $ hashtable بها 4 مفاتيح.

كيفية حساب عناصر PowerShell Hashtable

كيفية إنشاء PowerShell Hashtable فارغ وإضافة مفاتيح

كيفية إنشاء PowerShell Hashtable فارغ وإضافة مفاتيح

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

بعد ذلك ، أضف مفاتيح إلى علامة التجزئة.

لإنشاء علامة تجزئة فارغة في PowerShell ، ما عليك سوى إدخال ملف @ علامة ، متبوعة {} اقواس. فيما يلي مثال لعلامة التجزئة الفارغة المحفوظة في متغير ، إفراغهاشتاب :

$hashtable.Count 

لتأكيد إنشاء علامة التجزئة بدون قيم ، قم بتشغيل الأمر السابق. ثم قم بتشغيل المتغير من تلقاء نفسه.

$Emptyhashtable = @{ }

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

هنا هو الأمر لأداء هذه المهمة.

$Emptyhashtable 

أخيرًا ، للتأكد من إضافة القيم بنجاح ، قم بتشغيل المتغير Emptyhashtable $:

$Emptyhashtable.  Add  ( 'Name', 'Document.' )

يؤكد الأمر الأخير أنه تم إضافة القيم بنجاح:

كيفية إنشاء PowerShell Hashtable بقيم متعددة ومفتاح واحد

كيفية إنشاء PowerShell Hashtable بقيم متعددة ومفتاح واحد

في جميع الأمثلة التي غطيناها حتى الآن ، يحتوي جدول تجزئة PowerShell على زوج مفتاح / قيمة واحد. ومع ذلك ، هناك حالات قد تحتاج فيها إلى وجود مفتاح واحد في علامة تصنيف ذات قيم متعددة.

في هذه الحالة ، تريد بشكل فعال إنشاء علامة تصنيف باستخدام المصفوفات كقيم.

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

$Emptyhashtable
$hashtable = @{ Name = 'Document' PSProvider = 'FileSystem' Root = 'C:UsersvictoDocuments' } 

لذلك ، لإنشاء تجزئة PowerShell بمفاتيح فردية وقيم متعددة ، قم بتشغيل برنامج نصي مشابه لهذا:

$array = @('Document', 'FileSystem', 'C:UsersvictoDocuments')

في النص أعلاه ، LogName هو مفتاح التجزئة بينما يتم تعيين نظام القيم والتطبيق والأمان للمفتاح. على نحو فعال ، لقد أنشأنا مفتاحًا واحدًا مستقرًا بقيم متعددة.

لسرد القيم الفردية في ملف LogName key ، قم بتشغيل الأمر أدناه:

$hashtableWithArrays = @{ LogName = @('System', 'Application', 'Security') } 

الجزء المسمى (1) من لقطة الشاشة أدناه ناتج عن علامة التجزئة ، hashtableWithArrays $ . علاوة على ذلك ، الجزء المسمى (2) يظهر نتيجة $ hashtableWithArrays.Values يأمر.

إذا كنت معتادًا على سجلات أحداث Windows - النظام والتطبيق والأمان - فهي أسماء سجلات أحداث Windows.

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

كيفية تكرار PowerShell Hashtable باستخدام حلقة ForEach

كيفية تكرار PowerShell Hashtable مع ForEach

في القسم الأخير ، قمت بإنشاء تجزئة PowerShell أحادية المفتاح بقيم متعددة.

بالنسبة للمثال الموجود في هذا القسم ، قمت بتغيير المتغير الذي قام بتخزين علامة التجزئة إلى مفاتيح LogName . هنا هو البرنامج النصي المحدث.

$hashtableWithArrays.Values

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

للحصول على دورة تنشيطية سريعة حول PowerShell ForEach ، يوجد أدناه البنية العامة لأمر PowerShell ForEach:

$LogNameKeys = @{ LogName = @('System', 'Application', 'Security') }

إذا قمت بتطبيق الصيغة أعلاه على موقعنا أسماء قابل للتجزئة ، سيبدو الأمر المحدث كما يلي:

الأسطر التي تبدأ بـ # هي تعليقات PowerShell.
ForEach ($Object in $Objects) {  }

الجزء الأول من البرنامج النصي هو نفس البرنامج النصي الذي ينشئ تجزئة PowerShell أحادية المفتاح بقيم متعددة. هذا هو النص:

#Create a single-key hashtable (LogName) with values - 'System', 'Application', 'Security' $LogNameKeys = @{ LogName = @('System', 'Application', 'Security') } #Convert the hashtable to a string $LogNameKeysAsStrings = $LogNameKeys.Values | Out-String -Stream #we used a similar command earlier #Use ForEach to loop through $LogNameKeysAsStrings and run the Get-EventLog command ForEach ($LogNameKey in $LogNameKeysAsStrings) { Get-EventLog -LogName $LogNameKey -Newest 5 }

في الجزء الثاني من البرنامج النصي ، قمت بتحويل القيم المخزنة في ($ LogNameKeys.Values) إلى سلاسل وحفظت النتيجة في متغير آخر ، LogNameKeysAsStrings .

$LogNameKeys = @{ LogName = @('System', 'Application', 'Security') }

أخيرًا ، في الجزء الثالث من البرنامج النصي - تم تقديم حلقة ForEach:

$LogNameKeysAsStrings = $LogNameKeys.Values | Out-String -Stream

في هذا الجزء من البرنامج النصي ، نطلب من PowerShell أخذ كل قيمة مخزنة في ملف LogName مفتاح ( $ LogNameKeysAsStrings ) - احفظ تلك القيمة الفردية مؤقتًا في المتغير LogNameKey - ثم استخدم المتغير الزمني لتشغيل الحصول على سجل الأحداث يأمر.

قمت بتضمين ملف الأحدث معلمة الحصول على سجل الأحداث الأمر بقيمة 5 بحيث يُرجع الأمر آخر 5 إدخالات من كل سجل أحداث. عندما تنظر إلى برنامج نصي من PowerShell ، قد يبدو الأمر معقدًا. ومع ذلك ، إذا نظرت عن كثب ، فعادةً ما يكون الأمر سهلاً للغاية.

الآن ، انسخ البرنامج النصي أدناه إلى مستند PowerShell ISE جديد وقم بتشغيله.

افتح PowerShell ISE كمسؤول. إذا لم تفتح PowerShell ISE كمسؤول ، فستتلقى رسائل خطأ في الوصول.
 ForEach ($LogNameKey in $LogNameKeysAsStrings) { Get-EventLog -LogName $LogNameKey -Newest 5 }

عرضت لقطة الشاشة أدناه نتيجة البرنامج النصي. يوجد 15 صفًا في جزء النتائج - تمثل 5 من سجلات أحداث النظام والتطبيق والأمان.

كيفية تخصيص تقرير باستخدام PowerShell Hashtable وتحديد كائن

كيفية تخصيص تقرير باستخدام PowerShell Hashtable وتحديد كائن

في القسم الأخير ، أنشأنا برنامجًا نصيًا PowerShell يسحب تقرير سجل أحداث Windows. هنا لقطة من التقرير

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

هذا هو السيناريو من القسم الأخير.

تم تعديل البرنامج النصي بشكل طفيف. لدي الآن متغير ، EventLogReport الذي يحفظ إخراج حلقة ForEach. سأشرح لماذا هذا ضروري في وقت لاحق.
#Create a single-key hashtable (LogName) with values - 'System', 'Application', 'Security' $LogNameKeys = @{ LogName = @('System', 'Application', 'Security') } #Convert the hashtable to a string $LogNameKeysAsStrings = $LogNameKeys.Values | Out-String -Stream #Uses ForEach to loop through $LogNameKeysAsStrings and run the |_+_| command ForEach ($LogNameKey in $LogNameKeysAsStrings) { Get-EventLog -LogName $LogNameKey -Newest 5 }

لتعديل أسماء رؤوس الأعمدة من هذا البرنامج النصي ، سنقوم بتوجيه ملف الحصول على سجل الأحداث الأمر إلى أ حدد الكائن يأمر.

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

#Create a single-key hashtable (LogName) with values - 'System', 'Application', 'Security' $LogNameKeys = @{ LogName = @('System', 'Application', 'Security') } #Convert the hashtable to a string $LogNameKeysAsStrings = $LogNameKeys.Values | out-string -stream #Uses ForEach to loop through $LogNameKeysAsStrings and run the Get-EventLog command. #Then, save the output of the command in the  EventLogReport   variable,  $EventLogReport  = ForEach ($LogNameKey in $LogNameKeysAsStrings) { Get-EventLog -LogName $LogNameKey -Newest 5 }

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

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

هنا عينة قابلة للتجزئة من ملف حدد الكائن منع:

#Create a single-key hashtable (LogName) with values - 'System', 'Application', 'Security' $LogNameKeys = @{ LogName = @('System', 'Application', 'Security') } #Convert the hashtable to a string $LogNameKeysAsStrings = $LogNameKeys.Values | out-string -stream #Uses ForEach to loop through $LogNameKeysAsStrings and run the Get-EventLog command. #Then, save the output of the command in the  EventLogReport   variable, $EventLogReport = ForEach ($LogNameKey in $LogNameKeysAsStrings) {Get-EventLog -LogName $LogNameKey -Newest 5 |  Select-Object  ` @{Name='Log ID';Expression={$_.Index}}, @{Name='Event Log Time';Expression={$_.TimeWritten}}, @{Name='Event Source';Expression={$_.Source}}, @{Name='Event ID';Expression={$_.InstanceID}}, @{Name='Event Details';Expression={$_.Message}} } #Finally, pipe the  EventLogReport   variable to Format-Table to create the report in table format $EventLogReport | Format-Table

كالعادة ، يحتوي تجزئة PowerShell على عنصرين. المفتاح هو اسم ، القيمة هي تعبير .

شيء آخر مهم يجب ملاحظته هو أنه في نهاية كل علامة تصنيف في ملف حدد الكائن كتلة ، هناك فاصلة (،).

أخيرًا ، إليك نتيجة النص النهائي في PowerShell:

لقد وعدت سابقًا أن أشرح سبب تقديمي EventLogReport $ متغير لحفظ إخراج حلقة ForEach. بدون هذا المتغير ، ستعرض النتيجة النهائية 3 نتائج فردية لكل من سجلات الأحداث الثلاثة. ومع ذلك ، من خلال تخزين النتائج بالكامل في متغير ، تمكنت من توجيه هذا المتغير إلى تنسيق الجدول - وهذا يعرض النتيجة بأكملها كجدول واحد. هذا هو الأمر الذي أجرى السحر.
@{Name='Event ID';Expression={$_.InstanceID}}

كيفية تصدير PowerShell Hashtable إلى CSV

كيفية تصدير PowerShell Hashtable إلى CSV

في هذا القسم الأخير ، ستتعلم كيفية تصدير تجزئة PowerShell إلى CSV.

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

 $EventLogReport | Format-Table

لتصدير جدول تجزئة PowerShell هذا بنجاح إلى ملف CSV ، يجب عليك استخدام ملحق GetEnumerator الطريقة (التي تمت مناقشتها سابقًا) لسرد القيم. خلاف ذلك ، لن يتم تصدير أزواج المفتاح / القيمة الفعلية.

هذا هو البرنامج النصي المعدل الذي يصدر علامة التجزئة المحفوظة في ملف قابل للتجزئة متغير إلى ملف CSV.

$hashtable = @{ Name = 'Document' PSProvider = 'FileSystem' Root = 'C:UsersvictoDocuments' } 

قدم البرنامج النصي أدناه:

$hashtable = @{ Name = 'Document' PSProvider = 'FileSystem' Root = 'C:UsersvictoDocuments' } $hashtable.  GetEnumerator()  | Select-Object Name, Value | Export-Csv -Path D:PS-Tutorialhashtable.csv -NoTypeInformation 

يتضمن البرنامج النصي GetEnumerator طريقة في الهاشتابل. ثم أنابيب الإخراج إلى حدد الكائن يأمر.

أخيرًا ، أقوم بتوصيل إخراج ملف حدد الكائن الأمر إلى تصدير- CSV يأمر. لقراءة المزيد عن كيفية الاستخدام تصدير- CSV Cmdlet ، اقرأ دليلنا - Powershell NoTypeInformation: التطبيقات والأمثلة.

عند تشغيل هذا البرنامج النصي ، فإنه ينشئ ملف CSV يسمى hashtable.csv ، في المسار الذي حددته. انظر لقطة الشاشة أدناه لإخراج ملف CSV.

$hashtable.  GetEnumerator()  | Select-Object Name, Value | Export-Csv -Path D:PS-Tutorialhashtable.csv -NoTypeInformation 

في المثال الثاني الخاص بي ، سوف أقوم بتصدير إخراج البرنامج النصي الذي أنشأناه في القسم الأخير - البرنامج النصي لسجل الأحداث - إلى ملف CSV.

هنا هو السيناريو. لتصدير التقرير إلى CSV ، أضفت الكود الموجود أسفل هذا الرمز في نهاية هذا البرنامج النصي.

$hashtable = @{ Name = 'Document' PSProvider = 'FileSystem' Root = 'C:UsersvictoDocuments' } $hashtable.  GetEnumerator()  | Select-Object Name, Value | Export-Csv -Path D:PS-Tutorialhashtable.csv -NoTypeInformation 
#Create a single-key hashtable (LogName) with values - 'System', 'Application', 'Security' $LogNameKeys = @{ LogName = @('System', 'Application', 'Security') } #Convert the hashtable to a string $LogNameKeysAsStrings = $LogNameKeys.Values | out-string -stream #Uses ForEach to loop through $LogNameKeysAsStrings and run the Get-EventLog command. #Then, save the output of the command in the  EventLogReport   variable, $EventLogReport = ForEach ($LogNameKey in $LogNameKeysAsStrings) {Get-EventLog -LogName $LogNameKey -Newest 5 |  Select-Object  ` @{Name='Log ID';Expression={$_.Index}}, @{Name='Event Log Time';Expression={$_.TimeWritten}}, @{Name='Event Source';Expression={$_.Source}}, @{Name='Event ID';Expression={$_.InstanceID}}, @{Name='Event Details';Expression={$_.Message}} } #Finally, pipe the  EventLogReport   variable to Format-Table to create the report in table format $EventLogReport | Format-Table $EventLogReport | Export-Csv -Path D:PS-TutorialEventLogReport.csv -NoTypeInformation 

يقوم الكود بإخراج إخراج ملف للجميع حلقة - تم حفظها في ملف EventLogReport متغير - إلى أمر تصدير- Csv . يظهر ملف CSV الذي تم إنشاؤه في لقطة الشاشة أدناه.

هذا كل شيء - دليل شامل حول PowerShell hashtable! آمل أن تجد أنه من المفيد؟

إذا وجدت أنها مفيدة ، يرجى التصويت نعم إلى هل كان هذا المنشور سؤالًا مفيدًا أدناه.

بدلاً من ذلك ، يمكنك طرح سؤال أو ترك تعليق أو تقديم المزيد من التعليقات باستخدام نموذج 'ترك الرد' الموجود في نهاية هذه الصفحة.

أخيرًا ، لمزيد من مناطق S PowerShell tech ، تفضل بزيارة صفحة دليل Windows PowerShell How-To. قد تجد أيضًا صفحة العمل من الصفحة الرئيسية الخاصة بنا مفيدة جدًا.

المراجع وقراءات إضافية

  1. كل ما تريد معرفته عن علامات التجزئة
  2. اجمع بين المصفوفات وجداول التجزئة في PowerShell للمتعة والربح
  3. حول جداول التجزئة