【发布时间】:2022-01-05 18:13:06
【问题描述】:
我正在使用这个脚本,但它会收集所有的虚拟机并一一停止它,即使虚拟机已经处于停止状态
$vm = Get-Azvm
foreach($vms in $vm)
{
$resource = Get-Azvm | where {$_.Statuses -eq "Running"}
if($resource -ne $null)
{
Write-Output "Stopping virtual machine..." + $vms
Stop-AzVM -ResourceGroupName $resource.ResourceGroupName -Name $vms -Force
}
else
{
Write-output "Virtual machine not found:" + $vms
}
}
【问题讨论】:
-
您确定
Statuses是返回对象的现有属性吗?通过查看 MS Docs,您似乎需要使用-Status开关,以便 cmdlet 返回该属性,此外,Satutes似乎是一个嵌套属性,即$vm.Disks[0].Status[0].DisplayStatus。 -
如果您不确定我的意思,请尝试以下操作,
$vm[0] | Select-Object *并在必要时将返回的对象添加到您的问题混淆信息中。 -
@SantiagoSquarzon 你对
-Status的看法是对的,但对.Statuses却不是。传递-Status时,cmdlet 输出PSVirtualMachineInstanceView确实有Statusesproperty。 -
很高兴知道@zett42,使用开关时对象看起来像Example 2吗?
-
$vm = Get-AzVM -Name 'OneVMNameHere' -Status=>$vm.Statuses.GetType()和$vm.Statuses | Get-Member。这两个输出都将帮助我们了解如何为您提供帮助。
标签: azure powershell