Eseguire attività con account utente in BatchRun tasks under user accounts in Batch

In Azure Batch un'attività viene sempre eseguita con un account utente.A task in Azure Batch always runs under a user account. Per impostazione predefinita, le attività vengono eseguite con account utente standard, senza le autorizzazioni di amministratoreBy default, tasks run under standard user accounts, without administrator permissions. perché le impostazioni predefinite dell'account utente in genere sono sufficienti.These default user account settings are typically sufficient. Per determinati scenari, tuttavia, è utile essere in grado di configurare l'account utente con cui si intende eseguire un'attività.For certain scenarios, however, it's useful to be able to configure the user account under which you want a task to run. Questo articolo illustra i tipi di account utente e il modo in cui è possibile configurarli per lo scenario in uso.This article discusses the types of user accounts and how you can configure them for your scenario.

Tipi di account utenteTypes of user accounts

Azure Batch offre due tipi di account utente per l'esecuzione di attività:Azure Batch provides two types of user accounts for running tasks:

  • Account utente automatici.Auto-user accounts. Gli account utente automatici sono predefiniti e vengono creati automaticamente dal servizio Batch.Auto-user accounts are built-in user accounts that are created automatically by the Batch service. Per impostazione predefinita, le attività vengono eseguite con un account utente automatico.By default, tasks run under an auto-user account. È possibile configurare la specifica di utente automatico per un'attività per indicare con quale account utente automatico l'attività deve essere eseguita.You can configure the auto-user specification for a task to indicate under which auto-user account a task should run. La specifica di utente automatico consente di specificare il livello di elevazione dei privilegi e l'ambito dell'account utente automatico con cui verrà eseguita l'attività.The auto-user specification allows you to specify the elevation level and scope of the auto-user account that will run the task.

  • Account utente non anonimi.A named user account. È possibile specificare uno o più account utente non anonimi per un pool al momento della creazione del pool stesso.You can specify one or more named user accounts for a pool when you create the pool. Ogni account utente viene creato in ogni nodo del pool.Each user account is created on each node of the pool. Oltre al nome, specificare la password dell'account utente, il livello di elevazione dei privilegi e, per i pool Linux, la chiave privata SSH.In addition to the account name, you specify the user account password, elevation level, and, for Linux pools, the SSH private key. Quando si aggiunge un'attività, è possibile specificare l'account utente non anonimo con cui eseguirla.When you add a task, you can specify the named user account under which that task should run.

Importante

Nella versione 2017-01-01.4.0 del servizio Batch è stata introdotta una modifica significativa che richiede l'aggiornamento del codice per chiamare tale versione.The Batch service version 2017-01-01.4.0 introduces a breaking change that requires that you update your code to call that version. Se si esegue la migrazione di codice da una versione precedente di Batch, si noti che la proprietà runElevated non è più supportata nelle librerie client API REST o Batch.If you are migrating code from an older version of Batch, note that the runElevated property is no longer supported in the REST API or Batch client libraries. Per specificare il livello di elevazione dei privilegi, usare la nuova proprietà userIdentity di un'attività.Use the new userIdentity property of a task to specify elevation level. Per linee guida rapide sull'aggiornamento del codice Batch se si usa una delle librerie client, vedere la sezione Aggiornare il codice alla libreria client Batch più recente.See the section titled Update your code to the latest Batch client library for quick guidelines for updating your Batch code if you are using one of the client libraries.

Nota

Per motivi di sicurezza, gli account utente descritti in questo articolo non supportano i protocolli RDP (Remote Desktop Protocol) o SSH (Secure Shell).The user accounts discussed in this article do not support Remote Desktop Protocol (RDP) or Secure Shell (SSH), for security reasons.

Per connettersi a un nodo che esegue la configurazione della macchina virtuale Linux tramite SSH, vedere Installare e configurare Desktop remoto per connettersi a una VM Linux di Azure.To connect to a node running the Linux virtual machine configuration via SSH, see Use Remote Desktop to a Linux VM in Azure. Per connettersi ai nodi che eseguono Windows tramite RDP, vedere Come connettersi e accedere a una macchina virtuale di Azure che esegue Windows.To connect to nodes running Windows via RDP, see Connect to a Windows Server VM.

