如何使用 powershell 将信息添加到行和 csv?
how to add information to a row and csv with powershell?
我有一个包含 3 列 SID、SamAccount 名称、已启用的 csv 文件。
我还有一个文件夹,其中包含以“UVHD-”+SID 组合方式调用的文件。
我尝试用 Length、LastWriteTime 更新 csv 文件
所以它会像这样例如:
SID SAMAccountName Enabled Length LastWriteTime
S-... FelixR False 205520896 02/02/2021 9:13:40
我试了很多东西都失败了
这是我能得到的最好的:
Import-Csv $path\SID-ListTEST2.csv | select -ExpandProperty SID | ForEach-Object { Get-Childitem –Path $path\"UVHD-"$_.vhdx | Export-Csv $path\SID-ListTEST2.csv -Append | where $_ }
(
Import-Csv $path\SID-ListTEST2.csv |
Select-Object *,
@{
Name='LastWriteTime';
Expression={ (Get-Item "$path\UVHD-$($_.SID).vhdx").LastWriteTime }
}
) | # Export-Csv -NoTypeInformation -Encoding utf8 $path\SID-ListTEST2.csv
输出到显示器;从最后一行删除 #
以改为导出到 CSV 文件。
注意管道周围的 (...)
,它确保所有输出都被预先收集 ,这是将结果 保存回原始输入文件的先决条件。请注意,原始字符编码不一定会保留 - 使用 -Encoding
指定所需的编码。
这增加了一个额外的属性,LastWriteTime
;类似地构造其他的。
为了提高性能,您可以缓存 Get-Item
调用的结果,这样就不必在每次计算时都重复属性:在最简单的情况下,在 中使用 ($script:file = Get-Item ...)
first 计算 属性,然后您可以将其重用为 $script:file
(或只是 $file
) 在后续的。请注意,$script:
范围修饰符是必需的,因为 child 范围中的计算属性 运行 的脚本块。[1]
请注意,如果不存在匹配文件,Get-Item
调用将静默 失败并默认为 $null
。
[1] 因此,更稳健但更麻烦的方法是使用 Set-Variable -Scope 1 file (Get-Item ...)
而不是 $script:file = Get-Item ...
,以确保变量是在直接父作用域,无论它是什么。
我有一个包含 3 列 SID、SamAccount 名称、已启用的 csv 文件。 我还有一个文件夹,其中包含以“UVHD-”+SID 组合方式调用的文件。 我尝试用 Length、LastWriteTime 更新 csv 文件 所以它会像这样例如:
SID SAMAccountName Enabled Length LastWriteTime
S-... FelixR False 205520896 02/02/2021 9:13:40
我试了很多东西都失败了 这是我能得到的最好的:
Import-Csv $path\SID-ListTEST2.csv | select -ExpandProperty SID | ForEach-Object { Get-Childitem –Path $path\"UVHD-"$_.vhdx | Export-Csv $path\SID-ListTEST2.csv -Append | where $_ }
(
Import-Csv $path\SID-ListTEST2.csv |
Select-Object *,
@{
Name='LastWriteTime';
Expression={ (Get-Item "$path\UVHD-$($_.SID).vhdx").LastWriteTime }
}
) | # Export-Csv -NoTypeInformation -Encoding utf8 $path\SID-ListTEST2.csv
输出到显示器;从最后一行删除 #
以改为导出到 CSV 文件。
注意管道周围的 (...)
,它确保所有输出都被预先收集 ,这是将结果 保存回原始输入文件的先决条件。请注意,原始字符编码不一定会保留 - 使用 -Encoding
指定所需的编码。
这增加了一个额外的属性,LastWriteTime
;类似地构造其他的。
为了提高性能,您可以缓存 Get-Item
调用的结果,这样就不必在每次计算时都重复属性:在最简单的情况下,在 中使用 ($script:file = Get-Item ...)
first 计算 属性,然后您可以将其重用为 $script:file
(或只是 $file
) 在后续的。请注意,$script:
范围修饰符是必需的,因为 child 范围中的计算属性 运行 的脚本块。[1]
请注意,如果不存在匹配文件,Get-Item
调用将静默 失败并默认为 $null
。
[1] 因此,更稳健但更麻烦的方法是使用 Set-Variable -Scope 1 file (Get-Item ...)
而不是 $script:file = Get-Item ...
,以确保变量是在直接父作用域,无论它是什么。