Create an account

Very important

  • To access the important data of the forums, you must be active in each forum and especially in the leaks and database leaks section, send data and after sending the data and activity, data and important content will be opened and visible for you.
  • You will only see chat messages from people who are at or below your level.
  • More than 500,000 database leaks and millions of account leaks are waiting for you, so access and view with more activity.
  • Many important data are inactive and inaccessible for you, so open them with activity. (This will be done automatically)


Thread Rating:
  • 364 Vote(s) - 3.46 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Redirecting output to $null in PowerShell, but ensuring the variable remains set

#1
I have some code:

$foo = someFunction

This outputs a warning message which I want to redirect to $null:

$foo = someFunction > $null

The problem is that when I do this, while successfully supressing the warning message, it also has the negative side-effect of NOT populating $foo with the result of the function.

How do I redirect the warning to $null, but still keep $foo populated?

Also, how do you redirect both standard output and standard error to null? (In Linux, it's `2>&1`.)
Reply

#2
This should work.

$foo = someFunction 2>$null
Reply

#3
Warning messages should be written using the `Write-Warning` cmdlet, which allows the warning messages to be suppressed with the `-WarningAction` parameter or the `$WarningPreference` automatic variable. A function needs to use `CmdletBinding` to implement this feature.

function WarningTest {
[CmdletBinding()]
param($n)

Write-Warning "This is a warning message for: $n."
"Parameter n = $n"
}

$a = WarningTest 'test one' -WarningAction SilentlyContinue

# To turn off warnings for multiple commads,
# use the WarningPreference variable
$WarningPreference = 'SilentlyContinue'
$b = WarningTest 'test two'
$c = WarningTest 'test three'
# Turn messages back on.
$WarningPreference = 'Continue'
$c = WarningTest 'test four'

To make it shorter at the command prompt, you can use `-wa 0`:

PS> WarningTest 'parameter alias test' -wa 0

Write-Error, Write-Verbose and Write-Debug offer similar functionality for their corresponding types of messages.
Reply

#4
If it's errors you want to hide you can do it like this

$ErrorActionPreference = "SilentlyContinue"; #This will hide errors
$someObject.SomeFunction();
$ErrorActionPreference = "Continue"; #Turning errors back on

Reply

#5
using a function:

function run_command ($command)
{
invoke-expression "$command *>$null"
return $_
}

if (!(run_command "dir *.txt"))
{
if (!(run_command "dir *.doc"))
{
run_command "dir *.*"
}
}
or if you like one-liners:

function run_command ($command) { invoke-expression "$command "|out-null; return $_ }

if (!(run_command "dir *.txt")) { if (!(run_command "dir *.doc")) { run_command "dir *.*" } }
Reply

#6
Recently, I had to shut up powershell on a Linux host, this wasn't that obvious to figure out. After back and forth I found out that wrapping a command in `$( )` and adding a explicit redirection after the wrapper works.

Anything else I tried, wouldn't - I still don't know why since the PowerShell Docs are of desirable quality (and full of inconsistency...)

To import all modules on startup, I added the following. This produced some stderr output by powershell that couldnt be put to rest by `ErrorAction` or redirection without using the wrapping...

If anyone could elaborate on why's that would be very appreciated.
```
# import installed modules on launch
$PsMods = $(Get-InstalledModule);
$($PsMods.forEach({ Import-Module -Name $_.Name -ErrorAction Ignore })) *> /dev/null
```
Reply

#7
I'd prefer this way to redirect standard output (native PowerShell)...

($foo = someFunction) | out-null

But this works too:

($foo = someFunction) > $null

To redirect just standard error after defining $foo with result of "someFunction", do

($foo = someFunction) 2> $null

This is effectively the same as mentioned above.

Or to redirect any standard error messages from "someFunction" and then defining $foo with the result:

$foo = (someFunction 2> $null)

To redirect both you have a few options:

2>&1>$null
2>&1 | out-null

---

**ADDENDUM:**

Please note that (Windows) powershell has many more streams than a linux based OS. Here's the [list from MS docs](

[To see links please register here]

):

[![enter image description here][1]][1]

Thus you can redirect *all* streams using the wildcard with `*>$null`, and you can also use a file instead of `$null`.

[1]:
Reply



Forum Jump:


Users browsing this thread:
1 Guest(s)

©0Day  2016 - 2023 | All Rights Reserved.  Made with    for the community. Connected through