通过 Powershell 脚本启动 Azure 虚拟桌面会话主机

问题描述 投票:0回答:1

我不完全确定如何将

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 会话主机一起使用?如果没有,我可以用什么方法来启动它们?

azure powershell
1个回答
0
投票

通过 Powershell 脚本启动 Azure 虚拟桌面会话主机

$sessionHost.Status -eq "Unavailable"

上面的脚本检查会话主机状态是否为“不可用”。但是,如果会话处于“断电”状态,则状态显示为“关闭”而不是“不可用”。这种差异也可能导致脚本中出现空输出。 这里是更新的 PowerShell 启动脚本 Azure Virtual Desktop session host

enter image description here $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
会话主机已成功启动。

输出:


    

© www.soinside.com 2019 - 2024. All rights reserved.