powershell - 在 powershell 中比较两个 CSV 文件并创建输出
问题描述
我目前正在编写一个脚本来导入 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
解决方案
$CMDB_Installed = ... | Select -expa FullName -First 1 | Out-String
不要使用Out-String
,除非你想要一个for-display,多行字符串表示。
因此,您的文件路径变量包含换行符(换行符),这会Import-Csv
抱怨,因为文件名中的换行符在 NTFS 中是非法的(在 Windows 上)。
只需省略Out-String
调用,因为根据Select -expa FullName -First 1
定义已经输出了一个字符串(假设.FullName
输出对象的属性Get-ChildItem
是[string]
-typed 的)。
要重现问题:
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
推荐阅读
- python - Python:将元素插入到不同大小的数组中
- php - 导航栏如何使用 codeIgniter 在这个 php 代码中工作?
- json - ElasticSearch:按 top_hits 排序的聚合在文档数上有所不同
- autosar - 达芬奇配置器错误待解决
- c# - 关于泛型思维方式的概念问题
- node.js - 无法在 Azure 应用服务中使用 getArchiveLink() 方法获取存档链接
- amazon-ec2 - 在 EC2 AWS 实例的公共网络上使非默认端口可访问
- gitlab - 如何成功创建 gitlab 标签
- python - 如何通过 twython 流关注公共 Twitter 列表?
- svn - SVN乌龟图标不显示