PowerShell Get-Content ما يعادل PowerShell Tail

باستخدام التشغيل التلقائي، قراءة البيانات من ملف نصي هي حالة شائعة. معظم لغات البرمجة لديها وسيلة واحدة على الأقل لقراءة ملفات النص، وPowerShell ليست استثناءً. أمر Get-Content في PowerShell، وهو ما يعادل أمر tail في PowerShell، يقوم بقراءة محتوى ملف نصي ويقوم بتحميل البيانات إلى جلسة PowerShell.

أمر Get-Content في PowerShell هو أداة لا غنى عنها عندما تحتاج إلى استخدام ملفات النص كإدخال لنصيبك. ربما يحتاج نصيب PowerShell الخاص بك إلى قراءة قائمة الكمبيوتر للرصد أو استيراد قالب بريد إلكتروني لإرساله إلى مستخدميك. يدعم Get-Content في PowerShell هذه السيناريوهات بسهولة!

ماذا عن متابعة ملف سجل في الوقت الحقيقي؟ نعم، يمكن أيضًا لأمر Get-Content في PowerShell القيام بذلك! تابع قراءة هذا المقال، وستتعلم كيفية استخدام أمر Get-Content لقراءة ملفات النص في PowerShell.

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

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

  • ستحتاج إلى كمبيوتر يعمل بنظام التشغيل Windows 10. يستخدم هذا البرنامج التعليمي إصدار Windows 10 الإصدار 20H2. ولكن لا تقلق، ستكون بخير مع إصدار Windows 10 الذي تمتلكه.
  • يجب أن يكون لديك Windows PowerShell 5.1 على الأقل، أو PowerShell 7.1 مثبتًا على جهاز الكمبيوتر الخاص بك. تستخدم هنا PowerShell 7.1، ولكن أي إصدار سيعمل!
  • ستكتب وتختبر الأوامر، لذا ستحتاج إلى محرر الشفرة. المحررات الموصى بها هي Windows PowerShell ISE، المدمج في نظام التشغيل Windows، و Visual Studio Code (VSCode). يستخدم هذا المقال VSCode.
  • سيساعد أيضًا إذا قمت بإنشاء دليل عمل في جهاز الكمبيوتر الخاص بك. يمكن أن يكون المجلد العامل في أي مكان تريده. ومع ذلك، ستلاحظ أن الأمثلة في هذا البرنامج التعليمي تقع في المجلد C:\demo.
  • للبدء، تحتاج إلى بعض المحتوى! قم بإنشاء ملف في دليل العمل الخاص بك، باسم fruits.txt والذي يتضمن عشرة فواكه مختلفة للبساطة. ستستخدم هذا الملف النصي في جميع الأمثلة.
cherry
 berry
 apricot
 papaya
 raspberry
 melon
 peach
 tangerine
 cantaloupe
 orange

لا تعرف أي إصدار PowerShell لديك؟ قم بزيارة المقالة كيفية التحقق من إصدار PowerShell الخاص بك (جميع الطرق!).

قراءة ملف نصي وإرجاع النتيجة كمجموعة سلاسل نصية

يقرأ الأمر Get-Content المحتوى من ملف، وبشكل افتراضي، يرجع كل سطر من ملف نصي ككائن سلسلة نصية. ونتيجة لذلك، تصبح مجموعة كائنات PowerShell مصفوفة من كائنات السلسلة النصية.

الكود أدناه يقرأ محتويات ملف fruits.txt ويعرض النتيجة على وحدة التحكم PowerShell كما هو موضح في لقطة الشاشة أدناه.

Get-Content .\fruits.txt
Retrieving the text file content using PowerShell Get-Content.

Get-Content يقوم بقراءة وتخزين المحتوى كمصفوفة، لكن كيف تعرف ذلك بالتأكيد؟ أولاً، قم بحفظ المحتوى إلى كائن PowerShell يمكنك بعد ذلك فحصه لتحديد النوع.

Save the content into to a object
 $fruits = Get-Content .\fruits.txt
 Display the type of the object
 $fruits.GetType()
 Retrieve the count of items within the object
 $fruits.Count
 Output the contents of the object to the console
 $fruits

نظرًا للمحتوى في اللقطة أدناه، فإن المتغير $fruits هو مصفوفة تحتوي على عشرة كائنات. يُمثل كل كائن سطرًا واحدًا من النص.

Confirming that the text file content is stored as an array.

استرجاع سطر محدد من ملف نصي

في المثال السابق، تعلمت أن نتيجة الأمر الافتراضي Get-Content هي مصفوفة أو مجموعة من الكائنات. يُرتبط كل عنصر في المجموعة برقم فهرس، وتبدأ فهارس PowerShell عادةً من الصفر.

توضح اللقطة أدناه أن هناك عشرة عناصر في مصفوفة السلسلة. قامت المصفوفة بترقيم العناصر العشرة من الصفر إلى التسعة.

