Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在通过powershell运行quser命令时,有没有办法去掉字段_Powershell_Powershell 2.0_Powershell 3.0 - Fatal编程技术网

在通过powershell运行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命令显示中的字段数量。我想将此内容附加到电子邮件正文中。因此希望将

我正在从我的一个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命令显示中的字段数量。我想将此内容附加到电子邮件正文中。因此希望将其缩短

案例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