Per connettersi a un nodo che esegue la configurazione del servizio cloud tramite RDP, vedere Impostare una connessione Desktop remoto per un ruolo nei servizi cloud di Azure.To connect to a node running the cloud service configuration via RDP, see Enable Remote Desktop Connection for a Role in Azure Cloud Services.

Accesso degli account utente a file e directoryUser account access to files and directories

Un account utente automatico e un account utente non anonimo hanno entrambi accesso in lettura e scrittura alla directory di lavoro dell'attività, alla directory condivisa e alla directory di attività a istanze multiple.Both an auto-user account and a named user account have read/write access to the task’s working directory, shared directory, and multi-instance tasks directory. Entrambi i tipi di account hanno anche accesso in lettura alle directory di avvio e a quelle di preparazione dei processi.Both types of accounts have read access to the startup and job preparation directories.

Se un'attività viene eseguita con lo stesso account usato per l'esecuzione di un'attività di avvio, tale attività ha accesso in lettura e scrittura alla directory dell'attività di avvio.If a task runs under the same account that was used for running a start task, the task has read-write access to the start task directory. In modo analogo, se un'attività viene eseguita con lo stesso account usato per l'esecuzione di un'attività di preparazione dei processi, tale attività ha accesso in lettura e scrittura anche alla directory dell'attività di preparazione dei processi.Similarly, if a task runs under the same account that was used for running a job preparation task, the task has read-write access to the job preparation task directory. Se un'attività viene eseguita con un account diverso rispetto a quello usato per l'attività di avvio o per quella di preparazione dei processi, tale attività ha solo accesso in lettura alla directory corrispondente.If a task runs under a different account than the start task or job preparation task, then the task has only read access to the respective directory.

Per altre informazioni sull'accesso a file e directory da parte un'attività, vedere Sviluppare soluzioni di calcolo parallele su larga scala con Batch.For more information on accessing files and directories from a task, see Develop large-scale parallel compute solutions with Batch.

Accesso con privilegi elevati per le attivitàElevated access for tasks

Il livello di elevazione dei privilegi dell'account utente indica se un'attività viene eseguita con privilegi elevati.The user account's elevation level indicates whether a task runs with elevated access. Un account utente automatico e un account utente non anonimo consentono entrambi l'accesso con privilegi elevati.Both an auto-user account and a named user account can run with elevated access. Le due opzioni per il livello di elevazione dei privilegi sono le seguenti:The two options for elevation level are:

  • NonAdmin (Non amministratore): l'attività viene eseguita come utente standard senza accesso con privilegi elevati.NonAdmin: The task runs as a standard user without elevated access. Il livello di elevazione dei privilegi predefinito per un account utente Batch è sempre NonAdmin.The default elevation level for a Batch user account is always NonAdmin.
  • Admin (Amministratore): l'attività viene eseguita come utente con accesso con privilegi elevati e opera con le autorizzazioni di amministratore complete.Admin: The task runs as a user with elevated access and operates with full Administrator permissions.

Account utente automaticiAuto-user accounts

Per impostazione predefinita, in Batch le attività vengono eseguite con un account utente automatico, come utente standard senza accesso con privilegi elevati e con un ambito di attività.By default, tasks run in Batch under an auto-user account, as a standard user without elevated access, and with task scope. Quando per l'ambito di attività è configurata la specifica di utente automatico, il servizio Batch crea un account utente di questo tipo solo per l'attività.When the auto-user specification is configured for task scope, the Batch service creates an auto-user account for that task only.

L'alternativa all'ambito di attività è l'ambito di pool.The alternative to task scope is pool scope. Quando per l'ambito di pool è configurata la specifica di utente automatico, l'attività viene eseguita con un account di questo tipo disponibile per qualsiasi attività nel pool.When the auto-user specification for a task is configured for pool scope, the task runs under an auto-user account that is available to any task in the pool. Per altre informazioni sull'ambito di pool, vedere la sezione Eseguire un'attività con l'account utente automatico con ambito di pool.For more information about pool scope, see the section titled Run a task as the auto-user with pool scope.

