Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Suppress information of Test-NetConnection

Tags:

powershell

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.

like image 941
Jan H Avatar asked Jan 04 '23 11:01

Jan H


2 Answers

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
like image 100
Mathias R. Jessen Avatar answered Jan 14 '23 06:01

Mathias R. Jessen


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.

like image 22
Ansgar Wiechers Avatar answered Jan 14 '23 07:01

Ansgar Wiechers