Gestire le risorse Batch con i cmdlet di PowerShellManage Batch resources with PowerShell cmdlets

Con i cmdlet di PowerShell per Azure Batch è possibile eseguire molte delle attività eseguite con le API Batch, il portale di Azure e l'interfaccia della riga di comando di Azure e creare i relativi script.With the Azure Batch PowerShell cmdlets, you can perform and script many of the same tasks you carry out with the Batch APIs, the Azure portal, and the Azure Command-Line Interface (CLI). Questa è una rapida introduzione ai cmdlet con cui è possibile gestire gli account Batch e usare risorse di Batch come pool, processi e attività.This is a quick introduction to the cmdlets you can use to manage your Batch accounts and work with your Batch resources such as pools, jobs, and tasks.

Per un elenco completo di cmdlet Batch e per la sintassi dettagliata dei cmdlet, vedere Informazioni di riferimento sui cmdlet di Azure Batch.For a complete list of Batch cmdlets and detailed cmdlet syntax, see the Azure Batch cmdlet reference.

Questo articolo si basa sui cmdlet di Azure PowerShell versione 3.0.0.This article is based on cmdlets in Azure PowerShell version 3.0.0. È consigliabile eseguire di frequente l'aggiornamento di Azure PowerShell per sfruttare i vantaggi degli aggiornamenti e miglioramenti del servizio.We recommend that you update your Azure PowerShell frequently to take advantage of service updates and enhancements.

PrerequisitiPrerequisites

Eseguire queste operazioni per usare Azure PowerShell per gestire le risorse di Batch.Perform the following operations to use Azure PowerShell to manage your Batch resources.

  • Come installare e configurare Azure PowerShellInstall and configure Azure PowerShell
  • Eseguire il cmdlet Login-AzureRmAccount per connettersi alla sottoscrizione. I cmdlet di Azure Batch sono disponibili nel modulo Azure Resource Manager:Run the Login-AzureRmAccount cmdlet to connect to your subscription (the Azure Batch cmdlets ship in the Azure Resource Manager module):

    Login-AzureRmAccount

  • Effettuare la registrazione con lo spazio dei nomi del provider di Batch.Register with the Batch provider namespace. Questa operazione deve essere eseguita solo una volta per ogni sottoscrizione.This operation only needs to be performed once per subscription.

    Register-AzureRMResourceProvider -ProviderNamespace Microsoft.Batch

Gestire gli account e le chiavi BatchManage Batch accounts and keys

Creare un account BatchCreate a Batch account

New-AzureRmBatchAccount crea un account Batch in un gruppo di risorse specificato.New-AzureRmBatchAccount creates a Batch account in a specified resource group. Se non si ha già un gruppo di risorse, crearne uno eseguendo il cmdlet New-AzureRmResourceGroup.If you don't already have a resource group, create one by running the New-AzureRmResourceGroup cmdlet. Specificare una delle aree di Azure nel parametro location, ad esempio "Stati Uniti centrali".Specify one of the Azure regions in the Location parameter, such as "Central US". Ad esempio:For example:

New-AzureRmResourceGroup –Name MyBatchResourceGroup –location "Central US"

Creare quindi un account Batch nel gruppo di risorse, specificando il nome dell'account in <account_name> e la località e il nome del gruppo di risorse.Then, create a Batch account in the resource group, specifying a name for the account in <account_name> and the location and name of your resource group. La creazione dell'account Batch può richiedere tempo.Creating the Batch account can take some time to complete. ad esempio:For example:

New-AzureRmBatchAccount –AccountName <account_name> –Location "Central US" –ResourceGroupName <res_group_name>

Nota

Il nome dell'account Batch deve essere univoco nell'area di Azure per il gruppo di risorse e contenere tra 3 e 24 caratteri (sono ammessi solo numeri e lettere minuscole).The Batch account name must be unique to the Azure region for the resource group, contain between 3 and 24 characters, and use lowercase letters and numbers only.

Ottenere le chiavi di accesso all'accountGet account access keys

Get-AzureRmBatchAccountKeys mostra le chiavi di accesso associate a un account Azure Batch.Get-AzureRmBatchAccountKeys shows the access keys associated with an Azure Batch account. Ad esempio, eseguire le operazioni seguenti per ottenere le chiavi primarie e secondarie dell'account creato.For example, run the following to get the primary and secondary keys of the account you created.

