将循环导出为 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 数组。