L'ambito predefinito è diverso in nodi Windows e Linux:The default scope is different on Windows and Linux nodes:

  • Nei nodi Windows le attività vengono eseguite nell'ambito di attività per impostazione predefinita.On Windows nodes, tasks run under task scope by default.
  • I nodi Linux vengono sempre eseguiti nell'ambito di pool.Linux nodes always run under pool scope.

Esistono quattro possibili configurazioni per la specifica di utente automatico, ognuna delle quali corrisponde a un account utente automatico univoco:There are four possible configurations for the auto-user specification, each of which corresponds to a unique auto-user account:

  • Accesso senza privilegi di amministratore con ambito di attività (specifica di utente automatico predefinito)Non-admin access with task scope (the default auto-user specification)
  • Accesso con privilegi di amministratore (elevati) con ambito di attivitàAdmin (elevated) access with task scope
  • Accesso senza privilegi di amministratore con ambito di poolNon-admin access with pool scope
  • Accesso con privilegi di amministratore con ambito di poolAdmin access with pool scope

Importante

Le attività in esecuzione nell'ambito di attività non dispongono dell'accesso standard ad altre attività in un nodo.Tasks running under task scope do not have de facto access to other tasks on a node. Un utente malintenzionato con accesso all'account, tuttavia, potrebbe aggirare questa restrizione inviando un'attività che viene eseguita con privilegi di amministratore e che può accedere alle directory di altre attività.However, a malicious user with access to the account could work around this restriction by submitting a task that runs with administrator privileges and accesses other task directories. Un utente malintenzionato potrebbe anche usare il protocollo RDP o SSH per connettersi a un nodo.A malicious user could also use RDP or SSH to connect to a node. È importante pertanto proteggere l'accesso alle chiavi dell'account Batch per impedire che si verifichi uno scenario di questo tipo.It's important to protect access to your Batch account keys to prevent such a scenario. Se si sospetta che l'account sia stato compromesso, assicurarsi di rigenerare le chiavi.If you suspect your account may have been compromised, be sure to regenerate your keys.

Eseguire un'attività come utente automatico con accesso con privilegi elevatiRun a task as an auto-user with elevated access

Quando è necessario eseguire un'attività con accesso con privilegi elevati, è possibile configurare la specifica di utente automatico per i privilegi di amministratore.You can configure the auto-user specification for administrator privileges when you need to run a task with elevated access. A un'attività di avvio, ad esempio, potrebbe essere necessario l'accesso con privilegi elevati per installare il software nel nodo.For example, a start task may need elevated access to install software on the node.

Nota

In generale, è consigliabile usare l'accesso con privilegi elevati solo quando è necessarioIn general, it's best to use elevated access only when necessary. e concedere esclusivamente i privilegi minimi necessari per ottenere il risultato desiderato.Best practices recommend granting the minimum privilege necessary to achieve the desired outcome. Se ad esempio un'attività di avvio consente di installare software per l'utente corrente, anziché per tutti gli utenti, è possibile evitare di concedere l'accesso con privilegi elevati alle attività.For example, if a start task installs software for the current user, instead of for all users, you may be able to avoid granting elevated access to tasks. È possibile configurare la specifica di utente automatico per l'ambito di pool e senza privilegi di amministratore per tutte le attività che devono essere eseguite con lo stesso account, tra cui l'attività di avvio.You can configure the auto-user specification for pool scope and non-admin access for all tasks that need to run under the same account, including the start task.

I frammenti di codice seguente illustrano come configurare la specifica di utente automatico.The following code snippets show how to configure the auto-user specification. Gli esempi impostano il livello di elevazione dei privilegi su Admin e su Task.The examples set the elevation level to Admin and the scope to Task. L'ambito di attività è l'impostazione predefinita, ma in questo caso viene inclusa a scopo di esempio.Task scope is the default setting, but is included here for the sake of example.

Batch .NETBatch .NET

task.UserIdentity = new UserIdentity(new AutoUserSpecification(elevationLevel: ElevationLevel.Admin, scope: AutoUserScope.Task));

Batch JavaBatch Java

