gpt4 book ai didi

powershell - Powershell-使用Export-csv为多个数组对象创建新行

转载 作者:行者123 更新时间:2023-12-02 23:29:00 28 4
gpt4 key购买 nike

我有一个奇怪的故事,我没有看到太多写作。无论如何,这里去。

我正在尝试建立一个数组并将其导出为CSV。问题是,如果返回的结果不止一个,我就不知道如何将它作为新行添加到CSV中。我当前正在使用-join将所有结果放入同一个单元格,但这不是最佳选择。我真正想做的是添加一个新行,并将多余的结果放在同一列下。那有意义吗?这是我现在拥有的:

# Grab all VMs, put into variable
$vms = Get-VM


# Use to build report
foreach ($vm in $vms){
New-Object PSObject -Property @{
VMName = $vm.Name
UsedSpaceGB = $vm.UsedSpaceGB
StorageAllocatedGB = ($vm.HardDisks.capacitygb | Measure-Object -Sum).Sum
NumberOfCPUs = $cm.NumCpu
MemoryGB = $vm.MemoryGB
Datastores = Get-Datastore -VM $vm
Application = ($vm | Get-Annotation -CustomAttribute Applications -ErrorAction SilentlyContinue).Value | select
} | select VMName,@{label="Application";expression={$_.Application -join ","}},UsedSpaceGB,StorageAllocatedGB,NumberOfCPUs,MemoryGB,@{l="Datastores";e={$_.Datastores -join ","}} | Export-Csv -Path C:\script\VMCapacityUsedByApp.csv -NoClobber -Append -NoTypeInformation

}

顺便说一句,这是使用VMware的PowerCLI管理单元。任何帮助是极大的赞赏。

最佳答案

好的,看起来数据存储区和应用程序是根据您先前的代码返回数组的唯一字段。假定$ cm.NumCpu应该是$ vm.NumCpu,下面的代码应该执行您想要的操作。它将确定您是否有更多的数据存储或应用程序,然后循环扩展这些字段的阵列,为同一VM列出新的数据存储库和应用程序创建新记录,直到记录用完。我将其设置为仅在第一条记录中列出VM的所有详细信息,但是我确信您可以弄清楚如何根据需要进行更改。试试下面的代码,看看它看起来如何:

# Grab all VMs, put into variable
$vms = Get-VM


# Use to build report
foreach ($vm in $vms){
$TempVM = New-Object PSObject -Property @{
VMName = $vm.Name
UsedSpaceGB = $vm.UsedSpaceGB
StorageAllocatedGB = ($vm.HardDisks.capacitygb | Measure-Object -Sum).Sum
NumberOfCPUs = $cm.NumCpu
MemoryGB = $vm.MemoryGB
Datastores = Get-Datastore -VM $vm
Application = ($vm | Get-Annotation -CustomAttribute Applications -ErrorAction SilentlyContinue).Value
}
$Records = if($TempVM.Application.count -gt $TempVM.Datastores.Count){$TempVM.Application.Count}else{$TempVM.Datastores.Count}
$ExpandedVM = @()
$ExpandedVM += $TempVM|select Name,UsedSpaceGB,StorageAllocatedGB,NumberOfCPUs,MemoryGB,@{l="Datastores";e={$TempVM.Datastores[0]}},@{l="Application";e={$TempVM.Application[0]}}
for($i=1;$i -lt $Records;$i++){$ExpandedVM += $TempVM|select Name,@{l="Datastores";e={$TempVM.Datastores[$i]}},@{l="Application";e={$TempVM.Application[$i]}}}
$ExpandedVM | Export-Csv -Path C:\script\VMCapacityUsedByApp.csv -NoClobber -Append -NoTypeInformation
}

也许有一种更优雅的方法,但这至少应该对您有用。我没有要测试的VM机器,也没有要使用的插件,所以我组成的数据应该与您要提供的数据一致(所有字段的字符串(数据存储和应用程序除外,它们都有自己的数组)的字符串)并最终得到如下输出:
Name        UsedSpaceGB StorageAllo NumberOfCP MemoryGB   Datastores Applicatio
catedGB Us n
---- ----------- ----------- ---------- -------- ---------- ----------
TestVM 250 500 4 16 Store1 Word
TestVM Store2 Excel
TestVM Store3 Access
TestVM Outlook
TestVM2 487 500 4 32 StoreA WoW
TestVM2 StoreB SC2
TestVM2 StoreC D3
TestVM2 StoreD
TestVM2 StoreE

我想这就是您要寻找的。

关于powershell - Powershell-使用Export-csv为多个数组对象创建新行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21415876/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com