سؤال

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

$computers = Get-content computers.txt
$users = users.csv
$header = 'Computer','User','Date','Time'

Foreach ($computer in $computers)
{
$file = $computer +'.txt'

$a = import-csv $file -Header $header | Select -first 1 
$obj = New-Object PSObject
$obj | Add-Member NoteProperty Computer ($a.Computer)
$obj | Add-Member NoteProperty User ($a.User)
$obj | Add-Member NoteProperty Date ($a.Date)
$obj | Add-Member NoteProperty Time ($a.Time)

Write-Output $obj
$obj | Export-csv -path  $users -notype
}

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

هل كانت مفيدة؟

المحلول

أنت تقوم بالكتابة فوق ملف CSV مع كل تكرار حلقة. أعتقد أن ما يلي يعطي ما أنت بعد افتراض أن كل ملف CSV لديه أربعة أعمدة فقط (أي الكمبيوتر، المستخدم، التاريخ، الوقت):

Get-content computers.txt | foreach-object {
    import-csv "$computer.txt" -Header $header | Select -first 1 
} | Export-csv $users -notype

نصائح أخرى

قم بإنشاء متغير صفيف وإضافة كل $ OBJ إليها. بعد حلقة Foreach، تصدير مجموعة الكائنات على سبيل المثال:

$arr = @()

foreach (...) {
    ...
    $arr += $obj
}

$arr | Export-csv -path  $users -notype
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top