当前位置: 首页 > 知识库问答 >
问题:

将列添加到vcenter powershell的现有csv输出中

阎唯
2023-03-14

位置vcenter用户名密码abc 10.1 X xxx def 10.2 Y yyy

一个csv文件,其位置列是一个位置,该位置的IP列表示vCenter IP

我需要生成所有主机详细信息,并添加位置字段作为最终csv中的第一个字段,但无法这样做

实例

假设位置abc有一个带有5台主机的vcenter,位置def有一个带有3台主机的vcenter

输出shd看起来像

位置名称版本abc h1 6.5 abc h2 6.5 abc h3 6.5 abc h4 6.5 abc h5 6.5 def hxx 6.7 def hyy 6.7 def hzz 6.7

$inventory=导入Csv-路径。csv

Foreach($i in$库存){Connect-VIServer-服务器$i.vcenter-用户$i.username-密码$i.passwordGet-VMHost|选择-对象-属性名称,版本|导出-csvtempoutput.csv-NoTypeInformation-Append$ExistingCSV=导入-Csv-路径'tempoutput.csv'$ExistingCSV|添加-成员-成员类型NoteProperty-名称'位置'-值$i.location$ExistingCSV|导出-Csvfinal.csv-NoTypeInformation
断开连接-VIServer-服务器$i.vcenter-强制-确认:$false}

但这是行不通的

共有1个答案

封梓
2023-03-14

如果您的内存能够保存所有Get-VMHost数据,我只会向输出CSV写入一次。您可以使用计算属性来避免使用临时CSV文件。

$inventory = Import-Csv -path path.csv

$output = foreach ($i in $inventory) {
    $null = Connect-VIServer -Server $i.vcenter -User $i.username -Password $i.password
    Get-VMHost | Select-Object -Property Name,Version,@{n='Location';e={$i.Location}}
    $null = Disconnect-VIServer -Server $i.vcenter -Force -Confirm:$false
}

$output | Export-Csv final.csv -NoType

如果您在CSV文件中重复输入相同的vCenter和凭据,则可能值得考虑重新设计。多次连接和断开到同一个vCenter可能效率低下。您可以使用Group-Object仅在vCenter服务器更改时连接和断开与vCenter的连接。

$inventory = Import-Csv -path path.csv | Group-Object vcenter,username,password | Foreach-Object {
    $vc = $_.Group[0] | Select-Object vcenter,username,password,location
    $null = Connect-VIServer -Server $vc.vcenter -User $vc.username -Password $vc.password
    Get-VMHost | Select-Object -Property Name,Version,@{n='Location';e={$vc.Location}}
    $null = Disconnect-VIServer -Server $vc.vcenter -Force -Confirm:$false
}

$inventory | Export-Csv final.csv -NoType

在您的尝试中,在每个循环迭代期间,您都在$ExistingCSV中读取整个临时CSV。然后将属性位置添加到整个对象$ExistingCSV,这会将其添加到$ExistingCSV列表中具有相同值的每个项目中。因此,在循环结束时,CSV的每一行都有一个与循环中最后一项匹配的位置值。

 类似资料:
  • 问题内容: 我正在用csv快速编写以下数据: 当我完成解析第一个文件并启动第二个文件时,我想添加更多列,如下所示: parsed STEP ID ELEMENT_ID Fatigue SW Fatigue F1 Fatigue F3 Fatigue SW Fatigue F1 Fatigue F3 Step 10 10000 1.30E-07 1.51E-06 2.15E-06 1.30E-07

  • 问题内容: 当我执行此代码(还有更多)时,在每一行之后和页面开头都得到 $。我正在用nedit打开文本文件。 问题答案: 这 恰恰 是writeUTF所记录的。如果您不希望出现这种情况,请不要提出要求。 首先,将 两个字节写入输出流,就像通过给出要跟随的字节数的方法一样。该值是实际写入的字节数,而不是字符串的长度。按照长度,使用修改后的字符的UTF-8编码,依次输出字符串的每个字符。

  • 问题内容: 如何添加到MySQL表的现有列? 问题答案: 我认为您想按照命令中的说明进行操作。可能是这样的: 在上面运行之前,请确保该列具有主索引。

  • 如果我在 SQL Server 2008 中使用以下 SQL 命令来更新具有外键约束的表: 是表中我的FK列。我正在尝试引用我的表中的。我收到这个错误: 外键“UserID”引用引用表“员工”中的无效列“UserID”。

  • 问题内容: 我有一堂课; 使用ResultSetMetaData,我可以建立TableModel来匹配数据库中的结果集。 在 B类中 ,我扩展了JPanel并添加了 A类 来显示我的表。我希望能够根据条件向表模型添加新列。我已尝试使用Google搜索,但显示的大多数示例均基于not 。 有谁知道如何实现这一目标? 问题答案: 只需扩展DefaultTableModel,然后就可以访问其所有方法。D

  • 问题内容: 我需要一些方法来向class字段的label_tag()方法的输出中添加类属性。 我看到可以通过attrs词典,并且已经在shell中对其进行了测试,可以执行以下操作: 我将在输出中看到,但是我看不到从模板添加attrs参数的方法-实际上,模板是专门针对此设计的,不是吗? 我的表单定义中是否可以定义要在标签中显示的类? 在表单中,我可以执行以下操作为输入提供一个类 我只需要让它也输出类