Получить все неиспользуемые SessionHosts в развертывании службы удаленного рабочего стола - PullRequest
0 голосов
/ 08 октября 2018

Я пытаюсь получить все неиспользуемые SessionHosts в развертывании RDS.

В конце кода я получаю два списка со всеми 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

1 Ответ

0 голосов
/ 08 октября 2018

Чтобы найти элементы в одном array, которые не находятся в другом array, вы должны использовать Where-Object командлет и оператор сравнения, например -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
}

И для фильтрации неиспользуемых SessionHosts вы, вероятно, захотите использовать $RDSessionCollections

$unused = ($RDSessionCollections| Where {$used -NotContains $_})

вместо $RDSessionHost

$unused = ($RDSessionHost | Where {$used -NotContains $_})
...