我从我的一个powershell脚本运行quser命令并显示
PS C:\ Users \ Arun> QUSER
USERNAME SESSIONNAME ID STATE IDLE TIME LOGON TIME
Arun console 1 Active 1+01:58 01/06/2016 14:01
有没有办法限制quser命令显示中的no.of字段。我想将这些内容附加到电子邮件正文中。所以希望它缩短。
案例2:
多行输出如下所示:
USERNAME SESSIONNAME ID STATE IDLE TIME LOGON TIME
Arun console 1 Active 1+01:58 01/06/2016 14:01
ABC 1 DISC 1+01:58 01/06/2016 14:01
DEF 1 Active 1+01:58 01/06/2016 14:01
GHI console 1 DISC 1+01:58 01/06/2016 14:01
IJK 1 DISC 1+01:58 01/06/2016 14:01
尝试了其中一个解决方案中提供的修改后的代码。 但是,当sessionname为空值时,数据会向左移动。
USERNAME SESSIONNAME ID STATE IDLE TIME LOGON TIME
abc12367 2 Disc 2:08 5/20/2016 4:55 PM
def12367 3 Disc 4+03:55 6/9/2016 11:13 AM
>ghi12367 rdp-tcp#3 4 Active . 6/13/2016 10:00 AM
jkl12367 5 Disc 10 6/10/2016 3:54 PM
abc12367 7 Disc 2+23:56 5/19/2016 12:15 PM
mno12367 8 Disc 3+22:07 6/9/2016 4:52 PM
pqr12367 rdp-tcp#1 9 Active 12 6/9/2016 7:55 PM
stu12367 rdp-tcp#2 10 Active . 6/13/2016 10:35 AM
vwx12367 11 Disc 4:21 6/13/2016 10:38 AM
用于打印变量值的代码:
quser | select -Skip 1 | ForEach-Object {
$current = $_ -split '\s+'
$i = 0;
$username = $current[$i++].Trim('>')
if ($current.Length -eq 7)
{
$sessionname = $current[$i++]
}
else
{
$sessionname = $null
}
$1=$current[$i++]
$2=$current[$i++]
$3=$current[$i++]
$4=$current[$i++]
$5=$current[$i++]
$6=$current[$i++]
$7=$current[$i++]
write-host $1
write-host $2
write-host $3
write-host $4
write-host $5
write-host $6
write-host $7
}
你能帮我解决一下这个问题吗?
答案 0 :(得分:2)
试试这个
$quser = (quser) -replace '\s{2,}', ',' | ConvertFrom-Csv
$quser | select username, 'logon time'
# yields:
# USERNAME LOGON TIME
# -------- ----------
# >anthony.stringer 6/2/2016 7:36 AM
或转换为html
$quser | select username, 'logon time' | ConvertTo-Html | Set-Content C:\temp\test.html
start C:\temp\test.html
答案 1 :(得分:1)
你可以自己解析它。您必须跳过第一个条目,对其进行迭代并使用\s+
拆分字符串。现在,您可以使用数组索引访问所需的数据,这里是前两列的示例:
quser | select -Skip 1 | ForEach-Object {
$current = $_ -split '\s+'
$username = $current[0].Trim('>')
$sessionname = $current[1]
}
回答您的评论:
quser | select -Skip 1 | ForEach-Object {
$current = $_.Trim() -split '\s{2,}'
$i = 0;
$username = $current[$i++].Trim('>')
if ($current.Length -eq 6) # entry containing session name
{
$sessionname = $current[$i++]
}
else
{
$sessionname = $null
}
$id = $current[$i++]
$state = $current[$i++]
$idleTime = $current[$i++]
$LogonTime = $current[$i++]
return [PSCustomObject]@{
Username = $username
Sessionname = $sessionname
Id = $id
State = $state
IdleTime = $idleTime
LogonTime = $LogonTime
}
}