【问题标题】:Export Loops to CSV - PowerShell将循环导出到 CSV - PowerShell
【发布时间】:2018-03-13 23:28:27
【问题描述】:

我有一个脚本,它从两个目录获取计划的属性并将输出写入主机。我想将此输出捕获到 csv 中。到目前为止,脚本正确地将所有属性写入主机,但 csv 只有标题,即“名称”和“路径”。

这是我所拥有的:

$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 

我做错了什么?

【问题讨论】:

    标签: powershell loops foreach export-to-csv


    【解决方案1】:

    $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
    

    【讨论】:

    • 不幸的是,这不起作用。我目前正在寻找使用“Write-Ouput”​​是否可行。
    • 当你按照我发布的方式进行操作时发生了什么
    • 没有变化。它仍然将所有值打印到主机,但只打印 csv 中的标题。
    • 您在运行之前从 \\ch0-craab-01\c$\Support\AB_Reports\Objects_Report.csv 中删除了该文件,对吗?
    • 我看到你的问题
    【解决方案2】:

    正确缩进代码以与循环对齐时,更容易看出哪里出错了:

    $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 数组中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-13
      • 1970-01-01
      • 2016-04-25
      • 1970-01-01
      • 1970-01-01
      • 2015-01-17
      • 2014-12-05
      • 1970-01-01
      相关资源
      最近更新 更多