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:
  • 197 Vote(s) - 3.45 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Hide progress of Invoke-WebRequest

#1
How can I hide the progress display of `Invoke-WebRequest`? I do a lot of successive requests and have my own `Write-Progress` display that I use, so I don't need the built-in one popping up underneath it every time.

I use the mshtml results (the IE COM object) that are created from the result of `Invoke-WebRequest` automatically, so I can't switch to a `WebClient` or something like that, unless someone provides instructions on how to get an mshtml object from a WebClient request.
Reply

#2
Use the $progressPreference variable. It should have a value of 'Continue' by default unless you've edited it elsewhere, which tells Powershell to display the progress bar. Since you mentioned that you have your own custom progress displays, I would reset it immediately after the cmdlet is executed. For example:

$ProgressPreference = 'SilentlyContinue' # Subsequent calls do not display UI.
Invoke-WebRequest ...
$ProgressPreference = 'Continue' # Subsequent calls do display UI.
Write-Progress ...

More info on preference variables at [about_preference_variables][1]. Here's the entry for $ProgressPreference:

$ProgressPreference
-------------------
Determines how Windows PowerShell responds to progress updates
generated by a script, cmdlet or provider, such as the progress bars
generated by the Write-Progress cmdlet. The Write-Progress cmdlet
creates progress bars that depict the status of a command.

Valid values:
Stop: Does not display the progress bar. Instead,
it displays an error message and stops executing.

Inquire: Does not display the progress bar. Prompts
for permission to continue. If you reply
with Y or A, it displays the progress bar.

Continue: Displays the progress bar and continues with
(Default) execution.

SilentlyContinue: Executes the command, but does not display
the progress bar.


[1]:

[To see links please register here]

Reply

#3
Here is a **reusable function** to temporarily hide the progress of any *script block* and automatically restore the progress preference when the script block ends, **even if an exception** (script-terminating error) is thrown by the script block.

~~~lang-sh
# Create an in-memory module so $ScriptBlock doesn't run in new scope
$null = New-Module {
function Invoke-WithoutProgress {
[CmdletBinding()]
param (
[Parameter(Mandatory)] [scriptblock] $ScriptBlock
)

# Save current progress preference and hide the progress
$prevProgressPreference = $global:ProgressPreference
$global:ProgressPreference = 'SilentlyContinue'

try {
# Run the script block in the scope of the caller of this module function
. $ScriptBlock
}
finally {
# Restore the original behavior
$global:ProgressPreference = $prevProgressPreference
}
}
}
~~~

**Usage example:**
~~~lang-sh
Invoke-WithoutProgress {
# Here $ProgressPreference is set to 'SilentlyContinue'
Invoke-WebRequest ...
}

# Now $ProgressPreference is restored
Write-Progress ...
~~~

**Notes:**

- The `New-Module` call is there so the script block passed to `Invoke-WithoutProgress` **doesn't run in a new scope** (allowing it to directly modify surrounding variables, similar to `ForEach-Object`'s script block). See [this answer][1] for more information.


[1]:

[To see links please register here]

Reply



Forum Jump:


Users browsing this thread:
1 Guest(s)

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