我正在尝试通过Invoke-AzureRmVMRunCommand
以及Invoke-RestMethod
cmdlet在Azure VM(Windows)上运行一个简单的脚本。
只是试图获取DHCP服务的状态。
存储在test.ps1文件中的脚本
Get-Service DHCP
命令:
Invoke-AzureRmVMRunCommand -ResourceGroupName $Resource_Group -VMName $Resource_Name -CommandId RunPowerShellScript -ScriptPath 'C:\Vincent\Azure\AzureVM\Test.ps1'
我甚至尝试过使用Azure API但是同样的错误: 命令:
$Body = @"
{
"commandId": "RunPowerShellScript",
"script": [
"Get-Service DHCP"
]
}
"@
$AppID = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
$Key = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
$TenantId = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
$SubscriptionID = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
$GetToken = "https://login.microsoftonline.com/$TenantId/oauth2/token?tenant_id=$TenantId"
$Access_Token = Invoke-RestMethod -Method Post -Uri $GetToken -Body "grant_type=client_credentials&client_id=$AppID&client_secret=$Key&resource=$resource"
$Token = $Access_Token.access_token
$API = "https://management.azure.com/subscriptions/$SubscriptionID/resourceGroups/$Resource_Group/providers/Microsoft.Compute/virtualMachines/$VMName/runCommand?api-version=2017-03-30"
Invoke-RestMethod -Method Post -Uri $API -Headers @{Authorization = "Bearer $Token"} -Body $Body -ContentType 'application/json' -OutVariable Result
错误: 调用-AzureRmVMRunCommand:
Invoke-AzureRmVMRunCommand:资源 资源下的'Microsoft.Compute / virtualMachines / XXXXXXXX' 未找到“XXXXXX”组。 ErrorCode:ResourceNotFound ErrorMessage:资源 资源组下的“Microsoft.Compute / virtualMachines / XXXXXXXX” 找不到'XXXXXX'。 StatusCode:404 ReasonPhrase:未找到 OperationID:d5a9e664-92e2-45d6-b5e8-b3d5bd65814c在行:1字符:1 + Invoke-AzureRmVMRunCommand -ResourceGroupName $ Resource_Group -VMName ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~ + CategoryInfo:CloseError:(:) [Invoke-AzureRmVMRunCommand],ComputeCloudException + FullyQualifiedErrorId:Microsoft.Azure.Commands.Compute.Automation.InvokeAzureRmVMRunCommand
错误API:
Invoke-RestMethod:{“error”:{ “代码”:“冲突”, “message”:“正在运行命令扩展执行。请在调用运行命令之前等待完成。”第23行:第23行 焦炭:1 + Invoke-RestMethod -Method Post -Uri $ API -Headers @ {Authorization =“... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~ + CategoryInfo:InvalidOperation:(System.Net.HttpWebRequest:HttpWebRequest)[Invoke-RestMethod], 引发WebException + FullyQualifiedErrorId:WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeRestMethodCommand
答案 0 :(得分:0)
Invoke-AzureRmVMRunCommand 在VM上运行命令。
当您提供错误的“ ResourceGroupName ”时,您会收到错误消息。
您可以查看下面的屏幕截图:我提供了错误的资源组并更改为正确的资源组给出了成功。
如果显示正在运行命令扩展执行,则可以从 Azure Portal =>中检查操作。活动日志:
答案 1 :(得分:0)
您收到“找不到资源”错误:
错误:Invoke-AzureRmVMRunCommand:
Invoke-AzureRmVMRunCommand:资源 资源组下的“ Microsoft.Compute / virtualMachines / XXXXXXXX” 找不到“ XXXXXX” 。错误代码:ResourceNotFound错误消息: 资源下的资源“ Microsoft.Compute / virtualMachines / XXXXXXXX” 找不到“ XXXXXX”组。状态码:404原因短语:找不到 OperationID:d5a9e664-92e2-45d6-b5e8-b3d5bd65814c在第1行:char +1 Invoke-AzureRmVMRunCommand -ResourceGroupName $ Resource_Group -VMName ... +
+ CategoryInfo : CloseError: (:) [Invoke-AzureRmVMRunCommand], ComputeCloudException + FullyQualifiedErrorId : Microsoft.Azure.Commands.Compute.Automation.InvokeAzureRmVMRunCommand
然后您会收到一条错误消息,提示“您正在运行invoke-azurermvmruncommand”,请等到完成为止:
错误API:
Invoke-RestMethod:{“错误”:{“代码”:“ 冲突”,“消息”:“ 运行 命令扩展正在执行中。请等待完成 在调用运行命令之前。“}}在第23行:char:1 + Invoke-RestMethod-方法发布-Uri $ API -Headers @ {Authorization =“ ... +
+ CategoryInfo : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-RestMethod], WebException + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeRestMethodCommand
运行此命令以检查虚拟机是否在预期的位置,然后检查脚本:
get-azurermvm -resourcegroupname $Resource_Group -Name $Resource_Name
$file = "C:\Vincent\Azure\AzureVM\Test.ps1"
Invoke-AzureRmVMRunCommand -ResourceGroupName $Resource_Group -VMName $Resource_Name -CommandId RunPowerShellScript -ScriptPath $file
如果仍然无效,请与我们分享$Resource_Name.GetType()
和$Resource_Group.GetType()
答案 2 :(得分:0)
通过在虚拟机的订阅中设置Set-AzureRmContext
,您需要先调用Invoke-AzureRmVMRunCommand
,然后再调用-SubscriptionName
。