$Account = Get-AzureRmBatchAccountKeys –AccountName <account_name>

$Account.PrimaryAccountKey

$Account.SecondaryAccountKey

Generare una nuova chiave di accessoGenerate a new access key

New-AzureRmBatchAccountKey genera una nuova chiave dell'account primaria o secondaria per un account Azure Batch.New-AzureRmBatchAccountKey generates a new primary or secondary account key for an Azure Batch account. Ad esempio, per generare una nuova chiave primaria per l'account Batch, digitare:For example, to generate a new primary key for your Batch account, type:

New-AzureRmBatchAccountKey -AccountName <account_name> -KeyType Primary

Nota

Per generare una nuova chiave secondaria, specificare "Secondary" per il parametro KeyType .To generate a new secondary key, specify "Secondary" for the KeyType parameter. È necessario rigenerare la chiave primaria e quella secondaria separatamente.You have to regenerate the primary and secondary keys separately.

Eliminare un account BatchDelete a Batch account

Remove-AzureRmBatchAccount elimina un account Batch.Remove-AzureRmBatchAccount deletes a Batch account. ad esempio:For example:

Remove-AzureRmBatchAccount -AccountName <account_name>

Quando richiesto, confermare che si desidera rimuovere l'account.When prompted, confirm you want to remove the account. La rimozione di un account può richiedere alcuni minuti.Account removal can take some time to complete.

Creare un oggetto BatchAccountContextCreate a BatchAccountContext object

Per l'autenticazione con i cmdlet di PowerShell per Batch quando si creano e si gestiscono pool, processi, attività e altre risorse di Batch, creare prima di tutto un oggetto BatchAccountContext in cui archiviare il nome e le chiavi dell'account:To authenticate using the Batch PowerShell cmdlets when you create and manage Batch pools, jobs, tasks, and other resources, first create a BatchAccountContext object to store your account name and keys:

$context = Get-AzureRmBatchAccountKeys -AccountName <account_name>

Passare l'oggetto BatchAccountContext nei cmdlet che usano il parametro BatchContext .You pass the BatchAccountContext object into cmdlets that use the BatchContext parameter.

Nota

Per impostazione predefinita, la chiave primaria dell'account viene usata per l'autenticazione, ma è possibile selezionare in modo esplicito la chiave da usare modificando la proprietà KeyInUse dell'oggetto BatchAccountContext: $context.KeyInUse = "Secondary".By default, the account's primary key is used for authentication, but you can explicitly select the key to use by changing your BatchAccountContext object’s KeyInUse property: $context.KeyInUse = "Secondary".

Creare e modificare le risorse BatchCreate and modify Batch resources

Usare cmdlet come New-AzureBatchPool, New-AzureBatchJob e New-AzureBatchTask per creare risorse in un account Batch.Use cmdlets such as New-AzureBatchPool, New-AzureBatchJob, and New-AzureBatchTask to create resources under a Batch account. Sono disponibili cmdlet Get- e Set- corrispondenti per aggiornare le proprietà delle risorse esistenti e cmdlet Remove- per rimuovere le risorse in un account Batch.There are corresponding Get- and Set- cmdlets to update the properties of existing resources, and Remove- cmdlets to remove resources under a Batch account.

Quando si usano molti di questi cmdlet, oltre a passare un oggetto BatchContext è necessario passare oggetti contenenti le impostazioni dettagliate delle risorse, come illustrato nell'esempio seguente.When using many of these cmdlets, in addition to passing a BatchContext object, you need to create or pass objects that contain detailed resource settings, as shown in the following example. Per altri esempi, vedere la Guida dettagliata dei singoli cmdlet.See the detailed help for each cmdlet for additional examples.

Creare un pool di BatchCreate a Batch pool

Quando si crea o si aggiorna un pool di Batch, si seleziona una configurazione di servizio cloud o di macchina virtuale per il sistema operativo nei nodi di calcolo. Vedere Panoramica delle funzionalità di Batch per sviluppatori.When creating or updating a Batch pool, you select either the cloud service configuration or the virtual machine configuration for the operating system on the compute nodes (see Batch feature overview). Se si specifica la configurazione di tipo servizio cloud, le immagini dei nodi di calcolo vengono create con una delle versioni del sistema operativo guest di Azure.If you specify the cloud service configuration, your compute nodes are imaged with one of the Azure Guest OS releases. Se si specifica la configurazione di tipo macchina virtuale, è possibile specificare una delle immagini di VM Linux o Windows supportate elencate nel Marketplace per Macchine virtuali di Azure oppure fornire un'immagine personalizzata preparata dall'utente.If you specify the virtual machine configuration, you can either specify one of the supported Linux or Windows VM images listed in the Azure Virtual Machines Marketplace, or provide a custom image that you have prepared.

