Отключить пользователя RDS в зависимости от имени пользователя. - PullRequest
0 голосов
/ 25 мая 2018

Я пытаюсь создать сценарий, который может принудительно отключать пользователей в среде фермы серверов RDS.Есть 1 из 4 RDS-серверов, на которые пользователи могут войти, и я пытаюсь сделать это, чтобы вы запустили сценарий, введите имя пользователя, и это заставит пользователя выйти из системы.Пока что у меня есть:

import-module remotedesktop
$user = read-host -prompt 'Enter Username you want to disconnect'
$sid = Get-RDUserSession | Where-Object -filter {$_.UserName -eq $user} | format-wide -Property UnifiedSessionID
$server = Get-RDUserSession | Where-Object -filter {$_.UserName -eq $user} | format-wide -Property HostServer
Invoke-RDUserLogoff -HostServer "$server" -UnifiedSessionID $sid

Единственная проблема с этим в последней строке - ему не нравится переменная $sid в качестве входных данных для этого элемента.Если я наберу write-output $sid, он отобразит правильный UnifiedSessionID номер.

Я мог бы сделать это совсем не так, но мне просто нужен способ отключить сеансы пользователя на основе ввода имени пользователя при появлении запроса.

Ответы [ 3 ]

0 голосов
/ 25 мая 2018

Проблема в том, что вы никогда не получите хранилище UnifiedSessionID с широким форматом

Используйте select -ExpandProperty

import-module remotedesktop

$user = read-host -prompt 'Enter Username you want to disconnect'

$sid = Get-RDUserSession | Where-Object -filter {$_.UserName -eq $user} | select -ExpandProperty UnifiedSessionID

$server = Get-RDUserSession | Where-Object -filter {$_.UserName -eq $user} | select -ExpandProperty HostServer

Invoke-RDUserLogoff -HostServer "$server" -UnifiedSessionID $sid
0 голосов
/ 26 мая 2018

Я мог бы сделать это совсем не так

Действительно:

  • Format-* командлеты предназначены только для получения результата для отображения .

    • Никогда использовать их для программной обработки .
  • Для программной обработки используйте Select-Object:

    • Используйте Select-Object <prop1>, ... для извлечения нескольких свойств как пользовательский объект .
    • Используйте Select-Object -ExpandProperty <prop> для извлечения одного значения свойства .

Полезный ответ Фредерика Бонно показывает, как это сделать в вашем случае.

0 голосов
/ 25 мая 2018

Переменная $sid загружается с данными, тип данных которых является типом данных последнего действия в конвейере, т. Е. format-wide.Таким образом, тип данных $sid может быть что-то вроде Microsoft.PowerShell.Commands.Internal.Format.FormatStartData.

Проверить это можно, выполнив команду $sid | get-member сразу после загрузки $sid.

Может случиться так, что аргумент -UnifiedSessionID для Invoke-RDUserLogoff должен быть строкой, а $sid не является string

. Вам придется разыграть $sidна string если это так

...