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

powershell - Grab specific info from array issue

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

所以我得到了这个:

$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,这是脚本的输出:

Please wait while we search for x2adm on the RDSfarm Servers

User found in server5

rdp-tcp#0 x2adm 2 Active

Session ID is:

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

如有任何帮助,我们将不胜感激。提前致谢。

检查 $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。可能不需要那么极端,因为您没有使用与链接问题的 Op 完全相同的命令。重点是 ConvertFrom-StringData 是一个强大的 cmdlet。

我建议您改用 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

这将适用于您当前的代码,无需进一步修改。