PowerCLI Получить виртуальные машины, которые соответствуют некоторым условиям - PullRequest
0 голосов
/ 16 ноября 2018

Я пытаюсь получить наши дистрибутивы Linux от vCenter с помощью PowerCLI. Но я не хочу получать виртуальные машины Appliance. Итак, у меня есть 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, это не устройство, вы можете сказать мне этот метод.

Ответы [ 2 ]

0 голосов
/ 17 ноября 2018

Возможно, вам лучше использовать некоторые переменные, чтобы облегчить эту задачу.

Пример:

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

Теперь у вас есть возможность передать переменную LinuxVMs в командлет Export-Csv, если вам нужно, а также сослаться на нее для второго скрипта.

Пример:

$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
0 голосов
/ 16 ноября 2018

Вы только что соединили сценарии, соединяя первый со вторым. Это не сработает.

Вы можете иметь каждый блок скрипта в одном скрипте, а затем объединить полученные CSV-файлы одним из следующих способов: Объединение нескольких файлов CSV в один с помощью PowerShell

Код Stinkyfriend's :

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