【问题标题】:PowerCLI Get VMs those fit some conditionsPowerCLI 获取符合某些条件的 VM
【发布时间】:2023-03-14 05:46:01
【问题描述】:

我正在尝试使用 PowerCLI 从 vCenter 获取我们的一些 Linux 发行版。但我不想获得设备虚拟机。所以我有 2 个不同的成功的 PowerCLI 脚本,它们可以找到这些机器。我想合并这些脚本,但我是 PowerCLI 的新手,它的语法。

我在下面分享这些脚本:

非设备清单:

Get-VM | `
Get-Annotation | `
Where-Object {$_.name -eq "Appliance"} | `
Where-Object {$_.value -eq 'No'} | `
Export-Csv C:\Users\me\Documents\non-appliance-list.csv -NoTypeInformation -UseCulture

Linux 列表:

Get-View -Property @("Name", "Config.GuestFullName","Guest.GuestFullName") | `
Select -Property Name, @{N="COS";E={$_.Config.GuestFullName}}, @{N="ROS";E={$_.Guest.GuestFullName}} | `
Where-Object ({$_.ROS -like 'Centos*' -or $_.ROS -like 'Suse*' -or $_.ROS -like 'Ubuntu*'}) | `    
Select AnnotatedEntity,Name,Value | `
Export-Csv C:\Users\me\Documents\linux-list.csv -NoTypeInformation -UseCulture

我想象的但没有用的脚本:

Get-VM | `
Get-Annotation | `
Where-Object {$_.name -eq "Appliance"} | `
Where-Object {$_.value -eq 'No'} | `
Get-View -Property @("Name", "Config.GuestFullName","Guest.GuestFullName") | `
Select -Property Name, @{N="COS";E={$_.Config.GuestFullName}}, @{N="ROS";E={$_.Guest.GuestFullName}} | `
Where-Object ({$_.ROS -like 'Centos*' -or $_.ROS -like 'Suse*' -or $_.ROS -like 'Ubuntu*'}) | `    
Select AnnotatedEntity,Name,Value | `
Export-Csv C:\Users\me\Documents\linux--list.csv -NoTypeInformation -UseCulture

也许这是一个 XY 问题。如果你有更好的方法来获取那些不是设备的 Linux VM,你可以告诉我这个方法。

【问题讨论】:

    标签: powershell vmware powercli


    【解决方案1】:

    在此过程中,您最好使用一些变量来帮助简化此操作。

    例子:

    $LinuxVMs = Get-VM | `
    Get-Annotation | `
    Where-Object {$_.name -eq "Appliance"} | `
    Where-Object {$_.value -eq 'No'}
    

    现在,您可以根据需要将 LinuxVMs 变量通过管道传输到 Export-Csv cmdlet 中,并为您的第二个脚本引用它。

    例子:

    $LinuxVMs | Get-View -Property @("Name", "Config.GuestFullName","Guest.GuestFullName") | `
    Select -Property Name, @{N="COS";E={$_.Config.GuestFullName}}, @{N="ROS";E={$_.Guest.GuestFullName}} | `
    Where-Object ({$_.ROS -like 'Centos*' -or $_.ROS -like 'Suse*' -or $_.ROS -like 'Ubuntu*'}) | `    
    Select AnnotatedEntity,Name,Value | `
    Export-Csv C:\Users\me\Documents\linux-list.csv -NoTypeInformation -UseCulture
    

    【讨论】:

    • 我偶然在您回答之前更改了这样的脚本。我现在确定这是真的。非常感谢。
    【解决方案2】:

    您刚刚将脚本混合在一起,将第一个输入到第二个。 这行不通。

    您可以将每个脚本块放在一个脚本中,然后使用以下方法之一合并生成的 csv: Merging multiple CSV files into one using PowerShell

    Stinkyfriend's代码:

    Get-ChildItem -Filter *.csv | Select-Object -ExpandProperty FullName | Import-Csv | Export-Csv .\merged\merged.csv -NoTypeInformation -Append
    

    【讨论】:

    • 告诉我我理解正确吗?您说,首先导出一个非设备列表并使用此列表运行第二个脚本并导出一个新列表。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多