我有一个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 ...
,以确保在直接父作用域中创建变量,无论它是什么。