【问题标题】:Comparing two CSV files in powershell and creating an output在 powershell 中比较两个 CSV 文件并创建输出
【发布时间】:2018-11-11 03:32:54
【问题描述】:

我目前正在编写一个脚本来导入 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

【问题讨论】:

    标签: powershell


    【解决方案1】:
    $CMDB_Installed = ... | Select -expa FullName -First 1 | Out-String 
    

    不要使用Out-String除非你想要一个用于显示多行字符串表示。

    因此,您的文件路径变量包含 换行符(换行符),Import-Csv 抱怨,因为文件名中的换行符在 NTFS 中是非法的(在 Windows )。


    只需省略调用Out-String,因为根据定义Select -expa FullName -First 1已经输出了一个字符串(假设Get-ChildItem输出的对象上的.FullName属性是[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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-01
      • 2022-01-24
      • 1970-01-01
      • 1970-01-01
      • 2022-10-13
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多