3
Get-AzureRmVM -ResourceGroupName RG-VNETS | 
    ForEach-Object { 
     Get-AzureRmVM -ResourceGroupName RG-VNETS -Name $_.Name -Status 
    } | 
    ForEach-Object { 
     if (-Not ($_.Statuses[1].DisplayStatus -like "*deallocated*")) { 
      Stop-AzureRmVM -ResourceGroupName RG-VNETS -Name $_.Name -Force 
     } 
    } 

我已經獲得了停止所有Azure虛擬機的腳本,此處的腳本是此腳本一次關閉一個虛擬機。使用Azure PowerShell同時停止多個Azure虛擬機

也就是說,如果我有三個虛擬機:VM1,VM2,VM3

腳本不會關閉VM2 VM1,直到完全關機等等。我不知道是否有辦法告訴PowerShell不要等待每個虛擬機完全關閉以繼續進行下一個虛擬機。

回答

2

GitHub上已有feature request異步執行此類操作,這些操作應在不久的將來實施。

在此期間,你可以不喜歡使用PoshRSJob模塊下面的一個解決辦法 - 只要你的資源組的名稱替換temp4so

# Install PoshRSJob if necessary 
# 
# Install-Module PoshRSJob 

Login-AzureRmAccount  

$start = Get-Date 
$jobs = Get-AzureRmVM -ResourceGroupName temp4so | 
    % { 
     Get-AzureRmVM -ResourceGroupName temp4so -Name $_.Name -Status 
    } | 
    % { 
     if (-Not ($_.Statuses[1].DisplayStatus -like "*deallocated*")) { 
      $vm = $_ 
      Start-RSJob {    
       Stop-AzureRmVM -ResourceGroupName temp4so -Name ($using:vm).Name -Force 
      } 
     } 
    } 
$jobs | Wait-RSJob | Receive-RSJob 
$jobs | Remove-RSJob 
$end = Get-Date 
Write-Host ("Stopping took {0}" -f ($end - $start)) 

這在我的測試情況下與3個虛擬機導致類似於輸出以下這表明其中平行

OperationId : 
Status  : Succeeded 
StartTime : 24.09.2016 18:49:10 
EndTime  : 24.09.2016 18:51:32 
Error  : 

OperationId : 
Status  : Succeeded 
StartTime : 24.09.2016 18:49:11 
EndTime  : 24.09.2016 18:51:22 
Error  : 

OperationId : 
Status  : Succeeded 
StartTime : 24.09.2016 18:49:11 
EndTime  : 24.09.2016 18:51:22 
Error  : 

Stopping took 00:02:32.9115538 

注進行操作:你不能簡單的使用標準Start-Job來卸載同步。由於後臺新創建的PowerShell實例不會與您的初始會話共享上下文,因此需要您爲每個會話再次進行身份驗證。由於PoshRSJob在初始PowerShell實例中使用PowerShell運行空間,因此不需要再次進行身份驗證。

+0

非常感謝,它正是我所需要的。我剛剛測試過它,它工作 – miticoluis

+0

這個腳本只停止前5個虛擬機,無論我運行多少次。無論如何關閉所有虛擬機? – WinBoss

+0

@WinBoss,有兩個原因(我可以看到)爲什麼你只看到一些虛擬機關機。 1.您是否有位於不同資源組的虛擬機?此腳本一次只針對一個資源組。 2.您使用的是經典部署還是資源管理器部署?如果是這樣,示例腳本正在使用RM模塊。只需將它們切換到Get-AzureVM,Stop-AzureVM等經典模塊即可。 更多信息,請訪問:https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource -manager-deployment-model – GrayDwarf