Showing that the indexed items in the string array start at zero index.

لعرض السطر الخامس فقط من المحتوى، ستحتاج إلى تحديد رقم الفهرس 4، وتضمينه في الأقواس المربعة (المعروفة بتعبير المصفوفة).

(Get-Content .\fruits.txt)[4]

قد تلاحظ أن أمر Get-Content محاط بأقواس. تخبر هذه العلامة التعبيرية PowerShell بتشغيل الأمر المحاط بالأقواس أولاً قبل العمليات الأخرى.

في اللقطة أدناه، سترى أن النتيجة الوحيدة المُرجعة هي raspberry، وهو العنصر في الفهرس 4 والذي يتوافق مع السطر الخامس في ملف النص.

Returning a specific line from Get-Content results.

ماذا لو أردت الحصول على المحتوى في السطر الأخير؟ لحسن الحظ، لا تحتاج إلى معرفة العدد الإجمالي للأسطر. بدلاً من ذلك، استخدم [-1] كالفهرس، وسيقوم Get-Content بعرض السطر الأخير فقط من الملف.

(Get-Content .\fruits.txt)[-1]

تقييد عدد النتائج الأعلى المُرجعة بواسطة Get-Content

استخدم معلمة TotalCount من Get-Content لاسترجاع عدد محدد من الأسطر من ملف نصي. تقبل معلمة TotalCount قيمة طويلة تعني قيمة قصوى قدرها 9,223,372,036,854,775,807.

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

Get-Content .\fruits.txt -TotalCount 3

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

Reading the top three results using the Get-Content command and the TotalCount parameter.

استخدم معلمة PowerShell Tail لإرجاع النتائج من نهاية ملف

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

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

Get-Content .\fruits.txt -Tail 4

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

Getting the results from the end of a file using the Get-Content Tail parameter.

غالبًا ما يتم استخدام معلمة Tail بالتزامن مع معلمة Wait. باستخدام معلمة Wait، يتم الاحتفاظ بالملف مفتوحًا ويتم فحص المحتوى الجديد مرة كل ثانية واحدة. يظهر العرض أدناه استخدام معلمتي Tail و Wait. للخروج من Wait، استخدم مفتاح CTRL+C.

Get-Content -Path .\fruits.txt -Tail 1 -Wait
Using the wait and Tail parameters with Get-Content.

العودة بالنتائج كسلسلة واحدة

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

تعمل المصفوفات غالبًا بشكل رائع ولكن يمكن أن تجعل استبدال السلاسل أكثر صعوبة. يقوم معلم الباراميتر Raw في Get-Content بقراءة محتوى الملف ككائن سلسلة واحدة. على الرغم من أن الشيفرة أدناه هي نفسها التي تم استخدامها في المثال الأول، يقوم معلم الباراميتر Raw بتخزين محتوى الملف كسلسلة واحدة.

Save the content into to a object
 $fruits = Get-Content .\fruits.txt -Raw
 Display the type of the object
 $fruits.GetType()
 Retrieve the count of items within the object
 $fruits.Count
 Output the contents of the object to the console
 $fruits

يوضح لقطة الشاشة أدناه أن إضافة معلم الباراميتر Raw إلى Get-Content يؤدي إلى معالجة المحتوى كسلسلة وليس كمصفوفة من الكائنات.

Confirming that the Raw parameter of Get-Content reads the file content as a single string object.

بمجرد أن يكون لديك محتويات ملف في سلسلة واحدة باستخدام معلم الباراميتر Raw، ما الذي يمكنك فعله بها؟ ربما تحتاج إلى البحث عن سلسلة واستبدالها داخل محتوى تلك الملف. في المثال أدناه، يقرأ Get-Content محتوى ملف كسلسلة واحدة. ثم، باستخدام عامل الاستبدال replace، يتم استبدال كلمة معينة بأخرى.

ذات الصلة: البحث واستبدال السلاسل

# احصل على المحتوى الخام لملف النص
$fruits = Get-Content .\fruits.txt -Raw
# عرض المحتوى
$fruits
# ابحث واستبدل الكلمة 'apricot' بـ 'mango'
$fruits -replace 'apricot','mango'
Reading the content of a text file as a single string and replacing a word using the replace operator.

اقرأ المحتوى فقط من الملفات التي تم مطابقتها مع عامل التصفية

هل لديك مجلد ممتلئ بالملفات ولكن تحتاج إلى قراءة محتوى بعضها فقط؟ باستخدام PowerShell Get-Content، لا داعي لتصفية الملفات بشكل منفصل قبل قراءة محتواها. يحدد معلم الأمر Filter لـ Get-Content أي ملفات يقرأها.

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

