我不完全确定如何将
Start-AzVM
cmdlet 与 AVD 会话主机一起使用。
我首先使用
Get-AzResourceGroup
将我的资源组分配给一个变量。由于 cmdlet 返回一个列表,因此我使用 foreach
循环来使用 Get-AzWvdHostPool
获取资源组内的主机池列表,并将返回值分配给另一个变量。
只有一个池,但 cmdlet 再次返回一个列表,因此使用另一个
foreach
列表对其进行迭代以获取会话主机的列表。这是使用 Get-AzWvdSessionHost
并将结果分配给另一个变量来完成的。
我专门寻找列为
Unavailable
的会议主持人。这是通过 if
块来完成的,用于查看当前迭代的会话主机对象的状态。如果匹配则执行Start-AzVM
。
我已经使用会话主机
.Id
和 .Name
属性尝试过此操作。对于.Name
,我尝试了两种方法。首先,使用完整属性:host-pool/host-name
,然后将其拆分为 /
并仅使用 host-name
部分。不管怎样,无论我使用 .Id
属性还是 .Name
属性(以任何方式),我都会收到相同的错误,尽管每种情况略有不同。
Start-AzVM: C:\Users\SnyderM\Development\AVD\scripts\AVD\avd-host-status.ps1:39:17
Line |
39 | … Start-AzVM -Name $hostName -ResourceGroupName $resourceGr …
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| The Resource 'Microsoft.Compute/virtualMachines/bcst970407.place' under resource group 'Resource-Group' was not found. For more details please go to
| https://aka.ms/ARMResourceNotFoundFix ErrorCode: ResourceNotFound ErrorMessage: The Resource 'Microsoft.Compute/virtualMachines/bcst970407.place' under resource group
| 'Resource-Group' was not found. For more details please go to https://aka.ms/ARMResourceNotFoundFix ErrorTarget: StatusCode: 404 ReasonPhrase: Not Found OperationID :
| b05fd38c-97c2-449a-964e-a9ee5adf9794
区别在于,当我使用完整的
.Name
属性时,而不是 'Microsoft.Compute/virtualMachines/bcst970407.place'
末尾的主机名,而是列出资源组:'Microsoft.Compute/virtualMachines/Resource-Group'. What I get from this is that splitting it on the
/`是正确的做法。但我又不确定。
脚本:
try {
Get-InstalledModule -Name Az
}
catch {
Write-Host "This script requires the Az module. Install it then re-run the script."
}
$resourceGroups = Get-AzResourceGroup | Where-Object { ($_.ResourceGroupName -like "Resource-Group") }
foreach ($resourceGroup in $resourceGroups.ResourceGroupName) {
#Write-Host $resourceGroup
$hostPoolObjects = Get-AzWvdHostPool -ResourceGroupName $resourceGroup
foreach ($pool in $hostPoolObjects.Name) {
#Write-Host " : $pool"
foreach ($sessionHost in (Get-AzWvdSessionHost -HostPoolName $pool -ResourceGroupName $resourceGroup)) {
$sessionName = $sessionHost.Name
$hostpool,$hostName = $sessionName.split('/')
$hostStatus = $sessionHost.Status
$hostId = $sessionHost.Id
#Write-Host " : $hostName"
if ($sessionHost.Status -eq "Unavailable") {
Start-AzVM -Name $hostName -ResourceGroupName $resourceGroup
#Start-AzVM -Id $hostId
}
}
}
}
我不知道它是否相关,但我发现其他有趣的事情是,如果我在使用主机 id 时将
-WhatIf
与 Start-AzVM
cmdlet 一起使用,输出会显示 id 的空字符串,而名称 is显示。
What if: Performing the operation "Start" on target "".
对
What if: Performing the operation "Start" on target "bcst880407.place".
或
What if: Performing the operation "Start" on target "Hostpool-0407/bcst970407.place".
Start-AzVM
是否可以与 AVD 会话主机一起使用?如果没有,我可以用什么方法来启动它们?
通过 Powershell 脚本启动 Azure 虚拟桌面会话主机
$sessionHost.Status -eq "Unavailable"
上面的脚本检查会话主机状态是否为“不可用”。但是,如果会话处于“断电”状态,则状态显示为“关闭”而不是“不可用”。这种差异也可能导致脚本中出现空输出。
这里是更新的 PowerShell
启动脚本 Azure Virtual Desktop session host
$resourceGroups = Get-AzResourceGroup | Where-Object { ($_.ResourceGroupName -like "Venkat") }
foreach ($rg in $resourceGroups) {
$hostPoolObjects = Get-AzWvdHostPool -ResourceGroupName $rg.ResourceGroupName
foreach ($hostPool in $hostPoolObjects) {
$sessionHosts = Get-AzWvdSessionHost -ResourceGroupName $rg.ResourceGroupName -HostPoolName $hostPool.Name
foreach ($sessionHost in $sessionHosts) {
if ($sessionHost.Status -eq "Shutdown") {
Write-Host "Starting Session: $($sessionHost.Name)"
Start-AzVM -Id $sessionHost.Id
} else {
Write-Host "Session name: $($sessionHost.Name) already in running state"
}
}
}
}
运行脚本后,
Azure Virtual Desktop
会话主机已成功启动。输出: