支持资源

支持资源

我如何将此输出导出到 csv 文件?

我从以下 get-vm 命令获得了以下输出:

Get-VM | Select Name, PowerState, GuestId, @{N="VM Config File";E={$_.extensiondata.config.files.vmpathname}}

Name           : test-vm
PowerState     : PoweredOff
GuestId        : rhel7_64Guest
VM Config File : [DS_001] test-vm/test-vm.vmx

Name           : test-vm2
PowerState     : PoweredOn
GuestId        : sles12_64Guest
VM Config File : [DS_002] test-vm2/test-vm2.vmx

我还想添加 VLAN 信息 get-vm | Get-NetworkAdapter |Select NetworkName

最终输出应该是这样的:

NAME, POWERSTATE, GuestiD, VM Config File, NetworkName
test-vm, PoweredOff,rhel7_64Guest, [DS_001] test-vm/test-vm.vmx, VLAN-100
test-vm2, PoweredOn,sles12_64Guest, [DS_002] test-vm2/test-vm2.vmx, VLAN-200

答案1

将所有 VMware 系统结果合并到一个 csv 文件中的方法。

这本质上……

  1. 导出虚拟机数据不包括网络名称保存到一个csv1.csv文件中。
  2. 导出虚拟机数据包含网络名称保存到一个csv2.csv文件中。
  3. 用于Write-Output将标题列明确定义到Merged.csv文件中。
  4. Import-Csv针对文件使用csv1.csv并循环For-EachObject
  5. For-EachObject循环内:
    • 定义一个$name变量,其值为$_.Name(来自csv1
    • 为(来自)使用针对定义一个$oName变量,其值与当前迭代的[ ]相同NetworkNamecsv2Import-Csvcsv2.csvNameName$namecsv1
    • 用于Write-Output按与列标题匹配的顺序指定所有属性和变量
      • 用途PowerShell 子表达式运算符将它们括起来$()并用逗号分隔
        • 用双引号将整个子表达式运算符组括起来,然后通过管道将其传递给 Out-File使用-Append参数并指向Merged.csv首选输出的最终文件。

电源外壳

Get-VM  | 
Select Name, PowerState, GuestId, 
    @{N="VM Config File";E={$_.extensiondata.config.files.vmpathname}} |
        Export-Csv "C:\Temp\csv1.csv" -NoTypeInformation;

Get-VM | Get-NetworkAdapter | Select @{n="Name";e={$_.Parent}}, 
     NetworkName | Export-Csv "C:\Temp\csv2.csv" -NoTypeInformation;

Write-Output 'Name, Powerstate, GuestId, VM Config File, NetworkName' | Out-File "C:\Temp\Merged.csv";
Import-Csv "C:\Temp\csv1.csv" | % {
    $name = $_.Name;
    $oName = (Import-Csv C:\Temp\csv2.csv | ? {$_.Name -eq $name} | Select NetworkName).NetworkName;
    Write-Output "$($_.Name), $($_.PowerState), $($_.GuestId), $($_.'VM Config File'), $($oName)" | Out-File "C:\Temp\Merged.csv" -Append;
    };

支持资源

  • 导出-Csv

    -NoTypeInformation

    从输出中删除 #TYPE 信息标头。此参数在 PowerShell 6.0 中成为默认参数,并包含在内以实现向后兼容。

  • ForEach 对象

    标准别名对于 Foreach 对象:' %' 符号,ForEach

  • 哪里对象

    ' ?' 符号和 Where 都是 Where-Object 的别名。如果您明确想要运行 Where-Object 命令,请运行 Where-object 或 ' ?'

  • PowerShell 运算符 $( ) @( ) :: &

    $( )子表达式运算符。

    简单( )分组表达式表示“先执行这一部分”,而子表达式$( )表示“先执行这个,然后将结果视为变量“”。

  • 输出文件

    -append

    将输出添加到现有文件的末尾,而不是替换文件内容。您需要确保匹配-encoding目标文件中的任何现有内容

相关内容