taskToAdd.withId(taskId)
        .withUserIdentity(new UserIdentity()
            .withAutoUser(new AutoUserSpecification()
                .withElevationLevel(ElevationLevel.ADMIN))
                .withScope(AutoUserScope.TASK));
        .withCommandLine("cmd /c echo hello");                        

Batch PythonBatch Python

user = batchmodels.UserIdentity(
    auto_user=batchmodels.AutoUserSpecification(
        elevation_level=batchmodels.ElevationLevel.admin,
        scope=batchmodels.AutoUserScope.task))
task = batchmodels.TaskAddParameter(
    id='task_1',
    command_line='cmd /c "echo hello world"',
    user_identity=user)
batch_client.task.add(job_id=jobid, task=task)

Eseguire un'attività come utente automatico con ambito di poolRun a task as an auto-user with pool scope

Quando viene eseguito il provisioning di un nodo, a livello di pool vengono creati due account utente automatici per ogni nodo del pool, uno con accesso con privilegi elevati e uno senza accesso con privilegi elevati.When a node is provisioned, two pool-wide auto-user accounts are created on each node in the pool, one with elevated access, and one without elevated access. Se si imposta l'ambito dell'utente automatico sull'ambito di pool per una determinata attività, questa verrà eseguita con uno di tali due account a livello di pool.Setting the auto-user's scope to pool scope for a given task runs the task under one of these two pool-wide auto-user accounts.

Quando si specifica l'ambito di pool per l'utente automatico, tutte le attività eseguite con privilegi di amministratore vengono eseguite con lo stesso account utente automatico a livello di pool.When you specify pool scope for the auto-user, all tasks that run with administrator access run under the same pool-wide auto-user account. In modo analogo, le attività eseguite senza privilegi di amministratore vengono eseguite anche con un unico account utente automatico a livello di pool.Similarly, tasks that run without administrator permissions also run under a single pool-wide auto-user account.

Nota

I due account utente automatici a livello di pool sono account separati.The two pool-wide auto-user accounts are separate accounts. Le attività in esecuzione con l'account amministrativo a livello di pool non possono condividere dati con quelle in esecuzione con l'account standard e viceversa.Tasks running under the pool-wide administrative account cannot share data with tasks running under the standard account, and vice versa.

Il vantaggio di eseguire attività con lo stesso account utente automatico consiste nel fatto che le attività sono in grado di condividere dati con altre attività in esecuzione nello stesso nodo.The advantage to running under the same auto-user account is that tasks are able to share data with other tasks running on the same node.

La condivisione di segreti tra le attività è uno scenario in cui l'esecuzione di attività con uno dei due account utente automatici a livello di pool è particolarmente utile.Sharing secrets between tasks is one scenario where running tasks under one of the two pool-wide auto-user accounts is useful. Si supponga ad esempio che un'attività di avvio richieda il provisioning di un segreto sul nodo che può essere usato da altre attività.For example, suppose a start task needs to provision a secret onto the node that other tasks can use. È possibile usare l'API di protezione dati di Windows (DPAPI), ma in questo caso sono necessari anche i privilegi di amministratore.You could use the Windows Data Protection API (DPAPI), but it requires administrator privileges. In alternativa, è possibile proteggere il segreto a livello di utente.Instead, you can protect the secret at the user level. Le attività in esecuzione con lo stesso account utente possono accedere al segreto senza accesso con privilegi elevati.Tasks running under the same user account can access the secret without elevated access.

Un altro scenario in cui può essere opportuno eseguire attività con un account utente automatico con ambito di pool è la condivisione di file di tipo MPI (Message Passing Interface).Another scenario where you may want to run tasks under an auto-user account with pool scope is a Message Passing Interface (MPI) file share. Una condivisione di file MPI è utile quando i nodi nell'attività MPI devono usare gli stessi dati di file.An MPI file share is useful when the nodes in the MPI task need to work on the same file data. Il nodo head crea una condivisione di file cui i nodi figlio possono accedere se sono in esecuzione con lo stesso account utente automatico.The head node creates a file share that the child nodes can access if they are running under the same auto-user account.

