将循环导出为 CSV - PowerShell
Export Loops to CSV - PowerShell
我有一个脚本,它从两个目录获取计划的属性并将输出写入主机。我想将此输出捕获到 csv 中。到目前为止,脚本将所有属性正确写入主机,但 csv 只有 headers,即 "Name" 和 "Path"。
这是我的资料:
$results = @()
$JobObjects = $SchedulerObject.Search("/TradeSupport/Objects/Schedules/","*",65535,"*",$true);
foreach($JobObject in $JobObjects){
$Schedules = $JobObject.getabatobject();
foreach ($Schedule in $Schedules){
write-host("Name :" + $Schedule.Name)
write-host("Path :" + $Schedule.Path)
$details = @{
Name = $ScheduleObjects.Name
Path = $ScheduleObjects.FullPath
}}}
$JobObjects2 = $SchedulerObject.Search("/Operations/Objects/Schedules/","*",65535,"*",$true);
foreach($JobObject2 in $JobObjects2){
$Schedules2 = $JobObject2.getabatobject();
foreach ($Schedule2 in $Schedules2){
write-host("Name :" + $Schedule2.Name)
write-host("Path :" + $Schedule2.Path)
$details = @{
Name = $ScheduleObjects2.Name
Path = $ScheduleObjects2.FullPath
}}
}
$results += New-Object PSObject -Property $details
$results | select-object -property Name,Path | export-csv -Path \ch0-craab-01\c$\Support\AB_Reports\Objects_Report.csv -NoTypeInformation
我做错了什么?
将 $Results 放在 Foreach 循环中而不是放在外部
OP 说这不起作用,我又看了一遍脚本。
OP 用来保存到 $results 的变量是唯一的,不包含任何信息。
正确的变量是
$Schedule.Name
$Schedule.Name
但是你正在使用
$ScheduleObjects.Name
$ScheduleObjects.FullPath
下面的脚本现在应该可以工作了
$results = @()
$JobObjects = $SchedulerObject.Search("/TradeSupport/Objects/Schedules/","*",65535,"*",$true);
foreach($JobObject in $JobObjects){
$Schedules = $JobObject.getabatobject();
foreach ($Schedule in $Schedules){
write-host("Name :" + $Schedule.Name)
write-host("Path :" + $Schedule.Path)
$details = @{
Name = $Schedule.Name
Path = $Schedule.Path
}
$results += New-Object PSObject -Property $details
}
}
$JobObjects2 = $SchedulerObject.Search("/Operations/Objects/Schedules/","*",65535,"*",$true);
foreach($JobObject2 in $JobObjects2){
$Schedules2 = $JobObject2.getabatobject();
foreach ($Schedule2 in $Schedules2){
write-host("Name :" + $Schedule2.Name)
write-host("Path :" + $Schedule2.Path)
$details = @{
Name = $Schedule2.Name
Path = $Schedule2.Path
}
$results += New-Object PSObject -Property $details
}
}
$results | select-object -property Name,Path | export-csv -Path \ch0-craab-01\c$\Support\AB_Reports\Objects_Report.csv -NoTypeInformation
正确缩进代码以与循环对齐时,更容易看出哪里出了问题:
$results = @()
$JobObjects = $SchedulerObject.Search("/TradeSupport/Objects/Schedules/","*",65535,"*",$true);
foreach($JobObject in $JobObjects) {
$Schedules = $JobObject.getabatobject();
foreach ($Schedule in $Schedules){
write-host("Name :" + $Schedule.Name)
write-host("Path :" + $Schedule.Path)
$details = @{
Name = $ScheduleObjects.Name
Path = $ScheduleObjects.FullPath
}
}
}
$JobObjects2 = $SchedulerObject.Search("/Operations/Objects/Schedules/","*",65535,"*",$true);
foreach($JobObject2 in $JobObjects2) {
$Schedules2 = $JobObject2.getabatobject();
foreach ($Schedule2 in $Schedules2) {
write-host("Name :" + $Schedule2.Name)
write-host("Path :" + $Schedule2.Path)
$details = @{
Name = $ScheduleObjects2.Name
Path = $ScheduleObjects2.FullPath
}
}
}
$results += New-Object PSObject -Property $details
$results | select-object -property Name,Path | export-csv -Path \ch0-craab-01\c$\Support\AB_Reports\Objects_Report.csv -NoTypeInformation
现在您可以更容易地看到您只在循环的 外部 使用 $details
变量。您希望在每次迭代时将该项目附加到 $results
数组。
我有一个脚本,它从两个目录获取计划的属性并将输出写入主机。我想将此输出捕获到 csv 中。到目前为止,脚本将所有属性正确写入主机,但 csv 只有 headers,即 "Name" 和 "Path"。
这是我的资料:
$results = @()
$JobObjects = $SchedulerObject.Search("/TradeSupport/Objects/Schedules/","*",65535,"*",$true);
foreach($JobObject in $JobObjects){
$Schedules = $JobObject.getabatobject();
foreach ($Schedule in $Schedules){
write-host("Name :" + $Schedule.Name)
write-host("Path :" + $Schedule.Path)
$details = @{
Name = $ScheduleObjects.Name
Path = $ScheduleObjects.FullPath
}}}
$JobObjects2 = $SchedulerObject.Search("/Operations/Objects/Schedules/","*",65535,"*",$true);
foreach($JobObject2 in $JobObjects2){
$Schedules2 = $JobObject2.getabatobject();
foreach ($Schedule2 in $Schedules2){
write-host("Name :" + $Schedule2.Name)
write-host("Path :" + $Schedule2.Path)
$details = @{
Name = $ScheduleObjects2.Name
Path = $ScheduleObjects2.FullPath
}}
}
$results += New-Object PSObject -Property $details
$results | select-object -property Name,Path | export-csv -Path \ch0-craab-01\c$\Support\AB_Reports\Objects_Report.csv -NoTypeInformation
我做错了什么?
将 $Results 放在 Foreach 循环中而不是放在外部
OP 说这不起作用,我又看了一遍脚本。
OP 用来保存到 $results 的变量是唯一的,不包含任何信息。
正确的变量是
$Schedule.Name
$Schedule.Name
但是你正在使用
$ScheduleObjects.Name
$ScheduleObjects.FullPath
下面的脚本现在应该可以工作了
$results = @()
$JobObjects = $SchedulerObject.Search("/TradeSupport/Objects/Schedules/","*",65535,"*",$true);
foreach($JobObject in $JobObjects){
$Schedules = $JobObject.getabatobject();
foreach ($Schedule in $Schedules){
write-host("Name :" + $Schedule.Name)
write-host("Path :" + $Schedule.Path)
$details = @{
Name = $Schedule.Name
Path = $Schedule.Path
}
$results += New-Object PSObject -Property $details
}
}
$JobObjects2 = $SchedulerObject.Search("/Operations/Objects/Schedules/","*",65535,"*",$true);
foreach($JobObject2 in $JobObjects2){
$Schedules2 = $JobObject2.getabatobject();
foreach ($Schedule2 in $Schedules2){
write-host("Name :" + $Schedule2.Name)
write-host("Path :" + $Schedule2.Path)
$details = @{
Name = $Schedule2.Name
Path = $Schedule2.Path
}
$results += New-Object PSObject -Property $details
}
}
$results | select-object -property Name,Path | export-csv -Path \ch0-craab-01\c$\Support\AB_Reports\Objects_Report.csv -NoTypeInformation
正确缩进代码以与循环对齐时,更容易看出哪里出了问题:
$results = @()
$JobObjects = $SchedulerObject.Search("/TradeSupport/Objects/Schedules/","*",65535,"*",$true);
foreach($JobObject in $JobObjects) {
$Schedules = $JobObject.getabatobject();
foreach ($Schedule in $Schedules){
write-host("Name :" + $Schedule.Name)
write-host("Path :" + $Schedule.Path)
$details = @{
Name = $ScheduleObjects.Name
Path = $ScheduleObjects.FullPath
}
}
}
$JobObjects2 = $SchedulerObject.Search("/Operations/Objects/Schedules/","*",65535,"*",$true);
foreach($JobObject2 in $JobObjects2) {
$Schedules2 = $JobObject2.getabatobject();
foreach ($Schedule2 in $Schedules2) {
write-host("Name :" + $Schedule2.Name)
write-host("Path :" + $Schedule2.Path)
$details = @{
Name = $ScheduleObjects2.Name
Path = $ScheduleObjects2.FullPath
}
}
}
$results += New-Object PSObject -Property $details
$results | select-object -property Name,Path | export-csv -Path \ch0-craab-01\c$\Support\AB_Reports\Objects_Report.csv -NoTypeInformation
现在您可以更容易地看到您只在循环的 外部 使用 $details
变量。您希望在每次迭代时将该项目附加到 $results
数组。