Quando si esegue New-AzureBatchPool, passare le impostazioni del sistema operativo in un oggetto PSCloudServiceConfiguration o PSVirtualMachineConfiguration.When you run New-AzureBatchPool, pass the operating system settings in a PSCloudServiceConfiguration or PSVirtualMachineConfiguration object. Il cmdlet seguente, ad esempio, crea un nuovo pool di Batch con nodi di calcolo di dimensione Small nella configurazione del servizio cloud, con immagine creata con la versione del sistema operativo più recente della famiglia 3 (Windows Server 2012).For example, the following cmdlet creates a new Batch pool with size Small compute nodes in the cloud service configuration, imaged with the latest operating system version of family 3 (Windows Server 2012). In questo caso, il parametro CloudServiceConfiguration specifica la variabile $configuration come oggetto PSCloudServiceConfiguration.Here, the CloudServiceConfiguration parameter specifies the $configuration variable as the PSCloudServiceConfiguration object. Il parametro BatchContext specifica una variabile $context definita in precedenza come oggetto BatchAccountContext.The BatchContext parameter specifies a previously defined variable $context as the BatchAccountContext object.

$configuration = New-Object -TypeName "Microsoft.Azure.Commands.Batch.Models.PSCloudServiceConfiguration" -ArgumentList @(4,"*")

New-AzureBatchPool -Id "AutoScalePool" -VirtualMachineSize "Small" -CloudServiceConfiguration $configuration -AutoScaleFormula '$TargetDedicated=4;' -BatchContext $context

Il numero di nodi di calcolo di destinazione nel nuovo pool è determinato da una formula di ridimensionamento automatico.The target number of compute nodes in the new pool is determined by an autoscaling formula. In questo caso, la formula è semplicemente $TargetDedicated=4e indica che il numero massimo di nodi di calcolo nel pool è 4.In this case, the formula is simply $TargetDedicated=4, indicating the number of compute nodes in the pool is 4 at most.

Query per pool, processi, attività e altri dettagliQuery for pools, jobs, tasks, and other details

Usare cmdlet come Get-AzureBatchPool, Get-AzureBatchJob e Get-AzureBatchTask per eseguire query per le entità create in un account Batch.Use cmdlets such as Get-AzureBatchPool, Get-AzureBatchJob, and Get-AzureBatchTask to query for entities created under a Batch account.

Eseguire query per ottenere datiQuery for data

Ad esempio, utilizzare Get-AzureBatchPools per individuare i pool.As an example, use Get-AzureBatchPools to find your pools. Per impostazione predefinita, questo comando esegue una query per tutti i pool dell'account, presupponendo che l'oggetto BatchAccountContext sia già archiviato in $context:By default this queries for all pools under your account, assuming you already stored the BatchAccountContext object in $context:

Get-AzureBatchPool -BatchContext $context

Usare un filtro ODataUse an OData filter

È possibile fornire un filtro OData tramite il parametro Filter per trovare solo gli oggetti a cui si è interessati.You can supply an OData filter using the Filter parameter to find only the objects you’re interested in. Ad esempio, è possibile trovare tutti i pool con nomi che iniziano con "myPool":For example, you can find all pools with ids starting with “myPool”:

$filter = "startswith(id,'myPool')"

Get-AzureBatchPool -Filter $filter -BatchContext $context

Questo metodo non è flessibile come l'uso di "Where-Object" in una pipeline locale.This method is not as flexible as using “Where-Object” in a local pipeline. Tuttavia, la query viene inviata al servizio Batch direttamente e quindi tutti i filtri vengono applicati sul lato server, consentendo un risparmio della larghezza di banda Internet.However, the query gets sent to the Batch service directly so that all filtering happens on the server side, saving Internet bandwidth.

Usare il parametro IdUse the Id parameter

In alternativa a un filtro OData, è possibile usare il parametro Id .An alternative to an OData filter is to use the Id parameter. Per eseguire una query per un pool specifico con Id "myPool":To query for a specific pool with id "myPool":

