Требуется справка по синтаксису Powershell

#powershell

#powershell

Вопрос:

У меня есть команда Powershell, которую для целей автоматизации в нашей системе мониторинга я пытаюсь записать в одну строку.

По сути, мы проверяем несколько виртуальных машин Hyper-V, чтобы убедиться, что они реплицируются правильно. Для этого мы проверяем дату / время последней репликации и сравниваем их с текущей датой / временем. Вот однострочник, который у меня есть для проверки одной машины.

 (new-timespan -start(get-vm termserv002| Measure-VMReplication | select -expand lastreplicationtime)).totalminutes
  

Это работает отлично. Тем не менее, мы хотели бы проверить ВСЕ виртуальные машины в этом поле Hyper-V. Я могу сделать это без запуска new-timespan, выполнив эту команду —

 get-vm | where {$_.replicationstate -ne "Disabled"} | Measure-VMReplication | select vmname, lastreplicationtime
  

Это дает мне каждую виртуальную машину на коробке и время ее последней репликации.

В конечном счете, я хотел бы получить выходные данные VMName и LastReplicationTime в минутах от текущей даты / времени. Если я смогу сделать это в одной строке, запустите homerun!

Есть предложения? Независимо от того, как я пытаюсь объединить их вместе, я просто не могу правильно использовать синтаксис (или это невозможно).)

Ответ №1:

Я не могу это протестировать, но попробую:

 get-vm | where {$_.replicationstate -ne "Disabled"} | Measure-VMReplication |
    select vmname, @{n="LastReplicationTime";e={ (new-timespan -start ($_.lastreplicationtime) -end (get-date)).TotalMinutes }}
  

Комментарии:

1. Кажется, это сделало свое дело! Возможно, мне нужно еще кое-что доработать, но если я это сделаю, я открою новый поток! Спасибо!!

2. ОК — последующие действия — не уверен в протоколе. Если мне понадобится задать еще один вопрос, дайте мне знать. Любой простой способ просто показать виртуальным машинам, где время последней репликации>, скажем, 1?

3. добавьте это | ? { $_.lastreplicationtime -gt 1 } после приведенного выше кода.

4. ВЫДАЮЩИЙСЯ! Большое спасибо, именно то, что мне было нужно! Я не мог понять эту часть ни за что на свете — настолько просто, что я не думал, что смогу использовать $ _.lastreplicationtime в тот момент, так как мы были в выражениях.