【问题标题】:Extract session ID from psexec / PowerShell query user command从 psexec / PowerShell 查询用户命令中提取会话 ID
【发布时间】:2013-09-06 03:48:02
【问题描述】:

我正在编写一个 PowerShell 脚本来找出远程计算机上活动用户的会话 ID,然后使用该会话 ID 启动一个程序。这是我目前所拥有的。

$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

我使用下面的代码来获取 ID,但是会话名称“rdp-ctp#0”上的数字会在其他用户登录时发生变化,就像上面的输出一样,使其无用:

$id = $results | Select-String "$rdp-tcp#0\s+(\w+)" |
                 Foreach {$_.Matches[0].Groups[1].Value}

我不熟悉 PowerShell 语法,也找不到解释格式化选项的网站。有人可以帮我吗?如果您知道一个网站,我可以在其中了解更多关于从字符串中提取 sn-ps 的信息?提前致谢。

【问题讨论】:

标签: session powershell rdp psexec


【解决方案1】:

试试这个:

$id = $results | ? { $_ -match '(\d+)\s+Active' } | % { $matches[1] }

正则表达式(\d+)\s+Active 将匹配关键字“Active”前面有一个数字,随后的循环返回第一个子匹配项(即数字)。

【讨论】:

  • 这很有魅力,谢谢。我会确保阅读有关正则表达式的内容。
猜你喜欢
  • 1970-01-01
  • 2011-07-17
  • 1970-01-01
  • 1970-01-01
  • 2011-08-03
  • 1970-01-01
  • 2018-03-25
  • 2014-08-09
  • 1970-01-01
相关资源
最近更新 更多