如何使用powershell将信息添加到行和csv



我有一个csv文件,包含3列SID、SamAccount名称和ENABLED。我也有包含文件的文件夹;UVHD-"+SID。我尝试用Length,LastWriteTime更新csv文件因此它将是这样的,例如:

SID     SAMAccountName     Enabled      Length      LastWriteTime
S-...   FelixR             False        205520896   02/02/2021  9:13:40

我尝试了很多事情,但都失败了这是我能得到的最好的:

Import-Csv $pathSID-ListTEST2.csv | select -ExpandProperty SID | ForEach-Object { Get-Childitem –Path $path"UVHD-"$_.vhdx | Export-Csv $pathSID-ListTEST2.csv -Append | where $_   }

使用计算的属性:

(
Import-Csv $pathSID-ListTEST2.csv | 
Select-Object *, 
@{ 
Name='LastWriteTime';
Expression={ (Get-Item "$pathUVHD-$($_.SID).vhdx").LastWriteTime } 
}
) | # Export-Csv -NoTypeInformation -Encoding utf8 $pathSID-ListTEST2.csv

输出到显示器;从最后一行中删除#以导出到CSV文件
请注意管道周围的(...),它确保所有输出都在之前收集,这是将结果保存回原始输入文件的先决条件。请注意,不一定要保留原始字符编码-请使用-Encoding指定所需的编码

这添加了一个附加属性LastWriteTime;以类似的方式构造其他的。

为了提高性能,可以缓存Get-Item调用的结果,这样就不必在每个计算属性中重复:在最简单的情况下,在第一个计算属性中使用($script:file = Get-Item ...),然后可以在后续属性中作为$script:file(或仅$file(重用。请注意,$script:作用域修饰符是必要的,因为计算属性的脚本块在作用域中运行[1]

请注意,如果不存在匹配的文件,Get-Item调用将以静默方式失败,并默认为$null


[1]因此,更稳健但更麻烦的方法是使用Set-Variable -Scope 1 file (Get-Item ...)而不是$script:file = Get-Item ...,以确保在直接父作用域中创建变量,无论它是什么。

相关内容

  • 没有找到相关文章

最新更新