#windows #powershell #remote-desktop #rdp
#сеанс #powershell #rdp #psexec
Вопрос:
Я пишу сценарий PowerShell, чтобы узнать идентификатор сеанса активного пользователя на удаленном компьютере, а затем запустить программу, используя этот идентификатор сеанса. Вот что у меня есть на данный момент.
$queryusers = $psexecdirectory ' \' $remotepc ' -u ' $domain '' $username ' -p ' $password ' query user'
$results = iex $queryusers
Приведенное выше работает нормально, при этом приведенные ниже примеры результатов сохраняются в переменной $results
USERNAME SESSIONNAME ID STATE IDLE TIME LOGON TIME
usr1 3 Disc 1:12 9/5/2013 11:59
AM
>usr2 rdp-tcp#1 4 Active . 9/5/2013 11:59
AM
Я использовал приведенное ниже, чтобы получить идентификатор, но номер в имени сеанса ‘rdp-ctp # 0’ изменяется, когда другой пользователь входит в систему, как в выводе выше, что делает его бесполезным:
$id = $results | Select-String "$rdp-tcp#0s (w )" |
Foreach {$_.Matches[0].Groups[1].Value}
Я не знаком с синтаксисом PowerShell и не смог найти сайт, на котором объясняются параметры форматирования. Может ли кто-нибудь мне помочь? И если вы знаете веб-сайт, где я могу узнать больше об извлечении фрагментов из строк? Заранее спасибо.
Комментарии:
1. Или используйте больше powershell (на самом деле WMI), и вам не нужны ни psexec, ни строки. gallery.technet.microsoft.com/scriptcenter /…
Ответ №1:
Попробуйте это:
$id = $results | ? { $_ -match '(d )s Active' } | % { $matches[1] }
Регулярное выражение (d )s Active
будет соответствовать ключевому слову «Active», которому предшествует число, а последующий цикл возвращает первое подматчи (т. Е. Число).
Комментарии:
1. Это сработало как шарм, спасибо. Я обязательно прочитаю о регулярных выражениях.