使用带Powershell的Azure VM创建自动关机策略

使用带Powershell的Azure VM创建自动关机策略,powershell,azure,virtual-machine,Powershell,Azure,Virtual Machine,我正在尝试使用Powershell为我的Azure VM创建自动关闭策略,但始终遇到以下错误: 新AzureRmResource:MissingRequiredProperty:缺少必需的属性TargetResourceId。 在C:\Users\home\Documents\CreateAzureVM.ps1:167 char:1 +新AzureRmResource-位置$Loc-资源ID$ScheduledShutdownReso。。。 + ~~~~~~~~~~~~~~~~~~~~~~~~~

我正在尝试使用Powershell为我的Azure VM创建自动关闭策略,但始终遇到以下错误:

新AzureRmResource:MissingRequiredProperty:缺少必需的属性TargetResourceId。 在C:\Users\home\Documents\CreateAzureVM.ps1:167 char:1 +新AzureRmResource-位置$Loc-资源ID$ScheduledShutdownReso。。。 + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +CategoryInfo:CloseError:(:)[New AzureRmResource],ErrorResponseMessageException +FullyQualifiedErrorId:MissingRequiredProperty,Microsoft.Azure.Commands.ResourceManager.cmdlet.Implementation.NewAzureResourceCmdlet

我不知道如何修复这个错误,这是我目前的脚本:

 $SubscriptionId = $AzContext.Context.Subscription.Id;  
$VMResourceId = (Get-AzureRmVM).id
$ScheduledShutdownResourceId = "/subscriptions/$SubscriptionId/resourceGroups/$RSGName/providers/microsoft.devtestlab/schedules/shutdown-computevm-$VMName"

$Properties = @{}
$Properties.Add('status', 'Enabled')
$Properties.Add('taskType', 'ComputeVmShutdownTask')
$Properties.Add('dailyRecurrence', @{'time'= 1159})
$Properties.Add('timeZoneId', "Eastern Standard Time")
$Properties.Add('notificationSettings', @{status='Disabled'; timeInMinutes=15})
$Properties.Add('targetResourceId', $VMResourceId)

#Error
New-AzureRmResource -Location $Loc -ResourceId $ScheduledShutdownResourceId -Properties $Properties -Force
原因是:

此脚本
$VMResourceId=(Get-AzureRmVM).id
不适用于特定VM。你应该得到一个特定的虚拟机

尝试使用以下Powershell脚本:

$SubscriptionId = $AzContext.Context.Subscription.Id
$VM = Get-AzureRmVM -ResourceGroupName $RGName -Name VMName
$VMResourceId = $VM.Id
$ScheduledShutdownResourceId = "/subscriptions/$SubscriptionId/resourceGroups/wayneVMRG/providers/microsoft.devtestlab/schedules/shutdown-computevm-$VMName"

$Properties = @{}
$Properties.Add('status', 'Enabled')
$Properties.Add('taskType', 'ComputeVmShutdownTask')
$Properties.Add('dailyRecurrence', @{'time'= 1159})
$Properties.Add('timeZoneId', "Eastern Standard Time")
$Properties.Add('notificationSettings', @{status='Disabled'; timeInMinutes=15})
$Properties.Add('targetResourceId', $VMResourceId)

#Error
New-AzureRmResource -Location eastus -ResourceId $ScheduledShutdownResourceId  -Properties $Properties  -Force
结果如下:


这里有一个循环,用于读取自动关闭AZ VM的当前配置值(可以根据上面的示例轻松添加更新/更改/设置) 示例将循环通过多个订阅。 :

###################
##:列出所有已启用的SUB
#$AllSubID=(获取AzureRmSubscription |其中{$\.State-eq“enabled”})。SubscriptionId
###以上可能不起作用取决于帐户,只需获取以下所有内容。
$AllSubID=(获取AzureRmSubscription).SubscriptionId
写入输出“$(获取日期-格式s)::下面的订阅列表”
$AllSubID
$AllVMList=@()
Foreach($AllSubID中的SubID){
选择AzureRmSubscription-Subscriptionid“$SubID”
##列出所有虚拟机
$VMs=获取AzureRmVM
Foreach($VM中的VM){
$VM=新对象psobject-属性@{`
“Subscriptionid”=$SubID;
“ResourceGroupName”=$VM.ResourceGroupName;
“VMName”=$VM.Name}
$AllVMList+=$VM |选择Subscriptionid、ResourceGroupName、VMName
}
}
$AllVMList
##获取自动关机信息
Foreach($AllVMList中的VM){
写入输出“$(获取日期-格式s)::VM:$($VM.VMName)::$($VM.ResourceGroupName)::$($VM.Subscriptionid)”
$ScheduledShutdownResourceId=“/subscriptions/$($VM.Subscriptionid)/resourceGroups/$($VM.ResourceGroupName)/providers/microsoft.devtestlab/schedules/shutdown computevm-$($VM.VMName)”
##写入输出“$ScheduledShutdownResourceId”
$VMShutdownInfo=获取AzureRmResource-ResourceId$ScheduledShutdownResourceId
写入输出“$(获取日期-格式s)::VM:$($VM.VMName)::状态:$($VMShutdownInfo.properties.status);任务类型:$($VMShutdownInfo.properties.taskType);timeZoneId:$($VMShutdownInfo.properties.timeZoneId);DailRecurrence:$($VMShutdownInfo.properties.DailRecurrence);”
}
###完成