Il frammento di codice seguente imposta l'ambito dell'utente automatico sull'ambito di pool per un'attività in Batch .NET.The following code snippet sets the auto-user's scope to pool scope for a task in Batch .NET. Il livello di elevazione dei privilegi viene omesso, in modo che l'attività venga eseguita con l'account utente automatico standard a livello di pool.The elevation level is omitted, so the task runs under the standard pool-wide auto-user account.

task.UserIdentity = new UserIdentity(new AutoUserSpecification(scope: AutoUserScope.Pool));

Account utente non anonimiNamed user accounts

Quando si crea un pool, è possibile definire gli account utente non anonimi.You can define named user accounts when you create a pool. A un account utente non anonimo sono associati un nome e una password definiti dall'utente.A named user account has a name and password that you provide. Per un account utente non anonimo, è possibile specificare il livello di elevazione dei privilegi.You can specify the elevation level for a named user account. Per i nodi Linux, è anche possibile specificare una chiave privata SSH.For Linux nodes, you can also provide an SSH private key.

Un account utente non anonimo è presente in tutti i nodi del pool ed è disponibile per tutte le attività in esecuzione su tali nodi.A named user account exists on all nodes in the pool and is available to all tasks running on those nodes. In un pool è possibile definire un numero qualsiasi di utenti non anonimi.You may define any number of named users for a pool. Quando si aggiunge un'attività o una raccolta di attività, è possibile specificare che l'attività venga eseguita con uno degli account utente non anonimi definiti nel pool.When you add a task or task collection, you can specify that the task runs under one of the named user accounts defined on the pool.

Un account utente non anonimo è utile quando si vuole che tutte le attività in un processo vengano eseguite con lo stesso account utente, ma si vuole anche isolarle dalle attività in esecuzione contemporaneamente in altri processi.A named user account is useful when you want to run all tasks in a job under the same user account, but isolate them from tasks running in other jobs at the same time. È possibile ad esempio creare un utente non anonimo per ogni processo ed eseguire le attività di ogni processo con tale account.For example, you can create a named user for each job, and run each job's tasks under that named user account. Ogni processo può condividere un segreto con le proprie attività, ma non con attività in esecuzione in altri processi.Each job can then share a secret with its own tasks, but not with tasks running in other jobs.

È anche possibile usare un account utente non anonimo per eseguire un'attività che imposta le autorizzazioni in risorse esterne, ad esempio in condivisioni di file.You can also use a named user account to run a task that sets permissions on external resources such as file shares. Con un account utente non anonimo è possibile controllare l'identità dell'utente e usare tale identità per impostare le autorizzazioni.With a named user account, you control the user identity and can use that user identity to set permissions.

Gli account utente non anonimi consentono di abilitare il protocollo SSH senza password tra i nodi Linux.Named user accounts enable password-less SSH between Linux nodes. È possibile usare un account utente non anonimo con nodi Linux per cui è necessario eseguire attività a istanze multiple.You can use a named user account with Linux nodes that need to run multi-instance tasks. Ogni nodo nel pool può eseguire attività con un account utente definito nell'intero pool.Each node in the pool can run tasks under a user account defined on the whole pool. Per altre informazioni sulle attività a istanze multiple, vedere Usare le attività a istanze multiple per eseguire applicazioni MPI (Message Passing Interface) in Batch.For more information about multi-instance tasks, see Use multi-instance tasks to run MPI applications.

Creare account utente non anonimiCreate named user accounts

Per creare account utente non anonimi in Batch, aggiungere una raccolta di account utente al pool.To create named user accounts in Batch, add a collection of user accounts to the pool. I frammenti di codice seguenti illustrano come creare account utente non anonimi in .NET, Java e Python in un pool,The following code snippets show how to create named user accounts in .NET, Java, and Python. sia con privilegi di amministratore che senza.These code snippets show how to create both admin and non-admin named accounts on a pool. Gli esempi creano pool usando la configurazione del servizio cloud, ma si usa lo stesso approccio quando si crea un pool di Windows o Linux tramite la configurazione della macchina virtuale.The examples create pools using the cloud service configuration, but you use the same approach when creating a Windows or Linux pool using the virtual machine configuration.

Esempio per Batch .NET (Windows)Batch .NET example (Windows)

CloudPool pool = null;
Console.WriteLine("Creating pool [{0}]...", poolId);

