我正在尝试让RDS部署中所有未使用的SessionHosts。
在代码的结尾,我得到了两个列表,其中包含所有SessionHosts和所有使用过的SessionHosts,我想比较这两个列表以获取所有未使用的主机。
为进行比较,我尝试了https://stackoverflow.com/a/6368667/6708104。
# ALL SessionHosts
$RDSessionHost = (Get-RDserver -Role "RDS-RD-SERVER" -ConnectionBroker $ConnectionBrooker).Server
Write-Host "Alle SessionHosts:" -ForegroundColor Green
# All SessionCollections
$RDSessionCollections = (Get-RDSessionCollection -ConnectionBroker $ConnectionBrooker).Collectionname
# ALL used SessionHosts
foreach($p in $RDSessionCollections){
$used = (Get-RDSessionHost -CollectionName $p -ConnectionBroker $ConnectionBrooker).SessionHost
}
#ALL unused SessionHosts
$unused = ($RDSessionHost | Where {$used -NotContains $_})
结果
ALL SessionHosts:
SessionHost1
SessionHost2
SessionHost12
SessionHost11
SessionHost10
SessionHost9
SessionHost6
SessionHost8
SessionHost5
SessionHost3
SessionHost4
SessionHost7
ALL USED SessionHosts:
SessionHost1
SessionHost2
SessionHost11
SessionHost10
SessionHost9
SessionHost6
SessionHost7
SessionHost5
SessionHost4
SessionHost3
ALL UNUSED SessionHosts:
SessionHost1
SessionHost2
SessionHost12
SessionHost11
SessionHost10
SessionHost9
SessionHost6
SessionHost8
SessionHost5
SessionHost3
SessionHost4
SessionHost7
但是只有两个未使用的空间:SessionHost8和SessionHost12
答案 0 :(得分:0)
要在一个array
中查找不在另一个array
中的项目,则应使用Where-Object
cmdlet和比较运算符,例如-contains
或-notcontains
。像这样:
$array1 = @('A','B','C','D','E','F')
$array2 = @('A','B','F')
$array1 | Where-Object {$array2 -notcontains $_ }
C
D
E
此外,在代码$used
中,变量始终只包含一项,因为您在每个foreach循环中都将其值覆盖。
# ALL used SessionHosts
foreach($p in $RDSessionCollections){
$used = (Get-RDSessionHost -CollectionName $p -ConnectionBroker $ConnectionBrooker).SessionHost
}
您可能要显式创建array variable
并将使用的主机值添加到其中。
# ALL used SessionHosts
$used = @()
foreach($p in $RDSessionCollections){
$used += (Get-RDSessionHost -CollectionName $p -ConnectionBroker $ConnectionBrooker).SessionHost
}
对于过滤未使用的SessionHost,您可能要使用$RDSessionCollections
$unused = ($RDSessionCollections| Where {$used -NotContains $_})
代替$RDSessionHost
$unused = ($RDSessionHost | Where {$used -NotContains $_})