Get-AzureBatchPool -Id "myPool" -BatchContext $context

Il parametro Id supporta solo la ricerca di ID completi, senza caratteri jolly o filtri di tipo OData.The Id parameter supports only full-id search, not wildcards or OData-style filters.

Usare il parametro MaxCountUse the MaxCount parameter

Per impostazione predefinita, ogni cmdlet restituisce un massimo di 1000 oggetti.By default, each cmdlet returns a maximum of 1000 objects. Se si raggiunge questo limite, perfezionare il filtro in modo da restituire meno oggetti o impostare esplicitamente un limite massimo tramite il parametro MaxCount .If you reach this limit, either refine your filter to bring back fewer objects, or explicitly set a maximum using the MaxCount parameter. ad esempio:For example:

Get-AzureBatchTask -MaxCount 2500 -BatchContext $context

Per rimuovere il limite superiore, impostare MaxCount su 0 o un valore inferiore.To remove the upper bound, set MaxCount to 0 or less.

Usare la pipeline di PowerShellUse the PowerShell pipeline

I cmdlet Batch possono usare la pipeline di PowerShell per inviare dati tra i cmdlet.Batch cmdlets can leverage the PowerShell pipeline to send data between cmdlets. Questo equivale a specificare un parametro, ma rende più semplice l'uso di più entità.This has the same effect as specifying a parameter, but makes working with multiple entities easier.

Ad esempio, per trovare e visualizzare tutte le attività dell'account:For example, find and display all tasks under your account:

Get-AzureBatchJob -BatchContext $context | Get-AzureBatchTask -BatchContext $context

Per riavviare ogni nodo di calcolo in un pool:Restart (reboot) every compute node in a pool:

Get-AzureBatchComputeNode -PoolId "myPool" -BatchContext $context | Restart-AzureBatchComputeNode -BatchContext $context

Gestione dei pacchetti dell'applicazioneApplication package management

I pacchetti dell'applicazione semplificano la distribuzione di applicazioni nei nodi di calcolo dei pool.Application packages provide a simplified way to deploy applications to the compute nodes in your pools. Con i cmdlet di PowerShell per Batch, è possibile caricare e gestire pacchetti dell'applicazione nell'account Batch e distribuire versioni dei pacchetti nei nodi di calcolo.With the Batch PowerShell cmdlets, you can upload and manage application packages in your Batch account, and deploy package versions to compute nodes.

Creare un'applicazione:Create an application:

New-AzureRmBatchApplication -AccountName <account_name> -ResourceGroupName <res_group_name> -ApplicationId "MyBatchApplication"

Aggiungere un pacchetto dell'applicazione:Add an application package:

New-AzureRmBatchApplicationPackage -AccountName <account_name> -ResourceGroupName <res_group_name> -ApplicationId "MyBatchApplication" -ApplicationVersion "1.0" -Format zip -FilePath package001.zip

Impostare la versione predefinita per l'applicazione:Set the default version for the application:

Set-AzureRmBatchApplication -AccountName <account_name> -ResourceGroupName <res_group_name> -ApplicationId "MyBatchApplication" -DefaultVersion "1.0"

Elencare i pacchetti dell'applicazioneList an application's packages

$application = Get-AzureRmBatchApplication -AccountName <account_name> -ResourceGroupName <res_group_name> -ApplicationId "MyBatchApplication"

$application.ApplicationPackages

Eliminare un pacchetto dell'applicazioneDelete an application package

Remove-AzureRmBatchApplicationPackage -AccountName <account_name> -ResourceGroupName <res_group_name> -ApplicationId "MyBatchApplication" -ApplicationVersion "1.0"

Eliminare un'applicazioneDelete an application

Remove-AzureRmBatchApplication -AccountName <account_name> -ResourceGroupName <res_group_name> -ApplicationId "MyBatchApplication"

Nota

È necessario eliminare tutte le versioni dei pacchetti di un'applicazione prima di eliminare l'applicazione.You must delete all of an application's application package versions before you delete the application. Se si prova a eliminare un'applicazione che ha attualmente pacchetti, verrà visualizzato un errore di conflitto.You will receive a 'Conflict' error if you try to delete an application that currently has application packages.

Distribuire un pacchetto dell'applicazioneDeploy an application package

