يتيح لك cmdlet Export-Csv
في PowerShell و cmdlet Import-Csv
في PowerShell للمسؤولين استيراد ملفات CSV عبر حلقة foreach، استخدم Export-Csv
لإلحاق ملفات CSV وتصدير مصفوفات إلى ملف CSV والكثير غير ذلك.
في هذا المقال، ستتعلم حول العديد من السيناريوهات الشائعة التي يمكنك استخدام PowerShell لإدارة ملفات CSV مثل:
- قراءة ملفات CSV باستخدام PowerShell
- حفظ ملفات CSV باستخدام PowerShell
- تنسيق الإخراج قبل تشغيل
Export-CSV
- إلحاق بملف CSV
- إلحاق الفروق بملف موجود
Export-CSV
وسلسلة#TYPE
إذا لم تكن على دراية بكيفية عمل ملفات CSV من الداخل، فهي ملفات نصية تتبع تنسيقًا قياسيًا لفصل القيم بفواصل عند إنشاء جدول. يمكنك إنشاء ملف CSV في PowerShell باستخدام cmdlet Export-Csv
وتوجيه كائن أو أكثر إليه.
الأمر أدناه يجد أول عمليتين قيد التشغيل ويمرر الكائنات الناتجة إلى cmdlet Export-Csv
. يقوم cmdlet Export-Csv
بإنشاء ملف CSV بالاسم processes.csv في جذر محرك النظام الخاص بك (على الأرجح C:\).
الآن افتح processes.csv باستخدام Notepad. يجب أن ترى "Name","SI","Handles","VM"
في الأعلى كرؤوس. سترى أيضًا #TYPE System.Diagnostics.Process
، والذي قد لا يكون منطقيًا الآن. لا تقلق، سنغطي هذه السلسلة في هذا المقال.
قراءة ملفات CSV باستخدام Import-Csv
هل ترغب في المزيد من النصائح مثل هذه؟ تحقق من مدونتي الشخصية حول PowerShell.
PowerShell لديها بعض الأوامر التي تسمح لك بقراءة ملفات النص. تلك الأوامر هي Get-Content
و Import-Csv
. يقرأ كل من هذين الأمرين بشكل فني الملف بنفس الطريقة. ولكن Import-Csv
تأخذ خطوة إضافية. Import-Csv
تفهم الهيكل الأساسي ليس فقط ملف نص ولكن ملف CSV.
نظرًا لأن ملف CSV يتبع مخططًا معينًا، يفهم Import-Csv
مخطط CSV. هذا الأمر لا يقرأ فقط ملف النص من القرص ولكنه أيضًا يحول الصفوف في ملف CSV إلى كائنات PowerShell.
ملفات غير CSV
عادةً ما يكون بيانات CSV منفصلة بواسطة فاصلة ولكن هناك أوقات تكون فيها بيانات CSV (ليست تقنيًا CSV في تلك اللحظة) منفصلة بواسطة فاصل مختلف. يكون هذا الفاصل في بعض الأحيان عبارة عن مسافة تابعة أو ربما فاصلة منقوطة.
إذا كان لديك ملف CSV بفاصل مختلف، يمكنك استخدام معلمة Delimiter
. تُخبر هذه المعلمة Import-Csv
بعدم البحث عن الفواصل، التي يفعلها بشكل افتراضي باستخدام الفواصل العادية، بل بقيمة أخرى.
على سبيل المثال، إذا كان لديك ملف مفصول بواسطة الأقواس، يمكنك قراءة الملف كما يلي:
إضافة الرؤوس
A common Import-Csv
parameter is Header
. This parameter lets you specify the property names of the objects created by this cmdlet.
بشكل افتراضي، سيتعامل الأمر Import-Csv
مع الصف الأول في ملف CSV كرؤوس. ثم سيحول هذه القيم إلى خصائص لكل صف (كائن). ولكن إذا كان لديك ملف CSV لا يحتوي على صف رئيسي، يمكنك استخدام معلمة Header
لتعريف واحد بنفسك.
تمنع المعلمة Header
استخدام Import-CSV
لصفك الأول كرأس، وتوفر لك أيضًا عناء فتح ملف CSV يدويًا لإضافة رؤوس بنفسك.
لتوضيح هذا السلوك، افتح المفكرة وانسخ/الصق النص أدناه. سيمثل هذا النص مجموعة بيانات تحتوي على ثلاثة صفوف وعمودين.
احفظ ملف النص كـ test.csv. لا تنس تمكين ملحقات نوع الملف أو إطار الملف بعلامات اقتباس مزدوجة حتى لا تقوم بحفظه عن طريق الخطأ باسم ينتهي بـ .csv.txt!
الآن، استخدم Import-CSV
لقراءة ملف CSV الذي تم إنشاؤه مؤخرًا بدون معلمة Header
وافحص الناتج.
لاحظ أنه تم استخدام الصف الأول كخصائص الكائن. A
و 1
ليست “تسميات” ترغب فيها لخصائص الكائن. A
و b
و c
هي أحرف بينما 1
و 2
و 3
هي أرقام. تحتاج إلى تعريف هذه باستخدام معلمة Header
كما هو موضح أدناه:
حفظ ملفات CSV باستخدام PowerShell
إذا كنت بحاجة إلى إنشاء أو حفظ ملف CSV من كائنات PowerShell ، يمكنك الذهاب أيضًا في الاتجاه الآخر. بينما تحول أدوات الأمر Import-Csv
ملف CSV إلى كائنات PowerShell ، فإن Export-Csv
يقوم بالعكس. تقوم هذه الأداة بـ “تحويل” كائنات PowerShell إلى ملف CSV.
بحفظ ملف CSV بواسطة Export-Csv
يسمح لك بعرض أو استخدام تلك البيانات في أنظمة أخرى في وقت لاحق.
على سبيل المثال ، يمكنني حفظ جميع العمليات الجارية على جهاز الكمبيوتر الخاص بي عن طريق توجيه Get-Process
إلى أداة الأمر Export-Csv
.
أمر Export-Csv
بسيط بطبيعته ولكن هناك بعض الأمور التي يجب أن تكون متيقظًا من أجلها.
تنسيق الإخراج قبل تشغيل الأمر Export-CSV
كما رأيت أعلاه ، يقوم Export-Csv
بحد ذاته بتحويل “خام”. لا يضيف أي تنسيق نص متميز ، ولا يضيف أي ألوان وما إلى ذلك.
واحدة من أكثر الأمور الشائعة هي محاولة جعل الإخراج يبدو أفضل قبل التصدير إلى ملف CSV. قد يحاول العديد من المستخدمين جعل الإخراج يبدو أفضل قبل التصدير إلى ملف CSV. ولكنني على وشك أن أظهر لك أن هذا سيجعل الأمور أسوأ.
يمكنك فتح ملف CSV في برنامج Microsoft Excel وتغيير النص إلى خط عريض، وتطبيق تنسيقات الألوان والعديد من الأشياء الأخرى، ولكن إذا قمت بحفظ الملف كملف CSV (بدلاً من مصنف Excel)، فسيتم مسح جميع التنسيقات. فملف CSV ببساطة ليس “ذكيًا” بما فيه الكفاية.
تذكر أن ملفات CSV هي مجرد ملفات نصية عادية تحتوي على قيم محددة بفواصل (أو أحيانًا علامات تبويب). سيكون استخدام أمر Import-Csv
مع أي أمر برمجة سكريبتية PowerShell من نوع Format-*
غير مجدي.
وفقًا لـ وثائق Microsoft Export-Csv: “لا تقم بتنسيق الكائنات قبل إرسالها إلى أمر Export-CSV
. إذا تلقى أمر Export-CSV
كائنات مُنسّقة، ستحتوي ملف CSV على خصائص التنسيق بدلاً من خصائص الكائن.”.
لماذا يحدث هذا؟
افتح نافذة PowerShell وأنشئ بعض البيانات الوهمية. دعنا نستخدم مثال Get-Process
الذي تم تغطيته في الجزء الأول من هذه المقالة. ولكن هذه المرة، قم بتخزين الناتج في متغير. ثم، قم بتوصيل هذه الكائنات المعالجة إلى أمر Format-Table
.

