有什么方法可以通过 powershell 在 运行 quser 命令中删除字段
Is there any way to get rid of fields while running quser command via powershell
我是 运行 来自我的一个 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 字段 command.I 想将此内容附加到电子邮件中 body.So 想缩短它。
案例二:
多行输出如下所示:
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
}
=$current[$i++]
=$current[$i++]
=$current[$i++]
=$current[$i++]
=$current[$i++]
=$current[$i++]
=$current[$i++]
write-host
write-host
write-host
write-host
write-host
write-host
write-host
}
你能帮我解决这个问题吗?
你可以自己解析。您必须跳过第一个条目,遍历它并使用 \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
}
}
试试这个
$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
我是 运行 来自我的一个 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 字段 command.I 想将此内容附加到电子邮件中 body.So 想缩短它。
案例二:
多行输出如下所示:
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
}
=$current[$i++]
=$current[$i++]
=$current[$i++]
=$current[$i++]
=$current[$i++]
=$current[$i++]
=$current[$i++]
write-host
write-host
write-host
write-host
write-host
write-host
write-host
}
你能帮我解决这个问题吗?
你可以自己解析。您必须跳过第一个条目,遍历它并使用 \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
}
}
试试这个
$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