Quando si crea un pool è possibile specificare uno o più pacchetti dell'applicazione da distribuire.You can specify one or more application packages for deployment when you create a pool. Quando si specifica un pacchetto al momento della creazione del pool, il pacchetto viene distribuito in ogni nodo quando questo viene aggiunto al pool.When you specify a package at pool creation time, it is deployed to each node as the node joins pool. I pacchetti vengono distribuiti anche quando un nodo viene riavviato o ne viene ricreata l'immagine.Packages are also deployed when a node is rebooted or reimaged.

Specificare l'opzione -ApplicationPackageReference quando si crea un pool per distribuire un pacchetto dell'applicazione nei nodi del pool quando vengono aggiunti al pool.Specify the -ApplicationPackageReference option when creating a pool to deploy an application package to the pool's nodes as they join the pool. Creare prima un oggetto PSApplicationPackageReference e configurarlo con l'ID applicazione e la versione del pacchetto da distribuire nei nodi di calcolo del pool:First, create a PSApplicationPackageReference object, and configure it with the application Id and package version you want to deploy to the pool's compute nodes:

$appPackageReference = New-Object Microsoft.Azure.Commands.Batch.Models.PSApplicationPackageReference

$appPackageReference.ApplicationId = "MyBatchApplication"

$appPackageReference.Version = "1.0"

Creare ora il pool e specificare l'oggetto di riferimento pacchetto come argomento per l'opzione ApplicationPackageReferences:Now create the pool, and specify the package reference object as the argument to the ApplicationPackageReferences option:

New-AzureBatchPool -Id "PoolWithAppPackage" -VirtualMachineSize "Small" -CloudServiceConfiguration $configuration -BatchContext $context -ApplicationPackageReferences $appPackageReference

Per altre informazioni sui pacchetti dell'applicazione, vedere Distribuire le applicazioni nei nodi di calcolo con i pacchetti dell'applicazione Batch.You can find more information on application packages in Deploy applications to compute nodes with Batch application packages.

Importante

Per usare i pacchetti dell'applicazione è necessario collegare un account di archiviazione di Azure all'account Batch.You must link an Azure Storage account to your Batch account to use application packages.

Aggiornare i pacchetti dell’applicazione di un poolUpdate a pool's application packages

Per aggiornare le applicazioni assegnate a un pool esistente, creare prima un oggetto PSApplicationPackageReference con le proprietà desiderate, ovvero ID applicazione e versione del pacchetto:To update the applications assigned to an existing pool, first create a PSApplicationPackageReference object with the desired properties (application Id and package version):

$appPackageReference = New-Object Microsoft.Azure.Commands.Batch.Models.PSApplicationPackageReference

$appPackageReference.ApplicationId = "MyBatchApplication"

$appPackageReference.Version = "2.0"

Ottenere quindi il pool da Batch, cancellare tutti i pacchetti esistenti, aggiungere il nuovo riferimento al pacchetto e aggiornare il servizio Batch con le nuove impostazioni del pool:Next, get the pool from Batch, clear out any existing packages, add our new package reference, and update the Batch service with the new pool settings:

$pool = Get-AzureBatchPool -BatchContext $context -Id "PoolWithAppPackage"

$pool.ApplicationPackageReferences.Clear()

$pool.ApplicationPackageReferences.Add($appPackageReference)

Set-AzureBatchPool -BatchContext $context -Pool $pool

Le proprietà del pool saranno ora aggiornate nel servizio Batch.You've now updated the pool's properties in the Batch service. Per distribuire il nuovo pacchetto dell'applicazione nei nodi di calcolo del pool è tuttavia necessario riavviare o ricreare l'immagine di tali nodi.To actually deploy the new application package to compute nodes in the pool, however, you must restart or reimage those nodes. È possibile riavviare ogni nodo di un pool con questo comando:You can restart every node in a pool with this command:

Get-AzureBatchComputeNode -PoolId "PoolWithAppPackage" -BatchContext $context | Restart-AzureBatchComputeNode -BatchContext $context

Suggerimento

È possibile distribuire più pacchetti dell'applicazione nei nodi di calcolo del pool.You can deploy multiple application packages to the compute nodes in a pool. Per aggiungere un pacchetto dell'applicazione invece di sostituire i pacchetti attualmente distribuiti, omettere la riga $pool.ApplicationPackageReferences.Clear() indicata in precedenza.If you'd like to add an application package instead of replacing the currently deployed packages, omit the $pool.ApplicationPackageReferences.Clear() line above.

Passaggi successiviNext steps