![使用 PowerCLI 导出没有特定标签的虚拟机列表](https://linux22.com/image/767889/%E4%BD%BF%E7%94%A8%20PowerCLI%20%E5%AF%BC%E5%87%BA%E6%B2%A1%E6%9C%89%E7%89%B9%E5%AE%9A%E6%A0%87%E7%AD%BE%E7%9A%84%E8%99%9A%E6%8B%9F%E6%9C%BA%E5%88%97%E8%A1%A8.png)
我正在尝试导出一个 CSV 文件,其中包含集群中所有没有我用于调整大小的特定标签的虚拟机的列表。但是,CSV 中除了以下内容外没有填充任何其他内容:ÿþ
Get-Module -Name VMware* -ListAvailable | Import-Module -Force
$exportto = "C:\Users\username\Desktop\rightSizingFilter3.csv"
$VMs = Get-Cluster -name clustername | Get-VM
foreach ($VM in $VMs){
If (((Get-Tagassignment $VM).Tag.Name -notcontains "testtag")){
Out-file $exportto -Append
}
}
答案1
如果您想要 CSV,您可以通过更改Out-File ...
为以下方式获得更一致的结果:
Export-Csv -InputObject $VM -Path $ExportTo -Append -NoTypeInformation
我相信 Get-VM 的输出是一个 JSON 对象,因此输出为文件可能会导致格式不符合您的要求。即使使用 Export-Csv,您仍可能会发现某些数据无法轻松转换为 CSV 格式,因此您可以通过仅选择所需的标签或属性,然后将其全部导出为 CSV,进一步清理输出。
这是我测试过的代码:
Get-Module -Name VMware* -ListAvailable | Import-Module -Force
Connect-ViServer -Server [SERVERNAME] -Credential (Get-Credential)
$ExportTo = ".\rightSizingFilter3.csv"
$VMs = Get-Cluster -Name [CLUSTERNAME] | Get-VM
foreach ($VM in $VMs) {
If ( ((Get-Tagassignment $VM).Tag.Name -notcontains "testtag") ) {
Export-Csv -InputObject $VM -Path $ExportTo -Append -NoTypeInformation
}
}
答案2
我还通过下面的代码片段让它工作:
$RS = foreach ($VM in $VMs){
If (((Get-Tagassignment $VM).Tag.Name -notcontains "testtag")){
Write-Output $VM
}
}
$RS | Out-file $exportto -Append