Как получить вывод двух разных команд в двух столбцах на powershell? - PullRequest
0 голосов
/ 10 января 2020

Предположим, у меня есть две команды: 1) Get-Date 2) netstat -aon | findstr 20484 | Measure-Object -line

Как выполнить эти две команды в al oop со временем ожидания 60 секунд? В выходном файле результаты этих двух команд должны быть напечатаны в двух разных столбцах, например:

Date and Time         Netstat
2/2/2020 00:10          15
2/2/2020 00:11          20

Заранее спасибо!

Ответы [ 3 ]

0 голосов
/ 10 января 2020

Попробуйте это:

(netstat -aon | findstr 20484 | Measure-Object -line | Select-Object @{l="Date";e={(Get-Date)}}, * | Format-Table | Out-String).Trim()

while( $true ) {

    sleep -Seconds 60

    (netstat -aon | findstr 20484 | Measure-Object -line | Select-Object @{l="Date";e={(Get-Date)}}, *  | Format-Table -HideTableHeaders | Out-String).Trim()

}
0 голосов
/ 10 января 2020

Или используйте более PowerShelly вместо findstr:

$maxLoops = 5   # set a max to the loop
for ($i = 0; $i -lt $maxLoops; $i++) {
    [PsCustomObject]@{
        'Date and Time' = Get-Date
        'Netstat'       = (netstat -aon | Select-String 20484).Count
    }
    Start-Sleep -Seconds 60
}
0 голосов
/ 10 января 2020

Вы можете сделать что-то вроде следующего:

while (1) {
    [PsCustomObject]@{
        'Date and Time' = Get-Date -Format 'M/d/yyyy HH:mm'
        'NetStat' = netstat -aon | findstr 20484 |
                    Measure-Object -Line | Select -Expand Lines
    }
    sleep 60
}

Объяснение:

1 в условии while всегда возвращает true, поэтому l oop никогда не закончится, если не будет разбито вручную.

Measure-Object -Line возвращает объект TextMeasureInfo. Поскольку вам нужно только количество строк из этого вывода, вам нужно получить значение свойства Lines. Это делается по трубопроводу Select -Expand Lines.

Параметр -Format Get-Date позволяет вводить представление в формате строки при условии, что разрешен нужный формат.

[PsCustomObject] - ускоритель типов для пользовательского объекта. Это дает возможность создавать заголовки / свойства, которые вы хотите, предоставляя связанные с ними значения. Значения и / или свойства могут быть добавлены во время объявления или позже.

Синтаксис @{} окружает таблицу ha sh. Цель таблицы ha sh - хранить пары ключ / значение. Это упрощает создание быстрого объекта, поскольку PowerShell v3.

sleep является псевдонимом для Start-Sleep . Он может принимать -Seconds или -Milliseconds с -Seconds в качестве привязки параметра по умолчанию, когда предоставляется только значение.


Если вы не хотите, чтобы l oop - go на неопределенное время вы можете добавить счетчик, например, так: l oop 5 раз:

$count = 5
while ($count--) {
    [PsCustomObject]@{
        'Date and Time' = Get-Date -Format 'M/d/yyyy HH:mm'
        'NetStat' = netstat -aon | findstr 20484 |
                    Measure-Object -Line | Select -Expand Lines
    }
    sleep 60
}

Я не знаю, ищете ли вы номер порта или идентификатор процесса. Поскольку любой из них теоретически может быть в вашем выводе, вы можете рассмотреть этот случай. Если вы ищете порт, я бы использовал findstr :20484 вместо этого. Если вам нужен только идентификатор процесса, я бы использовал netstat -ano | Where {$_ -match '\s20484'}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...