2016-06-02 1 views
1

Я бег команды Quser от одного моего Powershell сценария и отображаетЕсть ли способ избавиться от полей во время выполнения команды Quser с помощью PowerShell

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 

Есть ли способ ограничить поля no.of на дисплее команды quser. Я хотел бы прикрепить этот контент к телу электронной почты. Поэтому он хотел бы сократить его.

Случай 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 

Пытались модифицированный код, предоставленный в одном из решений. Но, однако, данные сдвигаются влево, когда существует пустое значение для имени сеанса.

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 

} 

Не могли бы вы мне помочь в решении вопроса?

ответ

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 
    } 
} 
+0

Это очень помогло мне. Небольшой запрос, когда я запускаю его на своем сервере, есть несколько строк, у которых второе поле пустым, а некоторые строки имеют поля со значениями (например, имя сеанса). Но так как разделение выполняется на одном или нескольких пространство, строки, которые имеют пробел в поле, получают поле 3 как значение поля2. Любое предложение о том, как избавиться от этой проблемы? – user2075017

+0

Просто проверьте счетчик '$ current' внутри оператора if и пропустите присвоение второго свойства в этом случае. –

+0

Мы не можем фактически пропустить свойство, так как второе поле имеет значения для некоторых строк. :( – user2075017

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 
+0

Ницца. Я всегда забываю о 'ConvertFrom-Csv' :) –

+0

Спасибо alth Anthony.will contverto-HTML дает результат HTML-представлению, так как, когда я пытался раньше, он использовал, чтобы дать мне количество строк строк вместо данных. Любое предложение? – user2075017

 Смежные вопросы

  • Нет связанных вопросов^_^