تصدير-CSV: تحويل الكائنات إلى ملفات CSV بكفاءة

إذا كنت بحاجة إلى إرسال معلومات من PowerShell إلى ملف CSV ، فإن cmdlet Export-CSV هنا للمساعدة. يوفر هذا الأمر للمسؤولين الكثير من الوقت في التعامل مع النصوص الفارغة وتنظيمها في تنسيق منظم. بدلاً من التلاعب مع Excel ، يمكننا استخدام PowerShell لإنشاء ملفات CSV.

يمكنك إنشاء ملفات CSV لتغذية التقارير وإرسالها إلى قواعد البيانات وأكثر من أي كائن PowerShell بمساعدة cmdlet Export-Csv.

تنسيق CSV هو مجرد قائمة مفصولة بفواصل للصفوف المخزنة كملف نصي. نظرًا لأنه ملف نصي فقط ، يمكننا نظريًا استخدام أمر نصي عام مثل Set-Content للقيام بالوظيفة. ومع ذلك ، يتطلب استخدام أمر عام بناء الهيكل الضروري لملف CSV بأنفسنا. لماذا نفعل ذلك عندما لدينا أمر تصدير CSV بالفعل في Export-Csv لإرسال الإخراج إلى ملف؟

تحتاج ملفات CSV إلى هيكل محدد. قدرة هذا الأمر على فهم وقراءة وتحويل المعلومات إلى ملفات CSV هو ما يجعل هذا الأمر PowerShell مفيدًا جدًا.

إدارة وتقرير حول Active Directory ، Exchange وMicrosoft 365 باستخدام ManageEngine ADManager Plus. حمل النسخة التجريبية مجانًا!

Objects -eq صفوف CSV

يحتوي cmdlet Export-Csv على هدف واحد فقط؛ وهو حفظ كائنات PowerShell في ملف CSV.

لنقل أن لديك كائنًا يحتوي على خاصيتين تسمى foo و bar. لكل من هذه الخصائص قيم مقابلة تساوي 1 و 2 على التوالي. عند إرسال هذا الكائن إلى Export-Csv، سينشئ ملف CSV يحتوي على عمودين وصف واحد. يمكنك بعد ذلك استيراد محتويات ملف CSV وفحص ما يبدو عليه.

PS> $testObject = [pscustomobject]@{'foo' = 1; 'bar' = 2}
PS> $testObject | Export-Csv -Path C:\TestObject.csv
PS> $testObject
foo	bar
1 	2
PS> Import-Csv -Path C:\TestObject.csv
foo	bar
1  	2

تعامل PowerShell بشكل أساسي مع كائن في الذاكرة وملف CSV بنفس الطريقة! كما أنه يعتبر تسميات الأعمدة الخاصة بي كعناوين. تصدير الكائنات باستخدام هذا الcmdlet يشبه حفظ الكائن في نظام الملفات. باستخدام أمر PowerShell النصي العام Get-Content، يمكننا فحص النص الخام لمعرفة ما قامت بتصديره الأمر Export-Csv.

PS> Get-Content -Path C:\TestObject.csv

#TYPE System.Management.Automation.PSCustomObject
"foo","bar" "1","2"

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

معلمات Export-CSV المفيدة

في PowerShell لنظام التشغيل Windows 5.1، يحتوي cmdlet Export-CSV على نوع الكائن الذي أنشأ ملف CSV. إذا كنت تفضل عدم رؤية هذا السطر، فإن المعلمة الشائعة هي NoTypeInformation التي تقضي على هذا السطر تمامًا.

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

معامل آخر مفيد هو Delimiter. في بعض الأحيان، قد تجد نفسك بحاجة إلى إنشاء ملف CSV لا يستخدم الفاصل العادي (الفاصلة) لفصل الحقول. ربما تحتاج بدلاً من ذلك إلى إنشاء ملف يحتوي على الكثير من البيانات ويستخدم الأشرطة كفواصل أو ربما حتى فاصلات منقوطة. يمكن لـ cmdlet PowerShell Export-Csv مساعدتنا بهذا أيضًا عند تحديد الفاصل الذي نحتاجه.

PS> $testObject | Export-Csv -Path C:\TestObject.csv -Delimiter "`t"
PS> Get-Content -Path C:\TestObject.csv

#TYPE System.Management.Automation.PSCustomObject
"foo"   "bar" "1"     "2"

التعامل مع علامات الاقتباس

عند إنشاء صفوف CSV، يُحيط Export-Csv بجميع الحقول بعلامات الاقتباس. في بعض الحالات، قد لا يكون ذلك مرغوبًا فيه. للأسف، لا يوجد وسيلة لمنع ذلك. ولكن، باستخدام القليل من الشيفرة الإضافية، يمكنك تحقيق ذلك.

يمكنك أدناه رؤية مثال على إنشاء ملف CSV. ثم يقوم Get-Content بقراءة ملف النص الخام، ثم يقوم بتبديل جميع علامات التنصيص المزدوجة في الذاكرة بلا شيء. بعد ذلك، يقوم Set-Content بكتابة تلك المعلومات في الذاكرة إلى القرص الصلب.

$testObject | Export-Csv -Path C:\TestObject.csv
(Get-Content -Path C:\TestObject.csv -Raw).replace('"','') | Set-Content -Path C:\TestObject.csv

إدارة وتقرير دليل الخدمة، وتبادل ومايكروسوفت 365 باستخدام ManageEngine ADManager Plus. قم بتنزيل النسخة التجريبية المجانية!

الملخص

يعد cmdlet Export-Csv أداة بسيطة ولكنها مفيدة للغاية في إدارة بيانات CSV. يمكنها فهم هيكل ملف بيانات CSV وتحويل كائنات PowerShell إلى صفوف CSV.

I’m not about to go back to batch, or VBScript where creating a CSV file from an existing object required instantiating a FileSystemObject, creating a loop and a bunch of Write() methods!

هذا الأمر هو سبب آخر رائع للبدء في كتابة رموز PowerShell اليوم!

Source:
https://adamtheautomator.com/export-csv/