Kör cmdletar parallellt med hjälp av PowerShell-jobb
Viktigt
Eftersom Az PowerShell-moduler nu har alla funktioner i AzureRM PowerShell-moduler och mycket mer drar vi tillbaka AzureRM PowerShell-moduler den 29 februari 2024.
För att undvika avbrott i tjänsten uppdaterar du skripten som använder AzureRM PowerShell-moduler för att använda Az PowerShell-moduler senast den 29 februari 2024. Följ snabbstartsguiden om du vill uppdatera skripten automatiskt.
PowerShell har stöd för asynkrona åtgärder med PowerShell-jobb. Azure PowerShell är kraftigt beroende av att utföra och vänta på nätverksanrop till Azure. Du kanske ofta behöver utföra icke-blockerande anrop. För att uppfylla det behovet tillhandahåller Azure PowerShell förstklassigt PSJob-stöd.
Sammanhangsbeständighet och PSJobs
Eftersom PSJobs körs som separata processer måste Azure-anslutningen delas med dem. När du har loggat in på ditt Azure-konto med Connect-AzureRmAccount överför du sammanhanget till ett jobb.
$creds = Get-Credential
$job = Start-Job { param($context,$vmadmin) New-AzureRmVM -Name MyVm -AzureRmContext $context -Credential $vmadmin} -Arguments (Get-AzureRmContext),$creds
Men om du har valt att sammanhanget ska sparas automatiskt med Enable-AzureRmContextAutosave delas sammanhanget automatiskt med alla jobb som du skapar.
Enable-AzureRmContextAutosave
$creds = Get-Credential
$job = Start-Job { param($vmadmin) New-AzureRmVM -Name MyVm -Credential $vmadmin} -Arguments $creds
Automatiska jobb med -AsJob
För att förenkla processen tillhandahåller Azure PowerShell även en -AsJob-växel på vissa tidskrävande-cmdletar.
-AsJob-växeln gör det enklare att skapa PSJobs.
$creds = Get-Credential
$job = New-AzureRmVM -Name MyVm -Credential $creds -AsJob
Du kan inspektera jobb och förlopp när som helst med Get-Job och Get-AzureRmVM.
Get-Job $job
Get-AzureRmVM MyVm
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
1 Long Running Operation for 'New-AzureRmVM' AzureLongRunningJob`1 Running True localhost New-AzureRmVM
ResourceGroupName Name Location VmSize OsType NIC ProvisioningState Zone
----------------- ---- -------- ------ ------ --- ----------------- ----
MyVm MyVm eastus Standard_DS1_v2 Windows MyVm Creating
När jobbet har slutförts hämtar du resultatet av jobbet med Receive-Job.
Anteckning
Receive-Job returnerar resultatet från cmdleten som om flaggan -AsJob inte fanns. Till exempel, resultatet Receive-Job av Do-Action -AsJob är av samma typ som ett resultat av Do-Action.
$vm = Receive-Job $job
$vm
ResourceGroupName : MyVm
Id : /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyVm/providers/Microsoft.Compute/virtualMachines/MyVm
VmId : dff1f79e-a8f7-4664-ab72-0ec28b9fbb5b
Name : MyVm
Type : Microsoft.Compute/virtualMachines
Location : eastus
Tags : {}
HardwareProfile : {VmSize}
NetworkProfile : {NetworkInterfaces}
OSProfile : {ComputerName, AdminUsername, WindowsConfiguration, Secrets}
ProvisioningState : Succeeded
StorageProfile : {ImageReference, OsDisk, DataDisks}
FullyQualifiedDomainName : myvmmyvm.eastus.cloudapp.azure.com
Exempelscenarier
Skapa flera virtuella datorer samtidigt:
$creds = Get-Credential
# Create 10 jobs.
for($k = 0; $k -lt 10; $k++) {
New-AzureRmVm -Name MyVm$k -Credential $creds -AsJob
}
# Get all jobs and wait on them.
Get-Job | Wait-Job
"All jobs completed"
Get-AzureRmVM
I det här exemplet gör cmdleten Wait-Job att skriptet pausas medan jobben fortfarande körs. Skriptet fortsätter att köras när alla jobb har slutförts. Flera jobb körs parallellt och sedan väntar skriptet på att de slutförs innan det fortsätter.
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
2 Long Running... AzureLongRun... Running True localhost New-AzureRmVM
3 Long Running... AzureLongRun... Running True localhost New-AzureRmVM
4 Long Running... AzureLongRun... Running True localhost New-AzureRmVM
5 Long Running... AzureLongRun... Running True localhost New-AzureRmVM
6 Long Running... AzureLongRun... Running True localhost New-AzureRmVM
7 Long Running... AzureLongRun... Running True localhost New-AzureRmVM
8 Long Running... AzureLongRun... Running True localhost New-AzureRmVM
9 Long Running... AzureLongRun... Running True localhost New-AzureRmVM
10 Long Running... AzureLongRun... Running True localhost New-AzureRmVM
11 Long Running... AzureLongRun... Running True localhost New-AzureRmVM
2 Long Running... AzureLongRun... Completed True localhost New-AzureRmVM
3 Long Running... AzureLongRun... Completed True localhost New-AzureRmVM
4 Long Running... AzureLongRun... Completed True localhost New-AzureRmVM
5 Long Running... AzureLongRun... Completed True localhost New-AzureRmVM
6 Long Running... AzureLongRun... Completed True localhost New-AzureRmVM
7 Long Running... AzureLongRun... Completed True localhost New-AzureRmVM
8 Long Running... AzureLongRun... Completed True localhost New-AzureRmVM
9 Long Running... AzureLongRun... Completed True localhost New-AzureRmVM
10 Long Running... AzureLongRun... Completed True localhost New-AzureRmVM
11 Long Running... AzureLongRun... Completed True localhost New-AzureRmVM
All Jobs completed.
ResourceGroupName Name Location VmSize OsType NIC ProvisioningState Zone
----------------- ---- -------- ------ ------ --- ----------------- ----
MYVM MyVm eastus Standard_DS1_v2 Windows MyVm Succeeded
MYVM0 MyVm0 eastus Standard_DS1_v2 Windows MyVm0 Succeeded
MYVM1 MyVm1 eastus Standard_DS1_v2 Windows MyVm1 Succeeded
MYVM2 MyVm2 eastus Standard_DS1_v2 Windows MyVm2 Succeeded
MYVM3 MyVm3 eastus Standard_DS1_v2 Windows MyVm3 Succeeded
MYVM4 MyVm4 eastus Standard_DS1_v2 Windows MyVm4 Succeeded
MYVM5 MyVm5 eastus Standard_DS1_v2 Windows MyVm5 Succeeded
MYVM6 MyVm6 eastus Standard_DS1_v2 Windows MyVm6 Succeeded
MYVM7 MyVm7 eastus Standard_DS1_v2 Windows MyVm7 Succeeded
MYVM8 MyVm8 eastus Standard_DS1_v2 Windows MyVm8 Succeeded
MYVM9 MyVm9 eastus Standard_DS1_v2 Windows MyVm9 Succeeded