Export-Csv无法正常运行

时间:2018-07-13 08:01:20

标签: powershell csv

我写了一个小脚本,应该将输出导出为CSV。 这是我的脚本:

$Jobs = Get-VBRJob

foreach ($Job in $Jobs) {
    $JobName = $Job.Name
    $Objects = $Job.GetObjectsInJob()
    $RestorePoints = Get-VBRRestorePoint -Backup $JobName
    $Day = $Job.ScheduleOptions.OptionsDaily.DaysSrv

    $RP = $RestorePoints.Count
    $VM = $Objects.Name

    $obj = New-Object PSObject
    $obj | Add-Member -MemberType NoteProperty -Name "JobName" -Value $JobName
    $obj | Add-Member -MemberType NoteProperty -Name "Objects" -Value $Objects
    $obj | Add-Member -MemberType NoteProperty -Name "RestorePoints" -Value $RestorePoints
    $obj | Add-Member -MemberType NoteProperty -Name "Day" -Value $Day
    $obj | Add-Member -MemberType NoteProperty -Name "VM" -Value $VM
}
$obj | Export-Csv $path -NoType 

我通过New-Object PSObject读到了一些有关此操作的信息,因此我尝试了此操作,但是CSV仅包含一行,并且返回属性的类型而不是值。只有“ JobName”和“ VM”可以正常工作。

有人可以帮助我将“对象”,“恢复点”和“日期”的值转换为CSV吗?

1 个答案:

答案 0 :(得分:1)

$obj仅包含您刚刚创建的对象,因此在循环完成后,变量将保存在循环中创建的最后一个对象,然后将其导出到CSV。更好的方法是在循环中输出创建的对象,并将循环输出收集到变量中。我还建议您避免使用Add-Member,除非您需要向已在其他位置创建的对象添加成员。

$obj = foreach ($Job in $Jobs) {
    ...
    New-Object -Type PSObject -Property @{
        'JobName'       = $JobName
        'Objects'       = $Objects
        'RestorePoints' = $RestorePoints
        'Day'           = $Day
        'VM'            = $VM
    }
}

此外,如果您要分配给新对象属性的值是对象本身,那么PowerShell会将这些对象的字符串表示形式导出到CSV,这通常是对象类的全名。如果要在输出中使用特定值,则可能需要进一步扩展(例如'VM' = $VM.Name)。不过,您实际需要执行的操作取决于实际的对象,因此在不了解对象结构的情况下,我在那里无济于事。