Cmdlets gelijktijdig uitvoeren met behulp van PowerShell-taken
Belangrijk
Omdat Az PowerShell-modules nu alle mogelijkheden van AzureRM PowerShell-modules hebben en meer, wordt AzureRM PowerShell-modules op 29 februari 2024 buiten gebruik gesteld.
Als u serviceonderbrekingen wilt voorkomen, moet u uw scripts bijwerken die gebruikmaken van AzureRM PowerShell-modules voor het gebruik van Az PowerShell-modules op 29 februari 2024. Volg de snelstartgids om uw scripts automatisch bij te werken.
PowerShell ondersteunt asynchrone bewerkingen met PowerShell-taken. Azure PowerShell is sterk afhankelijk van het uitvoeren van en wachten op netwerkaanroepen naar Azure. Het is mogelijk dat u vaak niet-blokkerende aanroepen moet uitvoeren. Om in deze behoeften te voorzien, biedt Azure PowerShell uitstekende ondersteuning voor PSJob.
Contextpersistentie en PSJobs
Aangezien PSJobs worden uitgevoerd als afzonderlijke processen, moet u uw Azure-verbinding met deze taken delen. Geef de context door aan een taak, nadat u zich met Connect-AzureRmAccount hebt aangemeld bij uw Azure-account.
$creds = Get-Credential
$job = Start-Job { param($context,$vmadmin) New-AzureRmVM -Name MyVm -AzureRmContext $context -Credential $vmadmin} -Arguments (Get-AzureRmContext),$creds
Als u er echter voor hebt gekozen om de context automatisch op te slaan met Enable-AzureRmContextAutosave, wordt de context automatisch gedeeld met alle taken die u maakt.
Enable-AzureRmContextAutosave
$creds = Get-Credential
$job = Start-Job { param($vmadmin) New-AzureRmVM -Name MyVm -Credential $vmadmin} -Arguments $creds
Automatische taken met -AsJob
Voor uw gemak biedt Azure PowerShell ook een -AsJob-schakelaar voor enkele cmdlets met lange uitvoeringstijd.
De -AsJob-switch maakt het nog gemakkelijker om PSJobs te maken.
$creds = Get-Credential
$job = New-AzureRmVM -Name MyVm -Credential $creds -AsJob
U kunt de taak en de voortgang op elk gewenst moment inspecteren met Get-Job en 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
Wanneer de taak is voltooid, haalt u het resultaat van de taak op met Receive-Job.
Notitie
Receive-Job retourneert het resultaat van de cmdlet alsof de -AsJob-vlag niet aanwezig is. Het Receive-Job-resultaat van Do-Action -AsJob is bijvoorbeeld van hetzelfde type als het resultaat van 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
Voorbeeldscenario's
Meerdere virtuele machines in één keer maken:
$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
In dit voorbeeld zorgt de cmdlet Wait-Job ervoor dat het script wordt onderbroken terwijl er taken worden uitgevoerd. De uitvoering van het script wordt hervat nadat alle taken zijn voltooid. Meerdere taken worden parallel uitgevoerd en het script wacht vervolgens op voltooiing voordat het verdergaat.
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