2016-08-22 2 views
0

Мой сценарий должен получить информацию о соединении TCP для VNC и сказать мне, когда состояние соединения ESTABLISHED. Я застрял на попытке получить возвращаемое значение True при использовании Select-String -Quiet.Select-String -Quiet не возвращается True

PS C:\> $vnc = netstat -ab | select-string "winvnc4.exe" -context 1,0 
PS C:\> $vnc 

    TCP 0.0.0.0:5800   User:0    LISTENING 
> [winvnc4.exe] 
    TCP 0.0.0.0:5900   User:0    LISTENING 
> [winvnc4.exe] 
    TCP [::]:5800    User:0    LISTENING 
> [winvnc4.exe] 
    TCP [::]:5900    User:0    LISTENING 
> [winvnc4.exe] 

PS C:\> $vnc | Select-String "LISTENING" -quiet 

PS C:\> $vnc | Select-String -Pattern "LISTENING" -quiet 

PS C:\> $vnc | Select-String "LISTENING" -simplematch -quiet 

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

+0

Ваш код работает, как ожидалось для меня: я вижу «True» возвращается. Вы опустили какой-либо код, какой бы незначительной он ни был? –

+0

Это все. Я даже закрыл ISE и снова открыл Администратор (как это было в первый раз, когда я пытался), и он все еще ничего не возвращал. 'PS C: \> get-host | выберите Версия Версия ------- 5.0.10586.494' – Clark

ответ

1

Ваш первый Select-String создает список MatchInfo объектов. Информация, которую вы используете, хранится в свойстве Context. Вам нужно расширить это, прежде чем вы сможете запустить еще один Select-String.

$vnc | Select-Object -Expand Context | 
    Select-Object -Expand PreContext | 
    Select-String 'LISTENING' -SimpleMatch -Quiet 

На PowerShell v3 и выше вы можете использовать member enumeration, чтобы сделать это немного более компактный:

$vnc | ForEach-Object { $_.Context.PreContext } | 
    Select-String 'LISTENING' -SimpleMatch -Quiet 
+0

Это работает! Спасибо! – Clark

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