我目前正在处理一个脚本,用于导入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
答案 0 :(得分:1)
$CMDB_Installed = ... | Select -expa FullName -First 1 | Out-String
请勿使用Out-String
,除非您需要用于展示的,多行,否则 em>字符串表示形式。
您的文件路径变量因此包含换行符 (换行符),Import-Csv
对此抱怨,因为NTFS中文件名中的换行符是非法的(在Windows上)。
只需忽略 Out-String
调用,因为根据定义,Select -expa FullName -First 1
已经输出了一个字符串(假设.FullName
输出的对象具有Get-ChildItem
属性1}}是[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