// Create a pool using the cloud service configuration.
pool = batchClient.PoolOperations.CreatePool(
    poolId: poolId,
    targetDedicatedComputeNodes: 3,                                                         
    virtualMachineSize: "small",                                                
    cloudServiceConfiguration: new CloudServiceConfiguration(osFamily: "5"));   

// Add named user accounts.
pool.UserAccounts = new List<UserAccount>
{
    new UserAccount("adminUser", "xyz123", ElevationLevel.Admin),
    new UserAccount("nonAdminUser", "123xyz", ElevationLevel.NonAdmin),
};

// Commit the pool.
await pool.CommitAsync();

Esempio per Batch .NET (Linux)Batch .NET example (Linux)

CloudPool pool = null;

// Obtain a collection of all available node agent SKUs.
List<NodeAgentSku> nodeAgentSkus =
    batchClient.PoolOperations.ListNodeAgentSkus().ToList();

// Define a delegate specifying properties of the VM image to use.
Func<ImageReference, bool> isUbuntu1404 = imageRef =>
    imageRef.Publisher == "Canonical" &&
    imageRef.Offer == "UbuntuServer" &&
    imageRef.Sku.Contains("14.04");

// Obtain the first node agent SKU in the collection that matches
// Ubuntu Server 14.04. 
NodeAgentSku ubuntuAgentSku = nodeAgentSkus.First(sku =>
    sku.VerifiedImageReferences.Any(isUbuntu1404));

// Select an ImageReference from those available for node agent.
ImageReference imageReference =
    ubuntuAgentSku.VerifiedImageReferences.First(isUbuntu1404);

// Create the virtual machine configuration to use to create the pool.
VirtualMachineConfiguration virtualMachineConfiguration =
    new VirtualMachineConfiguration(imageReference, ubuntuAgentSku.Id);

Console.WriteLine("Creating pool [{0}]...", poolId);

// Create the unbound pool.
pool = batchClient.PoolOperations.CreatePool(
    poolId: poolId,
    targetDedicatedComputeNodes: 3,                                             
    virtualMachineSize: "Standard_A1",                                      
    virtualMachineConfiguration: virtualMachineConfiguration);                  

// Add named user accounts.
pool.UserAccounts = new List<UserAccount>
{
    new UserAccount(
        name: "adminUser",
        password: "xyz123",
        elevationLevel: ElevationLevel.Admin,
        linuxUserConfiguration: new LinuxUserConfiguration(
            uid: 12345,
            gid: 98765,
            sshPrivateKey: new Guid().ToString()
            )),
    new UserAccount(
        name: "nonAdminUser",
        password: "123xyz",
        elevationLevel: ElevationLevel.NonAdmin,
        linuxUserConfiguration: new LinuxUserConfiguration(
            uid: 45678,
            gid: 98765,
            sshPrivateKey: new Guid().ToString()
            )),
};

// Commit the pool.
await pool.CommitAsync();

Esempio per Batch JavaBatch Java example

List<UserAccount> userList = new ArrayList<>();
userList.add(new UserAccount().withName(adminUserAccountName).withPassword(adminPassword).withElevationLevel(ElevationLevel.ADMIN));
userList.add(new UserAccount().withName(nonAdminUserAccountName).withPassword(nonAdminPassword).withElevationLevel(ElevationLevel.NONADMIN));
PoolAddParameter addParameter = new PoolAddParameter()
        .withId(poolId)
        .withTargetDedicatedNodes(POOL_VM_COUNT)
        .withVmSize(POOL_VM_SIZE)
        .withCloudServiceConfiguration(configuration)
        .withUserAccounts(userList);
batchClient.poolOperations().createPool(addParameter);

Esempio per Batch PythonBatch Python example

users = [
    batchmodels.UserAccount(
        name='pool-admin',
        password='******',
        elevation_level=batchmodels.ElevationLevel.admin)
    batchmodels.UserAccount(
        name='pool-nonadmin',
        password='******',
        elevation_level=batchmodels.ElevationLevel.nonadmin)
]
pool = batchmodels.PoolAddParameter(
    id=pool_id,
    user_accounts=users,
    virtual_machine_configuration=batchmodels.VirtualMachineConfiguration(
        image_reference=image_ref_to_use,
        node_agent_sku_id=sku_to_use),
    vm_size=vm_size,
    target_dedicated=vm_count)
