#powershell #azure-powershell
Вопрос:
Приведенная ниже команда выдает вывод в виде объекта
$вывод = (Вызов-AzVMRunCommand -имя_группы ресурсов $имя пользователя-Имя $имя виртуальной машины-Идентификатор команды ‘RunPowerShellScript’ -Путь к созданию скрипта.ps1).значение
Output
Mode : Process
ContextDirectory :
ContextFile :
CacheDirectory :
CacheFile :
Settings : {}
Code : ComponentStatus/StdOut/succeeded
Level : Info
DisplayStatus : Provisioning succeeded
Message : @{cluster_name=test01; status=green; timed_out=False; number_of_nodes=3;
number_of_data_nodes=3;
active_primary_shards=25; active_shards=50; relocating_shards=0;
initializing_shards=0;
unassigned_shards=0; delayed_unassigned_shards=0; number_of_pending_tasks=0;
number_of_in_flight_fetch=0; task_max_waiting_in_queue_millis=0;
active_shards_percent_as_number=100.0}
Time :
Code : ComponentStatus/StdErr/succeeded
Level : Info
DisplayStatus : Provisioning succeeded
Как получить сообщение ==> number_of_nodes = 3 и number_of_data_nodes=3 в некоторой переменной, поэтому на основе этого значения мне нужно выполнить какое-то действие.
Спасибо
Комментарии:
1. Что же
$output.Message.GetType()
раскрывается?2.
$output.Message.number_of_nodes
Должен дать вам то, что вам нужно3. @TristanOtterpohl Его не работает, работает только вывод$. Сообщение и предоставление конкретных данных, но внутри сообщения есть значение пары нескольких ключей
4. $Выход = gc E:Result.txt foreach($temp в $выводе) { если($temp -соответствует «узлу») { [int]$number_of_nodes=(($temp -разделение»;») [3]-разделение «=»)[1] [int]$number_of_data_nodes=(($temp -разделение «;»)[4]-разделение «=»)[1] } } $number_of_nodes $number_of_date_nodes «‘ Этот код работает, когда я копирую этот вывод в какой-либо текстовый файл. но когда я напрямую работаю с выводом$, это не работает
5. @Theo , IsPublic = True , IsSerial = True , Имя = Строка и базовый тип = Система. Объект
Ответ №1:
Хорошо, если, как вы проверяли $Output.Message
, это многострочная строка, такая как
@{cluster_name=test01; status=green; timed_out=False; number_of_nodes=3;
number_of_data_nodes=3;
active_primary_shards=25; active_shards=50; relocating_shards=0;
initializing_shards=0;
unassigned_shards=0; delayed_unassigned_shards=0; number_of_pending_tasks=0;
number_of_in_flight_fetch=0; task_max_waiting_in_queue_millis=0;
active_shards_percent_as_number=100.0}
вы можете преобразовать это в хэш-таблицу, подобную этой:
$data = $Output.Message.Trim("@{}") -replace ';', [environment]::NewLine | ConvertFrom-StringData
Если вы распечатаете это на экране, $data | Format-Table -AutoSize
это будет выглядеть так:
Name Value
---- -----
number_of_nodes 3
task_max_waiting_in_queue_millis 0
number_of_data_nodes 3
status green
initializing_shards 0
active_shards_percent_as_number 100.0
cluster_name test01
delayed_unassigned_shards 0
active_shards 50
unassigned_shards 0
active_primary_shards 25
number_of_in_flight_fetch 0
timed_out False
relocating_shards 0
number_of_pending_tasks 0
С помощью этого формата хэш-таблицы легко получить значения различных ключей.
Например:
$data.number_of_nodes # --> 3
$data.number_of_data_nodes # --> 3
$data.cluster_name # --> test01