Suppress information of Test-NetConnection
Asked Answered
B

3

6

How can I supress the detailed information from Test-NetConnection -ComputerName localhost for a PowerShell session?

Test-NetConnection writes quite a bit of information to the console which is displayed in the top of the console, overwriting the progress bar.

enter image description here

The output can be suppressed by setting the -InformationLevel to Quiet like so It looked like the output could be supressed like with the -InformationLevel parameter, however it turns out that even with -InformationLevel to Quiet the information in the top of the console is shown.

Test-NetConnection -ComputerName localhost -InformationLevel Quiet

I would like to set the InformationLevel just once for the whole script, like you would suppress the progress bar when using Invoke-WebRequest.

$progressPreference = 'silentlyContinue'    # Subsequent calls do not display UI.
Invoke-WebRequest ...
$progressPreference = 'Continue'            # Subsequent calls do display UI.

To my knowledge there is no similar $InformationLevelPreference Test-NetConnection will listen to.

Bertberta answered 14/9, 2017 at 8:29 Comment(0)
G
8

An alternative to Ansgar's proposed solution would be to use the $PSDefaultParameterValues automatic variable:

PS C:\> Test-NetConnection localhost

ComputerName           : localhost
RemoteAddress          : ::1
InterfaceAlias         : Loopback Pseudo-Interface 1
SourceAddress          : ::1
PingSucceeded          : True
PingReplyDetails (RTT) : 0 ms

PS C:\> $PSDefaultParameterValues['Test-NetConnection:InformationLevel'] = 'Quiet'
PS C:\> Test-NetConnection localhost
True

Entries in $PSDefaultParameterValues dictionary have keys in the form of CommandName:ParameterName, and then the value is the parameter argument value you want to supply by default. You can incorporate wildcards as part of the CommandName part if necessary


The reason that you might have seen the progress bar go away when switching to -InformationLevel:Quiet is that issuing a single ICMP request to a loopback interface and returning a single boolean value happens so fast that the host application never has a chance to actually pick up the progress stream state change and display the progress overlay before returning to the prompt.

If you want to suppress the progress bar at the top during execution (regardless of how long the command is running), use the $ProgressPreference variable:

PS C:\> $ProgressPreference = 'SilentlyContinue'
PS C:\> Test-NetConnection localhost
Geof answered 14/9, 2017 at 9:45 Comment(9)
Nice one. I wasn't aware of this.Coronet
I did not know about $PSDefaultParameterValues either. I did find strange behaviour. Your solution works fine for Test-NetConnection -ComputerName localhost, but it it does not work with Test-NetConnection -ComputerName localhost -Port 80!Bertberta
@JanH Interesting - it works just fine here, what output are you getting other than $true/$false?Geof
Actually, withe the -Port parameter it works as expected. Using PSDefaultParameterValues renders the same behavior as using Test-NetConnection localhost -Port 80 -InformationLevel QuietBertberta
In the question I stated that Test-NetConnection -ComputerName localhost -InformationLevel Quiet suppresses the information shown on top of the window, but it does not. I think I have to rephrase the question.Bertberta
@JanH Sounds like you're trying to supress progress information being displayed by the host. There's a preference variable for that :-) I've updated the answerGeof
@MathiasR.Jessen Thanks for the suggestion! Somehow with Test-NetConnection the $ProgressPreference = 'SilentlyContinue only works if you set it in the console itself. When setting the progresspreference in a script it does not work.Bertberta
@JanH Try setting $global:ProgressPreference.Coronet
@AnsgarWiechers brilliant! that totally solves my problem. And yeah, I should read up on PowerShell variable scopes again. Thanks!Bertberta
C
3

Wrap Test-NetConnection in a function and use a global variable for your preference.

$NetConnectionVerbosity = 'Quiet'

function Test-CustomNetConnection {
    [CmdletBinding()]
    Param(
        [Parameter(Mandatory=$false)]
        [string]$ComputerName = 'localhost',

        [Parameter(Mandatory=$false)]
        [string]$InformationLevel = $script:NetConnectionVerbosity
    )

    Test-NetConnection -ComputerName $ComputerName -InformationLevel $InformationLevel
}

Test-CustomNetConnection

You could supersede Test-NetConnection with a custom function and an alias:

$NetConnectionVerbosity = 'Quiet'

function Test-CustomNetConnection {
    [CmdletBinding()]
    Param(
        [Parameter(Mandatory=$false)]
        [string]$ComputerName = 'localhost',

        [Parameter(Mandatory=$false)]
        [string]$InformationLevel = $script:NetConnectionVerbosity
    )

    $f = Get-Command -Name 'Test-NetConnection' -CommandType Function
    & $f -ComputerName $ComputerName -InformationLevel $InformationLevel
}

New-Alias -Name 'Test-NetConnection' -Value 'Test-CustomNetConnection'

Test-NetConnection

The above defines a custom function that gets and invokes the original Test-NetConnection function, then defines an alias Test-NetConnection for the custom function. Since aliases take precedence over functions invocations of Test-NetConnection calls will now invoke Test-CustomNetConnection, which in turn invokes the original Test-NetConnection with the desired parameters.

Creating a proxy function might also be an option.

Coronet answered 14/9, 2017 at 8:36 Comment(1)
Good idea. In my case there is a 3rd party installation script which uses Test-NetConnection. I cannot change that script so I am looking for a solution where I can change the behavior of Test-NetConnection in another way. I do not want to supress the output of the installation script completely either because it has some valuable information.Bertberta
E
1

Six years later... add -WarningAction SilentlyContinue

Explicative answered 4/9 at 16:41 Comment(1)
As it’s currently written, your answer is unclear. Please edit to add additional details that will help others understand how this addresses the question asked. You can find more information on how to write good answers in the help center.Soria

© 2022 - 2024 — McMap. All rights reserved.