我有一个.csv
文件,如下所示:
"LastWriteTime","BackupFile","MountedDrive"
"07:07 Fri Mar 03 23","c:\temp\xxx01-01.mrimg","A"
"08:07 Fri Mar 03 23","c:\temp\xxx01-02.mrimg","B"
"09:07 Fri Mar 03 23","c:\temp\xxx01-03.mrimg","C"
它是一个日志文件,我有一个函数,每次它做一些事情时都会添加一个条目,这里是函数的一个片段:
$Log = Import-Csv -Path "C:\Temp\Logging.csv"
$NewLogEntry = [PSCustomObject]@{
LastWriteTime = $Path.LastWriteTime.ToString('hh:mm ddd MMM dd yy')
BackupFile = $path
MountedDrive = $Drive.ToUpper()
}
$Log += $NewLogEntry
$Log | ConvertTo-Csv | Set-Content -Path "C:\Temp\Logging.csv" -Force
这行$Log += $NewLogEntry
似乎随机抛出一个错误,它有时会工作,但主要是抛出一个错误:
Method invocation failed because [System.Management.Automation.PSObject] does not contain a method named 'op_Addition'.
At line:24 char:12
+ $Var = $Log += $NewLogEntry
+ ~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (op_Addition:String) [], RuntimeException
查找它,我发现答案表明它与$log
没有被覆盖有关,所以我尝试了:
$Log2 = Log+= $NewLogEntry
$Log2 | ConvertTo-Csv | Set-Content -Path "C:\Temp\Logging.csv" -Force
还是不行
完全卡住了。谢谢帮忙。
1条答案
按热度按时间x4shl7ld1#
当您的CSV只有一行时会发生错误,
Import-Csv
的输出在分配给变量时会被枚举,如果CSV碰巧只有一行,那么变量的类型将是PSObject
而不是object[]
,并且+=
在这种情况下会失败,因为PSObject
没有定义op_Addition
实现。重现错误的简单方法:
为了克服这个问题,你可以使用数组子表达式运算符
@( )
,这样$Log
就总是一个object[]
:然而,更简单的方法是使用
-Append
,这样就不需要导入CSV: