Преобразование PowerShell в Bash

#windows #bash #powershell

#Windows #bash #powershell

Вопрос:

Мне нужно преобразовать следующий сценарий PowerShell в сценарий Bash. Может ли кто-нибудь мне помочь? Я действительно новичок в Bash и не знаю, как управлять выводом из команды curl, а затем преобразовать его в Json.

 $headers = @{"X-Octopus-ApiKey"="<api_key>"}

$machine = Invoke-RestMethod "http://my.url/api/machines/discover?host=<ip_address>amp;type=ssh" -Headers $headers -Method Get
$machine.Name = "<hostname>"
$machine.Roles  = "<role>"
$machine.EnvironmentIds  = "<environment>"
$machine.Endpoint.AccountId = "<account_id>"

Invoke-RestMethod "http://my.url/api/machines" -Headers $headers -Method Post -Body ($machine | ConvertTo-Json -Depth 10)
  

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

1. SO не является бесплатным сервисом перевода. Что вы уже пробовали? Что работает не так, как ожидалось?

Ответ №1:

Powershell возвращает ответ объекта из Invoke-RestMethod, но curl возвращает формат строки json. Вы должны проанализировать ответ curl, чтобы извлечь значения ролей и идентификаторов среды, используя инструмент синтаксического анализа json, такой как jq.

Убедитесь, что вы установили jq

Следующий сценарий является преобразованием сценария Powershell:

     headers='{"X-Octopus-ApiKey"="<api_key>"}'
    #$machine = Invoke-RestMethod "http://my.url/api/machines/discover?host=<ip_address>amp;type=ssh" -Headers $headers -Method Get

    response=$(curl -s  -X GET -H $headers "http://my.url/api/machines/discover?host=<ip_address>amp;type=ssh")        
    echo $response
    Name="Myhostname"
    Roles=$(echo $response | jq -r ".Roles")
    echo $Roles
    Roles ="Myrole2"
    EnvironmentIds=$(echo $response | jq -r ".EnvironmentIds")
    echo $EnvironmentIds
    EnvironmentIds ="Myenvironment2"
    echo $EnvironmentIds
    AccountId="Myaccount_id"
    #compose json string to be passed as a body for the next curl call
    machine=$(printf '
    {"Name":"%s",
    "Roles":"%s" ,
    "EnvironmentIds":"%s" ,
    "Endpoint" : {
                   "AccountId" : "%s"      
                 }
    }' "$Name" "$Roles"  "$EnvironmentIds" "$AccountId")
    echo $machine

    #Invoke-RestMethod "http://my.url/api/machines" -Headers $headers -Method Post -Body ($machine | ConvertTo-Json -Depth 10)
    response=$(curl -s  -X POST -H $headers -d $machine  "http://my.url/api/machines")
    echo $response