Есть ли способ написать журнал на содержимое файла CSV - PullRequest
0 голосов
/ 27 марта 2020

Я очень новичок в powershell. Я работаю над экспортом CSV-файлов из базы данных, которая периодически обновляется. Например, он выведет CSV-файлы, такие как Test1.csv, и содержимое для первого запуска будет

Test1.csv<br> 111,1,111 222,1,222 333,1,333

, если сценарий будет запущен во второй раз, выходные данные тот же Test1.csv файл будет

Test1.csv<br> 111,1,111 222,1,222

Есть ли способ написать команду для вывода в файл журнала, который говорит, что 333 был удален из файла Test1.csv?

1 Ответ

1 голос
/ 27 марта 2020

Вы можете сделать что-то похожее на следующее:

$before = Get-Content Test1.csv

# Run some code here that may change Test1.csv

$after = Get-Content Test1.csv
$removed,$added = @(Compare-Object $before $after).where({$_.SideIndicator -eq '<='},'Split')
if ($removed) {
    "The following lines were removed: "
    $removed.InputObject
}
if ($added) {
    "The following lines were added: "
    $added.InputObject
}

Объяснение:

Вы можете читать файлы с помощью Get-Content. Как правило, вы хотите использовать Import-Csv с файлами CSV, но ваши файлы не имеют заголовков, количество столбцов не гарантировано, и вы не хотите манипулировать данными.

Compare-Object по умолчанию будут перечислены различия в двух сравниваемых объектах. Свойство SideIndicator этого вывода указывает, к какому объекту относятся разные данные (в данном случае текстовая строка). При использовании метода where() в режиме Split объекты, соответствующие критериям {}, выводятся в одном массиве, а остальные объекты - в другом. Найденные данные хранятся в свойстве InputObject.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...