powershell - 从数组问题中获取特定信息

时间:2016-06-30 14:56:34

标签: powershell remote-desktop

我有一个小脚本,可以帮助我们环境中的用户隐藏设施中其他用户的会话(我在公司办公室工作,企业用户需要能够影响其他用户在不同站点的会话)

所以我得到了这个:

$servers = "server1, server2, server3, server4, server5"

#search for user in servers farm
foreach ($server in $servers) { 

$results = & qwinsta.exe $userid /server:$server 

    if ($results -ne $null) {

        write-host "User found in $server"

        $serverfound = $server

        write-host $results[1]

        $sessionid = $results[1] | Where-Object { $_ -is 0..99}

        write-host "Session ID is: $sessionid"
    }
}

但是,我无法从结果中获取会话ID,这是脚本的输出:

  

请等待我们在RDSfarm服务器上搜索x2adm

     

在server5中找到用户

     

rdp-tcp#0 x2adm 2有效

     

会话ID是:

我试图简单地获取输出中的数字并将其分配给$ sessionid,以便我可以完全自动化阴影过程。

任何帮助将不胜感激。提前谢谢。

2 个答案:

答案 0 :(得分:2)

我建议您改用ConvertFrom-String。解析像这样的数据真是太棒了。

ConvertFrom-String $results[1]

P1 : 
P2 : console
P3 : Stephen
P4 : 1
P5 : Active
P6 : 

因此我们的$SessionID值将在p4中找到(P#只是此cmdlet为其找到的字符串提供的任意名称)。

完整的命令是

$sessionID = convertfrom-string $results[1] | select -expand P4

这将与您当前的代码一起使用,无需进一步修改。

答案 1 :(得分:1)

检查$servers的数据类型,您将看到它是一个字符串而不是字符串数组,这就是您对它的处理方式。

PS C:\Users\matt> $servers = "server1, server2, server3, server4, server5"
PS C:\Users\matt> $servers.GetType().FullName

System.String

您可以从about_arrays了解有关数组基本概念的更多信息。您需要像这样定义它。

$servers = "server1", "server2", "server3", "server4", "server5" 

至于处理来自qwinsta I have an answer that converts data from that into a PowerShell object的输出。可能不需要那么极端,因为你没有使用与链接问题的操作完全相同的命令。要点是ConvertFrom-StringData是一个强大的cmdlet。