如何使Powershell将结果输出到csv

How to make Powershell to output the result to a csv

我正在尝试将我从“Get-ChildItem”获得的结果输出到 csv 文件 我只需要保存 LastWriteTime 和名称。

This is the Get-ChildItem output

我正在尝试

    $pc = Get-WmiObject Win32_ComputerSystem
    $file = Get-ChildItem -Path S:\Docker\RCT\repo\*xml -Recurse -Force 
    
    $DeviceObj = New-Object PSObject -Property @{
                        DeviceName = $pc.Name
                        FileName = $file.Name
                        FileDate = $file.LastWriteTime
                    }
    $DeviceObjList += $DeviceObj
    $DeviceObjList | Export-Csv -Path "$current_path\FileStatus.csv" -NoTypeInformation -Encoding UTF8

但是我的 csv 没有保存文件名和时间戳

使用 ForEach-Object 遍历 $file 对象

$pc = Get-WmiObject Win32_ComputerSystem
$file = Get-ChildItem -Path S:\Docker\RCT\repo\*xml -Recurse -Force 
$file | ForEach-Object {
    $DeviceObj = New-Object PSObject -Property @{
                    DeviceName = $pc.Name
                    FileName = $_.Name
                    FileDate = $_.LastWriteTime
                }
    $DeviceObjList += $DeviceObj
}
$DeviceObjList | Export-Csv -Path "$current_path\FileStatus.csv" -NoTypeInformation -Encoding UTF8

..但其实这样效率更高:

$pc = Get-WmiObject Win32_ComputerSystem
$file = Get-ChildItem -Path S:\Docker\RCT\repo\*xml -Recurse -Force 
$DeviceObjList = $file | ForEach-Object {
    [pscustomobject]@{
        DeviceName = $pc.Name
        FileName = $_.Name
        FileDate = $_.LastWriteTime
    }
}
$DeviceObjList | Export-Csv -Path "$current_path\FileStatus.csv" -NoTypeInformation -Encoding UTF8
  1. 您不需要 WMI 来获取计算机名称,使用内置变量 $env:COMPUTERNAME
  2. 使用 Calculated Properties 将计算机名称添加到结果中。
  3. 此处不需要迭代,只需将Export-Csv添加到管道

所以你可以这样做:

$file = Get-ChildItem -Path S:\Docker\RCT\repo\*xml -Recurse -Force 
$File | Select @{N="DeviceName";E={$env:COMPUTERNAME}},Name,LastWriteTime | 
Export-Csv -Path "$current_path\FileStatus.csv" -NoTypeInformation -Encoding UTF8

如果你想让它更短,你可以使用别名并且不定义任何变量

gci S:\Docker\RCT\repo\*xml -R -Fo | 
select @{N="DeviceName";E={$env:COMPUTERNAME}},Name,LastWriteTime | 
epcsv "$current_path\FileStatus.csv" -NoT -En UTF8