PowerShell - для каждой отдельной строки возврата - PullRequest
0 голосов
/ 25 октября 2018

Я создал скрипт для возврата реплицированного состояния хранилища Azure для каждого AzureVM

 $items = Get-AzureRmRecoveryServicesAsrReplicationProtectedItem -ProtectionContainer $Containers
    foreach ($item in $items)
  {
   $a=$item.ReplicationHealth,$item.RecoveryAzureVMName
   write-host $a  
}

, получая желаемый вывод:

Normal VM1
Normal VM2
Critical VM3
Normal VM4
Critical VM5

Мне нужен вывод выше, чтобы перейти к zabbix. К сожалению, zabbixможет принимать только одну строку в одном цикле, поэтому мне нужно как-то изменить цикл, чтобы вернуть первую строку в выводе, затем во втором запуске, чтобы вернуть вторую строку и так далее

для получения первой строки (Normal VM1) Я попытался

foreach ($item in $items)
{
write-host $item.ReplicationHealth,$item.RecoveryAzureVMName | select -First 1
}

, но я получаю все пять строк в выводе, возможно ли поместить вывод в массив, а затем вернуть определенную строку из него?

Ответы [ 3 ]

0 голосов
/ 25 октября 2018
$items = Get-AzureRmRecoveryServicesAsrReplicationProtectedItem -ProtectionContainer $Containers
$items | foreach { "$($_.ReplicationHealth) $($_.RecoveryAzureVMName)" }

Это вернет:

Normal VM1
Normal VM2
Critical VM3
Normal VM4
Critical VM5

Если вы хотите только 1-ю строку, вы можете передать ее в select

$items | foreach { "$($_.ReplicationHealth) $($_.RecoveryAzureVMName)" } | select -First 1
0 голосов
/ 26 октября 2018

Мне потребовалось некоторое время, чтобы понять, выкинуть все выходные данные в файл и отправить их за один раз:

$filename = "C:\trapper.imports";
write-host $filename;

foreach ($item in $items)
{
'"{0}" {1}' -f "VM01",'replication['+$item.RecoveryAzureVMName+']',""""+$item.ReplicationHealth+"""" | Add-Content -LiteralPath $filename -Encoding "Default" -Force;

}

cd "C:\Program Files\Zabbix Agent\bin\win64"

.\zabbix_sender.exe -z zabbix_host -p 10051 -c "C:\Program Files\Zabbix Agent\conf\zabbix_agentd.win.conf" -i $filename -vv
0 голосов
/ 25 октября 2018

Передавая элементы таким образом, вы будете перечислять их вместо результатов объединения.

Попробуйте следующим образом:

foreach ($item in $items)
{
    $a = '{0} {1}' -f $item.ReplicationHealth,$item.RecoveryAzureVMName
    Write-Host $a  
}

Использование оператора -f начинается со строки формата, за которой следует одинили более объектов или выражений, которые будут преобразованы в строки и вставлены в указанное место в строке формата.

{0} в строке формата является элементом формата.0 - это индекс объекта, строковое значение которого будет вставлено в эту позицию.(Индексы начинаются с 0.) Если вставляемый объект не является строкой, вызывается его метод ToString для преобразования его в единицу перед вставкой в ​​строку результата.

Пример:

'{0} is an {1}' -f 'This','example'
This is an example
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...