powershell - Export-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”工作正常。
谁能帮我将“Objects”、“RestorePoints”和“Day”的值转换为 CSV?
解决方案
$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
)。但是,您究竟需要做什么取决于实际的对象,所以如果不了解更多关于对象的结构,我就无能为力了。
推荐阅读
- python - 从在 Python 中重定向的 url 下载 zip 文件
- javascript - Firestore 安全规则无法检索 request.auth.token.name
- javascript - 函数没有引用我的预定义变量
- pandas - 如何在熊猫中选择具有多个值的多行
- kubernetes - kubernetes 如何保证 kube proxy 和 kubelet 的可靠性?
- telegram - Telegram API 是否允许通过 Peer ID 搜索用户?
- python - 关闭 Django 中的空白修剪
- c++ - 有人能告诉我下面的代码(C++)有什么用吗?
- cloudkit - 删除区域后 CloudkitZone 的 CKRecords 会发生什么情况
- shell - 在 powershell 中运行长命令