#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