# ينشئ Add-Content ملفات log1.log و log2.log إذا لم تكن موجودة بالفعل ويضيف القيمة المعطاة
Add-Content -Value "This is the content in Log1.log" -Path C:\demo\Log1.log
Add-Content -Value "This is the content in Log2.log" -Path C:\demo\Log2.log
# تحقق من أن الملفات قد تم إنشاؤها
Get-ChildItem C:\demo
Creating test .log files using Add-Content.

بعد إنشاء ملفات الاختبار الخاصة بك، استخدم معلم الـ Filter ومعلم الـ Path لقراءة فقط الملفات ذات الامتداد .log في الدليل الجذري. يشير النجمة المستخدمة في تعريف التصفية إلى Get-Content لقراءة أي ملف ينتهي بـ .log. تحد النجمة النهائية لمعلم المسار قراءة الملفات للدليل الجذري فقط.

Get-Content -Path C:\demo* -Filter *.log

كما هو موضح في الإخراج أدناه، يتم عرض محتوى الملفات .log فقط.

Using the Filter parameter with PowerShell Get-Content to limit the read files.

ذات الصلة: Get-ChildItem: قائمة الملفات، والسجلات، والشهادات، والمزيد كواحد

قراءة تيار البيانات البديل لملف

حتى الآن، كنت تعمل حصريًا مع ملفات النصوص، ولكن يمكن لأمر Get-Content قراءة البيانات من تيار البيانات البديل (ADS) لملف. لا تتردد في قراءة المزيد حول التيارات، ولكن يمكنك أن تعتبر التيار كخاصية بيانات أخرى مخزنة جنبًا إلى جنب مع محتويات الملف النموذجية.

تعتبر تيارات البيانات البديلة ميزة في نظام ملفات Windows NTFS، وبالتالي فإن هذا لا ينطبق على Get-Content عند استخدامه مع أنظمة التشغيل غير Windows.

يمكنك رؤية تيارات البيانات البديلة عند تشغيل Get-Item مع معلمة Stream. عند الإشارة إلى ملف باستخدام معلمة Stream، يُرجى العلم أن Get-Item يعيد خاصية تُسمى Stream كما هو موضح أدناه. يُمثل تيار محتوى الملف الافتراضي هذا بواسطة :$DATA.

لتوضيح التيار الافتراضي :$DATA، استخدم أمر Get-Item لعرض جميع التيارات المتاحة في ملف fruits.txt. كما هو موضح أدناه، يعرض Get-Item تيارًا واحدًا فقط.

Get-Item -Path .\fruits.txt -Stream *
Listing all available streams in a file using Get-Item.

معلمة Stream في Get-Content تقرأ صراحة محتوى التيار الافتراضي :$DATA كما هو موضح أدناه. المحتوى الذي يتم إرجاعه هو نفس محتوى Get-Content الافتراضي حيث يتم قراءة تيار :$DATA بشكل افتراضي.

Get-Content -Path .\fruits.txt -Stream ':$DATA'
Explicitly reading the :$DATA stream using Get-Content.

لتوضيح استرجاع تيار بيانات بديل باستخدام Get-Content ، قم بتعديل ملف باستخدام Add-Content لإضافة التيار الجديد. استخدم Get-Item لعرض التيار الجديد جنبًا إلى جنب مع التيار الافتراضي :$DATA ، كما هو موضح في المثال أدناه.

# أضف تيار بيانات بديل جديد باسم سري إلى ملف fruits.txt
Add-Content -Path .\fruits.txt -Stream Secret -Value 'This is a secret. No one should find this.'
Get-Item -Path .\fruits.txt -Stream *
Adding the Secret alternate data stream using Add-Content and displaying the new stream with Get-Item.

نظرًا لأنه يتم قراءة التيار :$DATA فقط بشكل افتراضي، استخدم معلمة Stream لأمر Get-Content لاسترجاع محتوى التيار الجديد Secret. كما هو موضح أدناه، يتم عرض محتوى التيار Secret بدلاً من محتوى الملف الافتراضي.

Get-Content -Path .\fruits.txt -Stream secret
Using Get-Content to read the Secret alternate data stream content.

خطوات مقبلة باستخدام PowerShell Get-Content

في هذا المقال، لقد تعلمت العديد من الطرق لاستخدام Get-Content لقراءة وتلاعب بالمحتوى. حتى تعلمت أن Get-Content مرن بما فيه الكفاية لقراءة المحتوى من تيارات بيانات بديلة!

بناءً على ما تعلمته في هذا المقال، ما هي الطرق الأخرى التي يمكنك استخدام Get-Content بها في عملك؟ ربما يمكنك استخدام Get-Content لتحديد ما إذا كان ملف النسخ الاحتياطي قديمًا وتشغيل مكالمة تلقائية لتشغيل عملية نسخ احتياطي؟

Source:
https://adamtheautomator.com/powershell-get-content/