0

我正在尝试将 UPN 列表传递给一个函数,以在 Azure WVD 中查找分配给该 UPN 的所有会话主机(虚拟机)。我想将这些会话主机名称与我正在通过的列表中的 UPN 匹配,这超出了我目前的技能水平。感谢任何可以帮助我的人。

输入看起来像这样。

email1  
email2

输出看起来像这样。

vmname1  
vmname2  
othervmname1  
othervmname2  

我希望能够弄清楚的输出是创建一个数组或其他东西,其中有两列 id 具有如下输出:

email1 : vmname1  
email1 : vmname2  
email2 : othervmname1  
email2 : othervmname2  

我的代码如下。

Add-RdsAccount -DeploymentUrl "https://rdbroker.wvd.microsoft.com" | Out-Null
 
$upnlist = get-content -path c:\path\to\upnlist.txt
 
#Function to find the session hosts the user is a part of in the WVD Fall 2019 environment.
function Get-FallSessionName {
           
    $Tenants = "tenant,tenant2,tenant3"
    
    ForEach ($upn in $upnlist) {
       
        ForEach ($Tenant in $Tenants) {
           
            $Hostpools = (Get-RdsHostPool -TenantName $Tenant).HostPoolName
           
            foreach ($Hostpool in $Hostpools) {  
                    
                (Get-RdsSessionHost -TenantName $Tenant -HostPoolName $Hostpool | where-object {$_.AssignedUser -eq $upn}).SessionHostName)
            }
        }      
    }
    Return $SessionHostName
}
 
 
$2019SessionNames = Get-FallSessionName
 
$2019SessionNames | Out-GridView
4

1 回答 1

0

不幸的是,我无法尝试此功能并查看它是否按预期工作,我已经修改了您的代码并给了您一些提示。

重要我不确定 100% 的属性AssignedUserGet-RdsSessionHost返回一个UserPrincipalName. 您需要评估您的代码,以防它返回不同的内容。

试试看它是否有效:

Add-RdsAccount -DeploymentUrl "https://rdbroker.wvd.microsoft.com" | Out-Null
 
$upnlist = get-content -path c:\path\to\upnlist.txt

function Get-FallSessionName {
param(
    [string[]]$UserPrincipalName,
    [string[]]$Tenants
)

    ForEach ($Tenant in $Tenants)
    {
        $Hostpools = (Get-RdsHostPool -TenantName $Tenant).HostPoolName
        Foreach ($Hostpool in $Hostpools)
        {
            # This should find all the Hosts where the property 'AssignedUser' is equal to ANY
            # item on the 'UserPrincipalName' array.
            $sessionHosts = (Get-RdsSessionHost -TenantName $Tenant -HostPoolName $Hostpool |
                where-object {$_.AssignedUser -in $UserPrincipalName}).SessionHostName
            
            # Since Get-RdsSessionHost can return multiple SessionHostNames we need to
            # loop through the possible array $sessionHosts
            foreach($hostName in $sessionHosts)
            {
                # Here is where you can define how your object should look like

                [pscustomobject]@{
                    Tenant=$Tenant
                    HostPool=$Hostpool
                    SessionHostName=$hostName
                }
            }
        }
    }
}

# -> This is how your function should be called. Parameters should not be hardcoded inside a function
$2019SessionNames = Get-FallSessionName -UserPrincipalName $upnlist -Tenants 'tenant','tenant2','tenant3'
$2019SessionNames | Out-GridView

$2019SessionNames应该是这样的:

租户 主机池 会话主机名
租户1 主机池1 user.example@domain.com
租户2 主机池2 user.example2@domain.com
于 2021-04-28T14:52:24.070 回答