我写了一个小脚本,应该将输出导出为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吗?
答案 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
)。不过,您实际需要执行的操作取决于实际的对象,因此在不了解对象结构的情况下,我在那里无济于事。