Сравнение двух CSV-файлов в PowerShell и создание вывода - PullRequest
0 голосов
/ 10 ноября 2018

В настоящее время я работаю над сценарием для импорта 2 файлов CSV, сравнения столбцов fqdn и вывода результатов в файл.

Проблема заключается в том, что после многих часов тестирования я нахожусь в том, что мой скрипт работает до момента получения пути для каждого файла, который нужно импортировать, но я не могу показатьсячтобы получить команду import-csv, чтобы сделать то, что мне нужно.

Буду признателен за любые рекомендации, которые вы можете дать.

Мой сценарий и ошибка, которую я получаю, приведены ниже:

$CMDB_Installed = Get-ChildItem -Path C:\Users\nha1\Desktop\Reports\CMDBInstall | Sort CreationTime -Descending | Select -expa FullName -First 1 | Out-String

$SCOM_AgentList = Get-ChildItem -Path C:\Users\nha1\Desktop\Reports\SCOMUAT | Sort CreationTime -Descending | Select -expa FullName -First 1 | Out-String



$SL = Import-Csv $SCOM_AgentList

$CL = Import-Csv $CMDB_Installed



Compare-Object -ReferenceObject $CL -DifferenceObject $SL -Property fqdn |

Export-Csv -NoTypeInformation -Path = C:\Users\nha1\Desktop\Reports\AuditOutput\UATNeedsAgent+SCOM\UATHosts-NotinSCOM$(get-date -format yyyy-MM-dd).csv

Сообщение об ошибке:

import-csv : Illegal characters in path.

At line:4 char:7

+ $SL = import-csv $SCOM_AgentList

+       ~~~~~~~~~~~~~~~~~~~~~~~~~~

    + CategoryInfo          : OpenError: (:) [Import-Csv], ArgumentException

    + FullyQualifiedErrorId : FileOpenFailure,Microsoft.PowerShell.Commands.ImportCsvCommand


import-csv : Illegal characters in path.

At line:5 char:7

+ $CL = import-csv $CMDB_Installed

+       ~~~~~~~~~~~~~~~~~~~~~~~~~~

    + CategoryInfo          : OpenError: (:) [Import-Csv], ArgumentException

    + FullyQualifiedErrorId : FileOpenFailure,Microsoft.PowerShell.Commands.ImportCsvCommand

1 Ответ

0 голосов
/ 10 ноября 2018
$CMDB_Installed = ... | Select -expa FullName -First 1 | Out-String 

Не используйте Out-String, , если вы не хотите для отображения , многострочный строковое представление.

Таким образом, переменные пути к файлу содержат новые строки (разрывы строк), на которые Import-Csv жалуется, учитывая, что новые строки в именах файлов недопустимы в NTFS (в Windows).


Просто опустить вызов Out-String, учитывая, что Select -expa FullName -First 1 по определению уже выводит строку (учитывая, что свойство .FullName на объектах, выводимых Get-ChildItem, имеет тип [string] ).


Чтобы воссоздать проблему:

PS> Import-Csv "foo`n"  # illegal line break in file path
Import-Csv : Illegal characters in path.

Чтобы продемонстрировать, что Out-String создает многострочную строку даже с однострочной строкой в ​​качестве ввода:

PS> ('foo' | Out-String).EndsWith("`n")
True
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...