获取远程桌面服务部署中所有未使用的 SessionHost
Get all unused SessionHosts in a Remote Desktop Service Deployment
我正在尝试获取 RDS 部署中所有未使用的 SessionHost。
在代码的末尾,我得到了两个列表,其中包含所有 SessionHost 和所有已使用的 SessionHost,我想比较这两个列表以获取所有未使用的主机。
为了比较,我尝试了 .
# 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
要在一个 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 $_})
我正在尝试获取 RDS 部署中所有未使用的 SessionHost。
在代码的末尾,我得到了两个列表,其中包含所有 SessionHost 和所有已使用的 SessionHost,我想比较这两个列表以获取所有未使用的主机。
为了比较,我尝试了 .
# 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
要在一个 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 $_})