windows - 将 PowerShell 转换为 Bash

标签 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>&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)

最佳答案

Powershell从Invoke-RestMethod返回对象响应,但curl返回json字符串格式。 您必须使用 jq 等 json 解析器工具解析curl 的响应以提取 Roles 和 EnvironmentIds 的值。

确保您安装了 jq

以下脚本是Powershell脚本的转换:

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

    response=$(curl -s  -X GET -H $headers "http://my.url/api/machines/discover?host=<ip_address>&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

关于windows - 将 PowerShell 转换为 Bash,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40145333/

相关文章:

mysql - 无法启动 MySQL 服务器

c++ - 全新下载的 boost 中缺少 Jam 文件

bash - VIM - 通过命令行传递冒号命令列表

windows - BASH:确定脚本是从虚拟机(Ubuntu)还是W10 bash应用程序调用的?

c# - 使用 DefaultDisplayPropertySet 从 C# 进行 PowerShell 输出格式化

powershell - 为什么脚本将自身输出到控制台?

windows - 如何从批处理文件中的脚本参数中去除引号?

windows - 如何使窗口短时间卡住

bash - Bash : graceful function death on error

powershell - 使用带有 "&"和 "%"的变量时出现引号问题