我有2个数组-$ Hostnames和$ Ipaddresses。
我的$ Hostname数组显示计算机主机名列表,而我的$ Ipaddresses数组显示与$ Hostnames数组相对应的ipaddresss列表。
我有一个带2个标头的现有CSV文件-“主机名”和“ Ipaddress”
我希望将2个数组导出到具有2列的CSV文件中。一列包含主机名,另一列包含Ipaddresses。
在本网站和我访问过的其他网站上,对类似问题有多个答案,但是到目前为止,它们都没有帮助我。
这是我得到的最接近的东西...
$CSV = Import-Csv -path C:\temp\scripts\ReimageCheck\results.csv
foreach ($column in $CSV) {
generate column 1 value.
$column."Hostname" = $Hostnames
generate column 2 value.
$column."Ipaddress" = $Ipaddresses
}
$CSV | Export-Csv -Path C:\temp\scripts\ReimageCheck\Results2.csv
但是当我打开“ Results2.csv”时,所有信息都是一堆乱码,散布在各处。任何帮助将不胜感激。如果我们可以消除对预先存在的csv文件的需要,而仅使用两列信息创建一个新的csv文件,那就更好了。
答案 0 :(得分:1)
假设您的两个数组的大小实际上相同...
您可以在for循环中对其进行迭代,然后将新的pscustomobject
添加到数组中,然后将其另存为CSV。
$data = @()
$hostnames = @('h1','h2','h3')
$ipaddresses = @('1.1.1.1','2.2.2.2','3.3.3.3')
for ($i = 0; $i -lt $hostnames.Count; $i++)
{
$data += [pscustomobject]@{'HostName'=$hostnames[$i]; 'IpAddress'=$ipaddresses[$i]}
}
# test
$data | ConvertTo-Csv -NoTypeInformation
#
#$data | Export-Csv -Path 'C:\temp\scripts\ReimageCheck\Results2.csv'
有几种方法可以提高此算法的速度等,但这以最直接的方式展示了一切。使用ISE或VSCode通过逐步调试和理解代码。另外,使用Get-Help
搜索您不熟悉的其他内容。
答案 1 :(得分:0)
对于大型CSV文件,由于对于循环的每次迭代都会重新创建$ data数组,因此上述操作效率非常低。
一个更有效的解决方案是
$hostnames = @('h1','h2','h3')
$ipaddresses = @('1.1.1.1','2.2.2.2','3.3.3.3')
$data = for ($i = 0; $i -lt $hostnames.Count; $i++)
{
[pscustomobject]@{'HostName'=$hostnames[$i]; 'IpAddress'=$ipaddresses[$i]}
}
# test
$data | ConvertTo-Csv -NoTypeInformation
#
#$data | Export-Csv -Path 'C:\temp\scripts\ReimageCheck\Results2.csv'