【问题标题】:Powershell invoke-restmethod variable in urlurl中的Powershell调用-restmethod变量
【发布时间】:2021-03-29 04:32:15
【问题描述】:

我是 powershell 新手,我正在尝试创建一个简单的脚本,允许我使用 invoke-rest 方法打开多个 Azure VM。

当我直接将 VM 名称写入 url 而不是使用变量时,我的代码可以工作,但我想使用一个变量,因为最终这必须适用于多个 VM。

相关部分代码:

$body = @{
"$virtualMachines" = "VM1"
} | ConvertTo=Json

$url= "https://management.azure.com/subscriptions/mySubscriptionId/resourceGroups/myResourceGroupName/providers/Microsoft.DevTestLab/labs/myLabName/virtualmachines/" + $virtualMachines + "/start?api-version=2018-09-15"

$response = Invoke-RestMethod -uri $url -Method 'POST' -Headers $headers -Body $body
$response | ConvertTo-Json

【问题讨论】:

    标签: azure powershell rest scripting invoke


    【解决方案1】:

    如果您有多个虚拟机,您可以将它们全部放入一个类似这样的 PowerShell 变量中,一个字符串数组。

    $VMs = "myVm1", "myVm2", "myVm3"
    

    PowerShell 有许多流控制语句,您要使用的一个是ForEach,它将一次单步执行一个数组。我们只是修改了您设置 URL 的方式,使其更友好、更易于阅读,这应该可以正常工作。

    $baseUrl = "https://management.azure.com/subscriptions/mySubscriptionId/resourceGroups/myResourceGroupName/providers/Microsoft.DevTestLab/labs/myLabName/virtualmachines/"
    
    ForEach ($vm in $VMs){
       $url = $baseurl + $vm + "/start?api-version=2018-09-15"
       Write-host "About to start [$Vm]"  
       $response = Invoke-RestMethod -uri $url -Method 'POST' -Headers $headers
       $response | ConvertTo-Json
    }
    
    

    我检查了the API documentationstart? REST API 端点,看起来您不需要此端点的-Body 参数。

    【讨论】:

    • 知道了!非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多