Invoke-WebRequest 진행률 숨기기
의 진행 상황 표시를 숨기려면 어떻게 해야 합니까?Invoke-WebRequest
나는 많은 연속적인 요청을 하고 나 자신의 요청을 가지고 있다.Write-Progress
제가 사용하는 디스플레이이기 때문에 매번 그 아래에 표시되는 내장 디스플레이는 필요 없습니다.
mshtml 결과(IE COM 오브젝트)를 사용하고 있습니다.Invoke-WebRequest
자동으로 전환이 안 됩니다.WebClient
WebClient 요청에서 mshtml 개체를 가져오는 방법에 대한 지침을 제공하지 않는 한, 또는 이와 유사한 작업을 수행합니다.
$progress Preference 변수를 사용합니다.다른 곳에서 편집하지 않은 경우 디폴트로는 'Continue' 값이 됩니다.이 값은 Powershell에게 진행률 바를 표시하도록 지시합니다.독자적인 커스텀 진행상황 표시가 있다고 하셨기 때문에 cmdlet 실행 후 바로 리셋하겠습니다.예를 들어 다음과 같습니다.
$ProgressPreference = 'SilentlyContinue' # Subsequent calls do not display UI.
Invoke-WebRequest ...
$ProgressPreference = 'Continue' # Subsequent calls do display UI.
Write-Progress ...
about_preference_variables의 프리퍼런스 변수에 대한 자세한 내용은 다음과 같습니다.$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.
스크립트 블록에 의해 예외(스크립트 종료 오류)가 발생하더라도 스크립트 블록의 진행 상황을 일시적으로 숨기고 스크립트 블록이 종료되면 진행 상황 프리퍼런스를 자동으로 복원하는 재사용 가능한 함수가 있습니다.
# 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
}
}
}
사용 예:
Invoke-WithoutProgress {
# Here $ProgressPreference is set to 'SilentlyContinue'
Invoke-WebRequest ...
}
# Now $ProgressPreference is restored
Write-Progress ...
주의:
- 그
New-Module
콜이 존재하기 때문에 스크립트블록이 에 전달됩니다.Invoke-WithoutProgress
새로운 범위에서는 실행되지 않습니다(주변수를 직접 수정하기 위해 필요함).ForEach-Object
의 스크립트 블록).상세한 것에 대하여는, 이 회답을 참조해 주세요.
언급URL : https://stackoverflow.com/questions/18770723/hide-progress-of-invoke-webrequest
'IT' 카테고리의 다른 글
NVARCHAR(MAX)의 최대 문자는 얼마입니까? (0) | 2023.04.08 |
---|---|
명령줄에서 스크립트를 실행하는 '보안 경고' 무시 (0) | 2023.04.08 |
새로운 예외 생성 및 발생 (0) | 2023.04.08 |
저장된 모든 행을 포함하는 기존 SQL Server 테이블의 INSERT 스크립트를 생성하려면 어떻게 해야 합니까? (0) | 2023.04.08 |
첫 번째 오류가 발생했을 때 PowerShell 스크립트를 중지하는 방법 (0) | 2023.04.08 |