batch_client.pool.add(pool)

Eseguire un'attività con un account utente non anonimo con accesso con privilegi elevatiRun a task under a named user account with elevated access

Per eseguire un'attività come utente con privilegi elevati, impostarne la proprietà UserIdentity su un account utente non anonimo creato con la proprietà ElevationLevel impostata su Admin.To run a task as an elevated user, set the task's UserIdentity property to a named user account that was created with its ElevationLevel property set to Admin.

Questo frammento di codice specifica che l'attività deve essere eseguita con un account utente non anonimo.This code snippet specifies that the task should run under a named user account. Tale account utente è stato definito nel pool al momento della relativa creazione.This named user account was defined on the pool when the pool was created. In questo caso l'account utente non anonimo è stato creato con le autorizzazioni di amministratore:In this case, the named user account was created with admin permissions:

CloudTask task = new CloudTask("1", "cmd.exe /c echo 1");
task.UserIdentity = new UserIdentity(AdminUserAccountName);

Aggiornare il codice in base alla libreria client Batch più recenteUpdate your code to the latest Batch client library

Nella versione 2017-01-01.4.0 del servizio Batch è stata introdotta una modifica significativa, ovvero la proprietà runElevated disponibile nelle versioni precedenti è stata sostituita con la proprietà userIdentity.The Batch service version 2017-01-01.4.0 introduces a breaking change, replacing the runElevated property available in earlier versions with the userIdentity property. Le tabelle seguenti illustrano una semplice corrispondenza che consente di aggiornare il codice dalle versioni precedenti delle librerie client.The following tables provide a simple mapping that you can use to update your code from earlier versions of the client libraries.

Batch .NETBatch .NET

Versione precedenteIf your code uses... Versione aggiornataUpdate it to....
CloudTask.RunElevated = true; CloudTask.UserIdentity = new UserIdentity(new AutoUserSpecification(elevationLevel: ElevationLevel.Admin));
CloudTask.RunElevated = false; CloudTask.UserIdentity = new UserIdentity(new AutoUserSpecification(elevationLevel: ElevationLevel.NonAdmin));
CloudTask.RunElevated non specificatoCloudTask.RunElevated not specified Non sono necessari aggiornamentiNo update required

Batch JavaBatch Java

Versione precedenteIf your code uses... Versione aggiornataUpdate it to....
CloudTask.withRunElevated(true); CloudTask.withUserIdentity(new UserIdentity().withAutoUser(new AutoUserSpecification().withElevationLevel(ElevationLevel.ADMIN));
CloudTask.withRunElevated(false); CloudTask.withUserIdentity(new UserIdentity().withAutoUser(new AutoUserSpecification().withElevationLevel(ElevationLevel.NONADMIN));
CloudTask.withRunElevated non specificatoCloudTask.withRunElevated not specified Non sono necessari aggiornamentiNo update required

Batch PythonBatch Python

Versione precedenteIf your code uses... Versione aggiornataUpdate it to....
run_elevated=True user_identity=user, doveuser_identity=user, where
user = batchmodels.UserIdentity(
     auto_user=batchmodels.AutoUserSpecification(
          elevation_level=batchmodels.ElevationLevel.admin))
run_elevated=False user_identity=user, doveuser_identity=user, where
user = batchmodels.UserIdentity(
     auto_user=batchmodels.AutoUserSpecification(
          elevation_level=batchmodels.ElevationLevel.nonadmin))
run_elevated non specificatorun_elevated not specified Non sono necessari aggiornamentiNo update required

Passaggi successiviNext steps

Forum di BatchBatch Forum

Il forum di Azure Batch su MSDN consente di seguire discussioni su Batch e di inviare domande sul servizio.The Azure Batch Forum on MSDN is a great place to discuss Batch and ask questions about the service. Leggere i post aggiunti e inviare domande durante le procedure di sviluppo delle soluzioni Batch.Head on over for helpful pinned posts, and post your questions as they arise while you build your Batch solutions.