使用 Azure Batch PowerShell cmdlet,可以执行和编写许多常见 Batch 任务脚本。 本文将简要介绍可用于管理 Batch 帐户和处理 Batch 资源(例如池、作业和任务)的 cmdlet。
有关 Batch cmdlet 的完整列表和详细的 cmdlet 语法,请参阅 Azure Batch cmdlet 参考。
建议经常更新Azure PowerShell模块,以利用服务更新和增强功能。
先决条件
安装和配置Azure PowerShell模块。 若要安装特定的Azure Batch模块(如预发行模块),请参阅PowerShell 库。
运行 Connect-AzAccount -Environment AzureChinaCloud cmdlet 命令以连接到你的订阅(Azure Batch cmdlet 包含在 Azure 资源管理器 模块中):
Connect-AzAccount -Environment AzureChinaCloud注册到 Batch 提供程序命名空间。 每个订阅只需执行一 次此操作。
Register-AzResourceProvider -ProviderNamespace Microsoft.Batch
管理 Batch 帐户和密钥
创建批处理帐户
New-AzBatchAccount 在指定的资源组中创建 Batch 帐户。 如果还没有资源组,请运行 New-AzResourceGroup cmdlet 创建一个资源组。 在 Location 参数中指定Azure区域之一,例如“中国北部 3”。 例如:
New-AzResourceGroup -Name MyBatchResourceGroup -Location "China North 3"
然后,在资源组中创建 Batch 帐户。 在<中>指定帐户的名称,以及资源组的位置和名称。 创建 Batch 帐户可能需要一些时间才能完成。 例如:
New-AzBatchAccount -AccountName <account_name> -Location "China North 3" -ResourceGroupName <res_group_name>
注释
Batch 帐户名称对于资源组的Azure区域必须唯一,包含 3 到 24 个字符,并且仅使用小写字母和数字。
获取帐户访问密钥
Get-AzBatchAccountKeys 显示与Azure Batch帐户关联的访问密钥。 例如,运行以下命令以获取所创建的帐户的主密钥和辅助密钥。
$Account = Get-AzBatchAccountKeys -AccountName <account_name>
$Account.PrimaryAccountKey
$Account.SecondaryAccountKey
生成新的访问密钥
New-AzBatchAccountKey 为Azure Batch帐户生成新的主帐户或辅助帐户密钥。 例如,若要为 Batch 帐户生成新的主密钥,请键入:
New-AzBatchAccountKey -AccountName <account_name> -KeyType Primary
注释
若要生成新的辅助密钥,请为 KeyType 参数指定“Secondary”。 必须单独重新生成主密钥和辅助密钥。
删除 Batch 帐户
Remove-AzBatchAccount 删除 Batch 帐户。 例如:
Remove-AzBatchAccount -AccountName <account_name>
出现提示时,请确认要删除帐户。 帐户删除可能需要一些时间才能完成。
创建 BatchAccountContext 对象
可以使用共享密钥身份验证或Microsoft Entra身份验证对 Batch 资源进行身份验证。 若要使用 Batch PowerShell cmdlet 进行身份验证,请先创建一个 BatchAccountContext 对象来存储帐户凭据或标识。 将 BatchAccountContext 对象传递到使用 BatchContext 参数的 cmdlet 中。
共享密钥身份验证
$context = Get-AzBatchAccountKeys -AccountName <account_name>
注释
默认情况下,帐户的主密钥用于身份验证,但可以通过更改 BatchAccountContext 对象的 KeyInUse 属性来显式选择要使用的密钥: $context.KeyInUse = "Secondary"
Microsoft Entra 身份验证
$context = Get-AzBatchAccount -AccountName <account_name>
创建和修改 Batch 资源
使用 Cmdlet(例如 New-AzBatchPool、 New-AzBatchJob 和 New-AzBatchTask )在 Batch 帐户下创建资源。 有相应的 Get- 和 Set- cmdlet 更新现有资源的属性,以及 Remove- cmdlet 以删除 Batch 帐户下的资源。
使用其中许多 cmdlet 时,除了传递 BatchContext 对象之外,还需要创建或传递包含详细资源设置的对象,如以下示例所示。 有关更多示例,请参阅每个 cmdlet 的详细帮助。
创建 Batch 池
创建或更新 Batch 池时,请指定 配置。 通常应使用虚拟机配置来配置池,该虚拟机配置可以让你指定 Azure 虚拟机市场中列出的受支持 Linux 或 Windows VM 映像之一,或者提供已准备的自定义映像。 云服务配置池仅提供Windows计算节点,不支持所有 Batch 功能。
运行 New-AzBatchPool 时,在 PSVirtualMachineConfiguration 或 PSCloudServiceConfiguration 对象中传递操作系统设置。 例如,以下代码片段使用虚拟机配置创建了一个 Batch 池,其中的计算节点大小为 Standard_A1,映像为 Ubuntu Server 20.04-LTS。 此处, VirtualMachineConfiguration 参数将 $configuration 变量指定为 PSVirtualMachineConfiguration 对象。 BatchContext 参数将以前定义的变量$context指定为 BatchAccountContext 对象。
$imageRef = New-Object -TypeName "Microsoft.Azure.Commands.Batch.Models.PSImageReference" -ArgumentList @("UbuntuServer","Canonical","20.04-LTS")
$configuration = New-Object -TypeName "Microsoft.Azure.Commands.Batch.Models.PSVirtualMachineConfiguration" -ArgumentList @($imageRef, "batch.node.ubuntu 20.04")
New-AzBatchPool -Id "mypspool" -VirtualMachineSize "Standard_a1" -VirtualMachineConfiguration $configuration -AutoScaleFormula '$TargetDedicated=4;' -BatchContext $context
新池中计算节点的目标数由自动缩放公式计算。 在这种情况下,公式只是 $TargetDedicated=4,表示池中的计算节点数最多为 4。
查询池、作业、任务及其他相关详细信息
使用 cmdlet(如 Get-AzBatchPool、 Get-AzBatchJob 和 Get-AzBatchTask )查询在 Batch 帐户下创建的实体。
查询数据
例如,可以使用 Get-AzBatchPools 来查找您的池。 默认情况下,如果已在 $context中存储 BatchAccountContext 对象,则此查询会查询帐户下的所有池:
Get-AzBatchPool -BatchContext $context
使用 OData 筛选器
可以使用 Filter 参数提供 OData 筛选器,以便仅查找感兴趣的对象。 例如,您可以查找所有 ID 以“myPool”开头的池:
$filter = "startswith(id,'myPool')"
Get-AzBatchPool -Filter $filter -BatchContext $context
此方法不如在本地管道中使用“Where-Object”那么灵活。 但是,查询将直接发送到 Batch 服务,以便所有筛选都发生在服务器端,从而节省 Internet 带宽。
使用 Id 参数
OData 筛选器的替代方法是使用 Id 参数。 若要查询 ID 为“myPool”的特定池,请执行以下操作:
Get-AzBatchPool -Id "myPool" -BatchContext $context
ID 参数仅支持完全 ID 搜索;不是通配符或 OData 样式筛选器。
使用 MaxCount 参数
默认情况下,每个 cmdlet 最多返回 1000 个对象。 如果达到此限制,请优化筛选器以返回更少的对象,或使用 MaxCount 参数显式设置最大值。 例如:
Get-AzBatchTask -MaxCount 2500 -BatchContext $context
若要删除上限,请将 MaxCount 设置为 0 或更少。
使用 PowerShell 管道
批处理 cmdlet 使用 PowerShell 管道在各个 cmdlet 之间传递数据。 这与指定参数的效果相同,但更易于使用多个实体。
例如,查找并显示帐户下的所有任务:
Get-AzBatchJob -BatchContext $context | Get-AzBatchTask -BatchContext $context
重启(重新启动)池中的每个计算节点:
Get-AzBatchComputeNode -PoolId "myPool" -BatchContext $context | Restart-AzBatchComputeNode -BatchContext $context
应用程序包管理
应用程序包 提供了将应用程序部署到池中的计算节点的简化方法。 使用 Batch PowerShell cmdlet,可以在 Batch 帐户中上传和管理应用程序包,并将包版本部署到计算节点。
重要
必须将Azure 存储帐户链接到 Batch 帐户才能使用应用程序包。
创建 应用程序:
New-AzBatchApplication -AccountName <account_name> -ResourceGroupName <res_group_name> -ApplicationId "MyBatchApplication"
添加 应用程序包:
New-AzBatchApplicationPackage -AccountName <account_name> -ResourceGroupName <res_group_name> -ApplicationId "MyBatchApplication" -ApplicationVersion "1.0" -Format zip -FilePath package001.zip
设置应用程序 的默认版本 :
Set-AzBatchApplication -AccountName <account_name> -ResourceGroupName <res_group_name> -ApplicationId "MyBatchApplication" -DefaultVersion "1.0"
列出 应用程序的包
$application = Get-AzBatchApplication -AccountName <account_name> -ResourceGroupName <res_group_name> -ApplicationId "MyBatchApplication"
$application.ApplicationPackages
删除 应用程序包
Remove-AzBatchApplicationPackage -AccountName <account_name> -ResourceGroupName <res_group_name> -ApplicationId "MyBatchApplication" -ApplicationVersion "1.0"
删除 应用程序
Remove-AzBatchApplication -AccountName <account_name> -ResourceGroupName <res_group_name> -ApplicationId "MyBatchApplication"
注释
删除应用程序之前,必须先删除应用程序的所有应用程序包版本。 如果尝试删除当前具有应用程序包的应用程序,将收到“冲突”错误。
部署应用程序包
创建池时,可以指定一个或多个应用程序包进行部署。 在创建池时指定某个包后,该包会在每个节点加入池时部署到该节点上。 当节点重新启动或重装映像时,也会部署软件包。
创建池时,指定 -ApplicationPackageReference 选项,以便在节点加入池时将应用程序包部署到池中的节点上。 首先,创建 PSApplicationPackageReference 对象,并使用要部署到池计算节点的应用程序 ID 和包版本对其进行配置:
$appPackageReference = New-Object Microsoft.Azure.Commands.Batch.Models.PSApplicationPackageReference
$appPackageReference.ApplicationId = "MyBatchApplication"
$appPackageReference.Version = "1.0"
现在创建该池,并将包引用对象指定为 ApplicationPackageReferences 选项的参数:
New-AzBatchPool -Id "PoolWithAppPackage" -VirtualMachineSize "Small" -VirtualMachineConfiguration $configuration -BatchContext $context -ApplicationPackageReferences $appPackageReference
可以在 “将应用程序部署到包含 Batch 应用程序包的计算节点”中找到有关应用程序包的详细信息。
更新资源池的应用程序包
若要更新分配给现有池的应用程序,请先创建具有所需属性(应用程序 ID 和包版本)的 PSApplicationPackageReference 对象:
$appPackageReference = New-Object Microsoft.Azure.Commands.Batch.Models.PSApplicationPackageReference
$appPackageReference.ApplicationId = "MyBatchApplication"
$appPackageReference.Version = "2.0"
接下来,从 Batch 获取池,清除任何现有包,添加新包引用,并使用新的池设置更新 Batch 服务:
$pool = Get-AzBatchPool -BatchContext $context -Id "PoolWithAppPackage"
$pool.ApplicationPackageReferences.Clear()
$pool.ApplicationPackageReferences.Add($appPackageReference)
Set-AzBatchPool -BatchContext $context -Pool $pool
你现在已经更新了 Batch 服务中池的属性。 但是,若要实际将新的应用程序包部署到池中的计算节点,必须重启或重置这些节点的映像。 可以使用以下命令重启池中的每个节点:
Get-AzBatchComputeNode -PoolId "PoolWithAppPackage" -BatchContext $context | Restart-AzBatchComputeNode -BatchContext $context
小窍门
可以将多个应用程序包部署到池中的计算节点。 如果要添加应用程序包而不是替换当前部署的包,请省略 $pool.ApplicationPackageReferences.Clear() 上述行。
后续步骤
- 查看 Azure Batch cmdlet 参考,了解详细的 cmdlet 语法和示例。
- 了解如何 使用 Batch 应用程序包将应用程序部署到计算节点。