我在VSTS中的Azure Powershell任务中运行PowerShell脚本,该任务在DevTest实验室中启动多个Azure虚拟机,但首先启动域控制器,等待它启动,然后依次启动其他域控制器 .
我想并行启动所有其他的并且我尝试使用 Start-Job
这样做但是这会产生一个新的Powershell进程,它不会尝试这样的事情:
[cmdletbinding()]
param (
[ValidateSet("Start","Stop")][string]$Action,
$labName = "DevTestLab",
$labResourceGroup = "DevTestLabRG"
)
if ($Action -eq "Start") {
Write-Verbose "Starting the domain controller first"
Get-AzureRmResource | Where-Object {
$_.Name -match "dc" -and
$_.ResourceType -eq "Microsoft.Compute/virtualMachines" -and
$_.ResourceGroupName -match $labResourceGroup } | Start-AzureRmVM
Write-Verbose "Starting other machines in the lab as background jobs"
foreach ($AzureRMResource in Get-AzureRmResource |
Where-Object {
$_.Name -notmatch "dc" -and
$_.ResourceType -eq "Microsoft.Compute/virtualMachines" -and
$_.ResourceGroupName -match $labResourceGroup } )
{
Start-Job {
$myResource = $using:AzureRMResource
Start-AzureRMVM -Name $myResource.Name -ResourceGroupName $myResource.ResourceGroupName
}
}
# wait for all machines to start before exiting the session
Get-Job | Wait-Job
Get-Job | Remove-Job
}
我正在使用托管代理来运行脚本,因此我不能同时运行多个代理,并且据我所知,VSTS不支持并行任务 .
关于如何解决这个问题的任何想法?
2 回答
您也可以使用Azure CLI,而不是创建PowerShell脚本 . Azure CLI具有
vm start
和vm stop
命令,该命令采用ID列表 . 您还可以使用CLI查询所需的所有ID . 以下是一个简单的Bash片段,用于启动/停止id包含Test的所有vms .资料来源:Azure CLI 2.0: Quickly Start / Stop ALL VMs
您也可以通过Azure CLI任务使用带有
--no-wait
参数的az vm start命令进行尝试 .