我如何将此输出导出到 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 文件中的方法。
这本质上……
- 导出虚拟机数据不包括网络名称保存到一个
csv1.csv
文件中。- 导出虚拟机数据包含网络名称保存到一个
csv2.csv
文件中。- 用于
Write-Output
将标题列明确定义到Merged.csv
文件中。Import-Csv
针对文件使用csv1.csv
并循环For-EachObject
。- 在
For-EachObject
循环内:
- 定义一个
$name
变量,其值为$_.Name
(来自csv1
)- 为(来自)使用针对定义一个
$oName
变量,其值与当前迭代的[ ]相同NetworkName
csv2
Import-Csv
csv2.csv
Name
Name
$name
csv1
- 用于
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;
};
支持资源
-
-NoTypeInformation
从输出中删除 #TYPE 信息标头。此参数在 PowerShell 6.0 中成为默认参数,并包含在内以实现向后兼容。
-
标准别名对于 Foreach 对象:'
%
' 符号,ForEach -
'
?
' 符号和 Where 都是 Where-Object 的别名。如果您明确想要运行 Where-Object 命令,请运行 Where-object 或 '?
' -
$( )
子表达式运算符。简单
( )
分组表达式表示“先执行这一部分”,而子表达式$( )
表示“先执行这个,然后将结果视为变量“”。 -
-append
将输出添加到现有文件的末尾,而不是替换文件内容。您需要确保匹配
-encoding
目标文件中的任何现有内容