Format-Table
يمكنك أن ترى أنه باستخدام أمر Format-Table
، يمكنك الحصول على ناتج نظيف وجدولي.
الآن احفظ هذا الناتج في متغير آخر.
ثم عرض الخصائص في قيم المتغيرين $a
و $b
باستخدام الأمر Get-Member
. سيساعدك هذا الأمر في فهم سبب عدم تصدير هاتين الكائنتين المشابهتين بنفس الطريقة إلى ملف CSV.


Format-Table
‘s many object typesالإخراج المباشر من Get-Process
يعيد: TypeName: System.Diagnostics.Process
في حين يكون الإخراج من Format-Table
مختلفًا تمامًا. يعيد العديد من أنواع مختلفة بخصائص متنوعة.
إذا قمت بعرض $a
و $b
في وحدة التحكم، سيكون الإخراج متطابقًا. يعود هذا السلوك إلى نظام تنسيق PowerShell.
كيف يؤثر هذا على إخراج Export-Csv
?
Export-Csv
يقرأ كل كائن كما هو. عند توجيه الإخراج إلى cmdlet Format-*
، فإنك تقوم بتغيير الإدخال الذي يتلقاه Export-CSV
. وهذا يؤثر بدوره على الإخراج الذي يتم حفظه في ملف CSV الجديد الخاص بك.
إذا كنت ستقوم بتوجيه الإخراج إلى cmdlet Export-Csv
، فلا تقوم بتوجيه الإخراج إلى أي cmdlet Format-*
.
تذكر أن ملفات CSV مركزة على البيانات، وليس على التنسيق.
إضافة إلى ملف CSV
في بعض الأحيان قد تكون لديك ملف موجود ترغب في إضافة البيانات إليه بدلاً من إنشاء واحد جديد بالكامل. بشكل افتراضي، سيقوم Export-Csv
بالكتابة فوق أي ملف يتم تحديده عبر معلمة Path
.
إذا كنت بحاجة إلى إضافة بيانات إلى CSV، استخدم معلمة Append
.
لنقل أن لديك حلقة تكرار تريد فيها حفظ كل كائن معالج في ملف CSV. في كل تكرار، لديك كائن مختلف ترغب في حفظه في ملف CSV. نظرًا لأنك تستدعي \code{Export-Csv} مرارًا وتكرارًا، فسيقوم بالكتابة فوق ملف CSV ذلك إذا لم تستخدم معلمة \code{Append}. بدون معلمة \code{Append}، ستحصل فقط على الكائن الأخير، والذي في معظم الحالات ليس الناتج المرغوب فيه.
المثال أدناه يبحث عن أول خمسة عمليات قيد التشغيل. ثم يدخل في حلقة \code{foreach} في PowerShell ويسجل خصائص \code{Name} و \code{ProductVersion} إلى ملف \diy5{test.csv} واحد تلو الآخر.
بدون استخدام معلمة \code{Append}، سترى أنه فقط العملية الخامسة ستظهر في ملف CSV.
إضافة الاختلافات إلى ملف CSV
من الممكن إضافة فقط اختلافات الخصائص إلى ملف CSV موجود باستخدام \code{Export-Csv}. وهذا يعني أنه إذا كانت أعمدة صف CSV والكائن المراد تسجيله مختلفين، فقم بإضافتهما.
لإضافة فقط الاختلافات إلى ملف CSV، ستحتاج إلى استخدام معلمتي \code{Append} و \code{Force} معًا. وفقًا لتوثيق Microsoft “عندما يتم دمج معلمتي \code{Force} و \code{Append}، يمكن كتابة كائنات تحتوي على خصائص غير متطابقة إلى ملف CSV. يتم كتابة الخصائص المتطابقة فقط إلى الملف. تُتجاهل الخصائص غير المتطابقة.”
لتوضيح، قم بإنشاء كائن يحتوي على خاصيتين؛ Name
و Age
.
الآن، قم بإنشاء كائن آخر يحتوي على خاصية Name
و Zip
.
كل كائن لديه خصائص مختلفة.
بعد ذلك، قم بإنشاء ملف CSV من الكائن الأول ثم حاول إلحاق الكائن الثاني بالملف CSV بدون استخدام معلمة Force
. ستتلقى خطأ.

