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