在通过powershell运行quser命令时,有没有办法去掉字段
我正在从我的一个powershell脚本运行quser命令,并显示 PS C:\Users\Arun>quser在通过powershell运行quser命令时,有没有办法去掉字段,powershell,powershell-2.0,powershell-3.0,Powershell,Powershell 2.0,Powershell 3.0,我正在从我的一个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命令显示中的字段数量。我想将此内容附加到电子邮件正文中。因此希望将
USERNAME SESSIONNAME ID STATE IDLE TIME LOGON TIME
Arun console 1 Active 1+01:58 01/06/2016 14:01
有没有办法限制quser命令显示中的字段数量。我想将此内容附加到电子邮件正文中。因此希望将其缩短
案例2:
具有多行的输出如下所示:
尝试了其中一个解决方案中提供的修改后的代码。 但是,当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
}
你能帮我解决这个问题吗?你可以自己分析。您必须跳过第一个条目,对其进行迭代,然后使用
\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
不错。我总是忘记从Csv转换过来的
:)非常感谢Anthony。Converto HTML会将输出输出到HTML视图吗,就像我之前尝试的那样,它会给我行数而不是数据。有什么建议吗?这对我帮助很大。一个小查询,当我在我的服务器上运行时,有些行的第二个字段为空,有些行的字段为值(例如:session name)。但是由于拆分是在一个或多个空间上进行的,字段中有空格的行将字段3设为字段2值。关于如何删除该问题的任何建议,只要在IF语句中检查<代码>当前$ <代码>的计数,并跳过该实例中第二属性的赋值。实际上,我们不能跳过该属性,因为第二字段具有某些行的值。(只需编辑您的问题并添加一个示例,我会尽力帮助您。嘿@Martin BrandI,非常感谢您的帮助,我刚刚意识到我使用了错误的变量,现在效果很好。上面的代码非常完美,非常棒。非常感谢您在这方面的改进。
$quser | select username, 'logon time' | ConvertTo-Html | Set-Content C:\temp\test.html
start C:\temp\test.html