Export-Csv
without Force
ومع ذلك، إذا استخدمت معلمة Force
، ستعمل Export-Csv
بشكل جيد.
ومع ذلك، ستلاحظ أن عمود Zip
قد اختفى في ملف CSV. استخدم Force
بحذر. قد لا يقدم النتائج المقصودة.
Export-CSV
وسلسلة #TYPE
بشكل افتراضي، عند استخدام Export-CSV
بدون معلمات إضافية، سيتم تضمين سلسلة #TYPE
في أعلى ملف CSV الخاص بك. يتبع هذه السلسلة نوع الكائن الذي تلقاه Export-Csv
.
في معظم الأحيان، هذه السلسلة ليست فعلا مفيدة عند استهلاك الإخراج. تكون هذه السلسلة هنا فقط في حالة الحاجة إلى الحفاظ على نوع الكائن الذي جاءت منه الخصائص والقيم.
لإزالة هذه السلسلة، استخدم معلمة NoTypeInformation
. تقوم هذه المعلمة بإزالة هذه السلسلة تمامًا من ملف CSV.
لاحظ أنه بدءًا من PowerShell Core، لم يعد ذلك ضروريًا.
الملخص
استخدام سطر الأوامر Import-CSV و Export-CSV في PowerShell يتيح لك العمل بسهولة مع ملفات CSV. هذه هي اثنين من سطور الأوامر المفيدة التي يجب عليك استخدامها بانتظام عند التعامل مع الكائنات وملفات CSV.
أملي أن مع الشروحات والأمثلة التي عرضتها هنا يمكنك أن تحصل على فهم واضح للحالات التي يمكنك فيها استغلال هذه السطور الأوامر لصالحك.
ترغب في المزيد من النصائح مثل هذه؟ تفقد مدونتي الشخصية لـ PowerShell هنا.