我的Powershell循环覆盖了以前的excel条目。使用Export-CSV -append复制条目

时间:2016-01-19 16:48:55

标签: sorting csv powershell append overwrite

Powershell绝对不是我的优势之一"但每隔一段时间我就会尝试编写一些内容来自动执行手动任务。无论如何,这是我的问题。该脚本为WORKS并将导出csv文件并按Hostname标头排序。我的问题是必须有更好的方法来做到这一点吗?

#Clear the output screen
cls

#set the working directory to where the script and text files are located (must be same directory)
$scriptdir = Split-Path -Parent $PSCommandPath
cd $scriptdir

#set fileNamePaths for Export-Csv No Sort and Sorted to excel
$FilePathNS = "D:\PowerShell_Scripts\HP_Inventory\OAInfoAll_NoSort.csv"
$FilePathSort = "D:\PowerShell_Scripts\HP_Inventory\OAInfoAll.csv"

#set up the ip subnet import
$path = ".\EnclosureSubnets.txt"
$ip = Get-Content $path

#Loop to find OA information
foreach ($subnet in $ip) {

    $OAS = Find-HPOA $subnet -Timeout 250 -Verbose
    $OAS | where {$_.Role -eq "Active"} | Export-Csv -NoTypeInformation -Append $FilePathNS
}

#Sort AOInfoAll.csv by hostname
Import-Csv $FilePathNS | Sort-Object Hostname | Export-Csv $FilePathSort -NoTypeInformation

如果我取出追加,那么循环将覆盖前一个条目,我最终将只有2个IP和2个主机名。当我再次运行脚本时,追加修复了这个但是我得到重复/重复的条目。

此外,我尝试在循环中使用排序对象主机名,但它只在写入时对每个单独的条目进行排序。这是一个例子(IP和主机名组成):

IP                  Hostname
192.168.1.10        chassis03
192.168.1.12        chassis05
192.168.2.16        chassis01
192.168.2.18        chassis02
192.168.3.14        chassis07
192.168.3.16        chassis08

因此,虽然我的剧本有效,但我还是喜欢来自" The Pros"提前谢谢!

1 个答案:

答案 0 :(得分:0)

不要在循环内导出,而是捕获所有捕获变量中的所有OAS并在输出到CSV之前对其进行排序。

foreach ($subnet in $ip) {

    [array]$OAS += Find-HPOA $subnet -Timeout 250 -Verbose

}

$OAS | Where{$_.Role -eq 'Active'} | Sort Hostname | Export-Csv $FilePathSort -NoTypeInformation

这大大减少了磁盘读/写次数。