Invoke-WebRequest

从 Internet 上的网页中获取内容。

语法

StandardMethod (默认值)

Invoke-WebRequest
    [-Uri] <Uri>
    [-UseBasicParsing]
    [-WebSession <WebRequestSession>]
    [-SessionVariable <String>]
    [-AllowUnencryptedAuthentication]
    [-Authentication <WebAuthenticationType>]
    [-Credential <PSCredential>]
    [-UseDefaultCredentials]
    [-CertificateThumbprint <String>]
    [-Certificate <X509Certificate>]
    [-SkipCertificateCheck]
    [-SslProtocol <WebSslProtocol>]
    [-Token <SecureString>]
    [-UserAgent <String>]
    [-DisableKeepAlive]
    [-TimeoutSec <Int32>]
    [-Headers <IDictionary>]
    [-MaximumRedirection <Int32>]
    [-MaximumRetryCount <Int32>]
    [-RetryIntervalSec <Int32>]
    [-Method <WebRequestMethod>]
    [-Proxy <Uri>]
    [-ProxyCredential <PSCredential>]
    [-ProxyUseDefaultCredentials]
    [-Body <Object>]
    [-Form <IDictionary>]
    [-ContentType <String>]
    [-TransferEncoding <String>]
    [-InFile <String>]
    [-OutFile <String>]
    [-PassThru]
    [-Resume]
    [-SkipHttpErrorCheck]
    [-PreserveAuthorizationOnRedirect]
    [-SkipHeaderValidation]
    [<CommonParameters>]

StandardMethodNoProxy

Invoke-WebRequest
    [-Uri] <Uri>
    -NoProxy
    [-UseBasicParsing]
    [-WebSession <WebRequestSession>]
    [-SessionVariable <String>]
    [-AllowUnencryptedAuthentication]
    [-Authentication <WebAuthenticationType>]
    [-Credential <PSCredential>]
    [-UseDefaultCredentials]
    [-CertificateThumbprint <String>]
    [-Certificate <X509Certificate>]
    [-SkipCertificateCheck]
    [-SslProtocol <WebSslProtocol>]
    [-Token <SecureString>]
    [-UserAgent <String>]
    [-DisableKeepAlive]
    [-TimeoutSec <Int32>]
    [-Headers <IDictionary>]
    [-MaximumRedirection <Int32>]
    [-MaximumRetryCount <Int32>]
    [-RetryIntervalSec <Int32>]
    [-Method <WebRequestMethod>]
    [-Body <Object>]
    [-Form <IDictionary>]
    [-ContentType <String>]
    [-TransferEncoding <String>]
    [-InFile <String>]
    [-OutFile <String>]
    [-PassThru]
    [-Resume]
    [-SkipHttpErrorCheck]
    [-PreserveAuthorizationOnRedirect]
    [-SkipHeaderValidation]
    [<CommonParameters>]

CustomMethod

Invoke-WebRequest
    [-Uri] <Uri>
    -CustomMethod <String>
    [-UseBasicParsing]
    [-WebSession <WebRequestSession>]
    [-SessionVariable <String>]
    [-AllowUnencryptedAuthentication]
    [-Authentication <WebAuthenticationType>]
    [-Credential <PSCredential>]
    [-UseDefaultCredentials]
    [-CertificateThumbprint <String>]
    [-Certificate <X509Certificate>]
    [-SkipCertificateCheck]
    [-SslProtocol <WebSslProtocol>]
    [-Token <SecureString>]
    [-UserAgent <String>]
    [-DisableKeepAlive]
    [-TimeoutSec <Int32>]
    [-Headers <IDictionary>]
    [-MaximumRedirection <Int32>]
    [-MaximumRetryCount <Int32>]
    [-RetryIntervalSec <Int32>]
    [-Proxy <Uri>]
    [-ProxyCredential <PSCredential>]
    [-ProxyUseDefaultCredentials]
    [-Body <Object>]
    [-Form <IDictionary>]
    [-ContentType <String>]
    [-TransferEncoding <String>]
    [-InFile <String>]
    [-OutFile <String>]
    [-PassThru]
    [-Resume]
    [-SkipHttpErrorCheck]
    [-PreserveAuthorizationOnRedirect]
    [-SkipHeaderValidation]
    [<CommonParameters>]

CustomMethodNoProxy

Invoke-WebRequest
    [-Uri] <Uri>
    -CustomMethod <String>
    -NoProxy
    [-UseBasicParsing]
    [-WebSession <WebRequestSession>]
    [-SessionVariable <String>]
    [-AllowUnencryptedAuthentication]
    [-Authentication <WebAuthenticationType>]
    [-Credential <PSCredential>]
    [-UseDefaultCredentials]
    [-CertificateThumbprint <String>]
    [-Certificate <X509Certificate>]
    [-SkipCertificateCheck]
    [-SslProtocol <WebSslProtocol>]
    [-Token <SecureString>]
    [-UserAgent <String>]
    [-DisableKeepAlive]
    [-TimeoutSec <Int32>]
    [-Headers <IDictionary>]
    [-MaximumRedirection <Int32>]
    [-MaximumRetryCount <Int32>]
    [-RetryIntervalSec <Int32>]
    [-Body <Object>]
    [-Form <IDictionary>]
    [-ContentType <String>]
    [-TransferEncoding <String>]
    [-InFile <String>]
    [-OutFile <String>]
    [-PassThru]
    [-Resume]
    [-SkipHttpErrorCheck]
    [-PreserveAuthorizationOnRedirect]
    [-SkipHeaderValidation]
    [<CommonParameters>]

说明

Invoke-WebRequest cmdlet 将 HTTP 和 HTTPS 请求发送到网页或 Web 服务。 它将分析响应并返回链接、图像和其他重要 HTML 元素的集合。

PowerShell 3.0 中引入了此 cmdlet。

从 PowerShell 7.0 开始,Invoke-WebRequest 支持由环境变量定义的代理配置。 请参阅本文的注释部分。

重要

本文中的示例引用 contoso.com 域中的主机。 这是 Microsoft 在示例中使用的虚构域。 这些示例旨在说明如何使用 cmdlet。 但是,由于这些 contoso.com 站点不存在,因此示例不起作用。 将示例调整为你的环境中的主机。

示例

示例 1:发送 Web 请求

此示例使用 Invoke-WebRequest cmdlet 将 Web 请求发送到 Bing.com 网站。

$Response = Invoke-WebRequest -URI https://www.bing.com/search?q=how+many+feet+in+a+mile
$Response.InputFields | Where-Object {
    $_.name -like "* Value*"
} | Select-Object Name, Value
name       value
----       -----
From Value 1
To Value   5280

第一个命令发出请求,并将响应保存在 $Response 变量中。

第二个命令获取 Name 属性类似于 的任何 InputField"* Value"。 筛选后的结果通过管道传递给 Select-Object,用来选择 Name 和 Value 属性

示例 2:使用有状态 Web 服务

此示例显示如何将 Invoke-WebRequest cmdlet 与有状态的 Web 服务结合使用。

$Body = @{
    User = 'jdoe'
    password = 'P@S$w0rd!'
}
$LoginResponse = Invoke-WebRequest 'https://www.contoso.com/login/' -SessionVariable 'Session' -Body $Body -Method 'POST'

$Session

$ProfileResponse = Invoke-WebRequest 'https://www.contoso.com/profile/' -WebSession $Session

$ProfileResponse

第一次调用 Invoke-WebRequest 会发送登录请求。 该命令为 -SessionVariable 参数的值指定值“Session”,并将结果保存在变量中 $LoginResponse 。 命令完成后, $LoginResponse 变量包含对象 BasicHtmlWebResponseObject$Session 变量包含对象 WebRequestSession 。 这样用户就可以登录到该站点。

调用 $Session 本身显示 WebRequestSession 变量中的对象。

第二次调用提取 Invoke-WebRequest 用户的配置文件,这需要用户登录到站点。 存储在变量中的 $Session 会话数据用于向登录期间创建的站点提供会话 cookie。 结果保存在变量中 $ProfileResponse

对 的 $ProfileResponse 调用本身在变量中显示 the BasicHtmlWebResponseObject

示例 3:从网页获取链接

此示例获取网页中的链接。 它使用 Invoke-WebRequest cmdlet 获取网页内容。 然后,它使用返回的 的 BasicHtmlWebResponseObjectInvoke-WebRequestLinks 属性和每个链接的 Href 属性。

(Invoke-WebRequest -Uri "https://aka.ms/pscore6-docs").Links.Href

示例 4:使用请求页面中定义的编码将响应内容写入文件。

此示例使用 Invoke-WebRequest cmdlet 检索 PowerShell 文档页的网页内容。

$Response = Invoke-WebRequest -Uri "https://aka.ms/pscore6-docs"
$Stream = [System.IO.StreamWriter]::new('.\docspage.html', $false, $Response.Encoding)
try {
    $Stream.Write($Response.Content)
}
finally {
    $Stream.Dispose()
}

第一个命令检索页面并将响应对象保存在 $Response 变量中。

第二个命令创建用于 StreamWriter 将响应内容写入文件的命令。 响应对象的 Encoding 属性用于设置文件的编码

最后几个命令将 Content 属性写入文件,然后释放 StreamWriter.

请注意,如果 Web 请求不返回文本内容,则 Encoding 属性为 null

示例 5:提交多部分/表单数据文件

此示例使用 Invoke-WebRequest cmdlet 上传文件作为 multipart/form-data 提交。 文件 c:\document.txt 作为表单域 document 提交,其中 Content-Typetext/plain

$FilePath = 'c:\document.txt'
$FieldName = 'document'
$ContentType = 'text/plain'

$FileStream = [System.IO.FileStream]::new($filePath, [System.IO.FileMode]::Open)
$FileHeader = [System.Net.Http.Headers.ContentDispositionHeaderValue]::new('form-data')
$FileHeader.Name = $FieldName
$FileHeader.FileName = Split-Path -leaf $FilePath
$FileContent = [System.Net.Http.StreamContent]::new($FileStream)
$FileContent.Headers.ContentDisposition = $FileHeader
$FileContent.Headers.ContentType = [System.Net.Http.Headers.MediaTypeHeaderValue]::Parse($ContentType)

$MultipartContent = [System.Net.Http.MultipartFormDataContent]::new()
$MultipartContent.Add($FileContent)

$Response = Invoke-WebRequest -Body $MultipartContent -Method 'POST' -Uri 'https://api.contoso.com/upload'

示例 6:简化的多部分/表单数据提交

某些 API 需要 multipart/form-data 提交才能上传文件和混合内容。 此示例演示如何更新用户个人资料。

$Uri = 'https://api.contoso.com/v2/profile'
$Form = @{
    firstName  = 'John'
    lastName   = 'Doe'
    email      = 'john.doe@contoso.com'
    avatar     = Get-Item -Path 'c:\Pictures\jdoe.png'
    birthday   = '1980-10-15'
    hobbies    = 'Hiking','Fishing','Jogging'
}
$Result = Invoke-WebRequest -Uri $Uri -Method Post -Form $Form

个人资料表单需要以下字段:firstNamelastNameemailavatarbirthdayhobbies。 API 需要 avatar 域中提供用户个人资料图像。 该 API 还接受以同一形式提交多个 hobbies 条目。

创建 $Form HashTable 时,键名称将用作窗体字段名称。 默认情况下,HashTable 的值将转换为字符串。 如果存在 System.IO.FileInfo 值,则会提交文件内容。 如果存在数组或列表等集合,则会多次提交表单域。

通过在 Get-Item 键上使用 avatar,将 FileInfo 对象设置为值。 结果是jdoe.png的图像数据被提交。

将一个列表提供给 hobbies 键后,提交中每个列表项都会显示一次 hobbies 字段。

示例 7:从 Invoke-WebRequest 捕获非成功消息

Invoke-WebRequest 遇到非成功 HTTP 消息(404、500 等),它将不返回任何输出并引发终止错误。 若要捕获错误并查看 StatusCode 可以将执行括在 try/catch 块中。

try
{
    $Response = Invoke-WebRequest -Uri "www.microsoft.com/unkownhost"
    # This will only execute if the Invoke-WebRequest is successful.
    $StatusCode = $Response.StatusCode
}
catch
{
    $StatusCode = $_.Exception.Response.StatusCode.value__
}
$StatusCode
404

终止错误由 catch 块捕获,该块从 Exception 对象中检索 StatusCode。

参数

-AllowUnencryptedAuthentication

允许通过未加密的连接发送凭据和机密。 默认情况下,提供 Credential 或任何 Authentication 选项,其 Uri 开头不是 为 会导致 https:// 错误,并且请求将中止,以防止无意中通过未加密的连接以纯文本形式通信机密。 若要自行重写此行为,请提供 AllowUnencryptedAuthentication 参数。

警告

使用此参数不安全,不建议使用。 它仅用于与无法提供加密连接的旧系统兼容。 使用风险自负。

此功能已在 PowerShell 6.0.0 中添加。

参数属性

类型:SwitchParameter
默认值:None
支持通配符:False
不显示:False

参数集

(All)
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False

-Authentication

指定要用于请求的显式身份验证类型。 默认值为 None身份验证 参数不能与 UseDefaultCredentials 参数一起使用。

可用的身份验证选项:

  • None:这是未提供 身份验证 时的默认选项。 不会使用显式身份验证。
  • Basic:需要指定 Credential。 凭据将用于发送格式为 base64(user:password)的 RFC 7617 基本身份验证Authorization: Basic标头。
  • Bearer:需要指定 Token 参数。 使用提供的令牌发送 RFC 6750 Authorization: Bearer 标头。
  • OAuth:需要指定 Token 参数。 使用提供的令牌发送 RFC 6750 Authorization: Bearer 标头。

提供 Authentication 会重写提供给 Authorization 或包含在 WebSession 中的任何 标头。

此功能已在 PowerShell 6.0.0 中添加。

参数属性

类型:WebAuthenticationType
默认值:None
接受的值:None, Basic, Bearer, OAuth
支持通配符:False
不显示:False

参数集

(All)
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False

-Body

指定请求的正文。 正文是请求的内容,位于标头之后。 还可以通过管道将正文值传递给 Invoke-WebRequest

Body 参数可用于指定查询参数列表或指定响应的内容。

当输入是 GET 请求并且正文是 IDictionary (通常是哈希表)时,正文将作为查询参数添加到 URI 中。 对于其他请求类型(如 POST),将正文按标准的 name=value 格式设置为请求正文的值。

Body 参数也可以接受对象System.Net.Http.MultipartFormDataContent。 这有助于处理 multipart/form-data 请求。 为 Body 提供 MultipartFormDataContent 对象时,提供给 ContentTypeHeadersWebSession 参数的任何内容相关标头将由 MultipartFormDataContent 对象的内容标头重写。 此功能已在 PowerShell 6.0.0 中添加。

参数属性

类型:Object
默认值:None
支持通配符:False
不显示:False

参数集

(All)
Position:Named
必需:False
来自管道的值:True
来自管道的值(按属性名称):False
来自剩余参数的值:False

-Certificate

指定用于安全 Web 请求的客户端证书。 输入包含证书的变量或获取证书的命令或表达式。

若要查找证书,请使用 Get-PfxCertificate 或使用 Certificate (Get-ChildItem) 驱动器中的 Cert: cmdlet。 如果证书无效或没有足够的颁发机构,命令将失败。

参数属性

类型:X509Certificate
默认值:None
支持通配符:False
不显示:False

参数集

(All)
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False

-CertificateThumbprint

指定有权发送请求的用户帐户的数字公钥证书(X509)。 输入证书的证书指纹。

证书用于基于客户端证书的身份验证。 它们只能映射到本地用户帐户;它们不适用于域帐户。

若要获取证书指纹,请使用 PowerShell Get-Item 驱动器中的 Get-ChildItemCert: 命令。

注释

此功能目前仅在 Windows OS 平台上受支持。

参数属性

类型:String
默认值:None
支持通配符:False
不显示:False

参数集

(All)
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False

-ContentType

指定 Web 请求的内容类型。

如果省略此参数,并且请求方法是 POST,Invoke-WebRequest 将内容类型设置为 application/x-www-form-urlencoded。 否则,在调用中未指定内容类型。

Body 提供了 MultipartFormDataContent 对象时,将重写 ContentType

参数属性

类型:String
默认值:None
支持通配符:False
不显示:False

参数集

(All)
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False

-Credential

指定有权发送请求的用户帐户。 默认值为当前用户。

键入用户名(如 User01Domain01\User01),或输入由 cmdlet 生成的 Get-Credential 对象。

Credential 可以单独使用,也可以与某些 Authentication 参数选项结合使用。 单独使用时,仅当远程服务器发送身份验证质询请求时,它才会向远程服务器提供凭据。 与 Authentication 选项一起使用时,将显式发送凭据

凭据存储在 PSCredential 对象中,密码存储为 SecureString

注释

有关 SecureString 数据保护的详细信息,请参阅 SecureString 的安全性如何?

参数属性

类型:PSCredential
默认值:Current user
支持通配符:False
不显示:False

参数集

(All)
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False

-CustomMethod

指定用于 Web 请求的自定义方法。 如果终结点所需的请求方法不是 Method 的可用选项,则可以使用此参数方法CustomMethod 不能一起使用。

此示例向 API 发出 TEST HTTP 请求:

Invoke-WebRequest -uri 'https://api.contoso.com/widget/' -CustomMethod 'TEST'

此功能已在 PowerShell 6.0.0 中添加。

参数属性

类型:String
默认值:None
支持通配符:False
不显示:False
别名:厘米

参数集

CustomMethod
Position:Named
必需:True
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False
CustomMethodNoProxy
Position:Named
必需:True
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False

-DisableKeepAlive

指示 cmdlet 将 HTTP 标头中的 KeepAlive 值设置为 False。 默认情况下,KeepAlive 为 true trueKeepAlive 建立与服务器的持久连接,以促进后续请求。

参数属性

类型:SwitchParameter
默认值:None
支持通配符:False
不显示:False

参数集

(All)
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False

-Form

将字典转换为 multipart/form-data 提交。 Form 不能与 Body 一起使用。 如果使用 ContentType,则会忽略它

字典的键将用作表单域名称。 默认情况下,窗体值将转换为字符串值。

如果值为 System.IO.FileInfo 对象,则会提交二进制文件内容。 文件名作为 filename 属性提交。 MIME 类型设置为 application/octet-streamGet-Item 可用于简化 System.IO.FileInfo 对象的供应。

$Form = @{
    resume = Get-Item 'c:\Users\jdoe\Documents\John Doe.pdf'
}

如果值是集合类型(例如数组或列表),则字段会多次提交。 默认情况下,列表的值被视为字符串。 如果值为 System.IO.FileInfo 对象,则会提交二进制文件内容。 不支持嵌套集合。

$Form = @{
    tags     = 'Vacation', 'Italy', '2017'
    pictures = Get-ChildItem 'c:\Users\jdoe\Pictures\2017-Italy\'
}

在上面的示例中,表单中提供了三次 tags 字段,VacationItaly2017 各一次。 pictures 字段也将为 2017-Italy 文件夹中的每个文件提交一次。 文件夹中文件的二进制内容作为值提交。

此功能已在 PowerShell 6.1.0 中添加。

参数属性

类型:IDictionary
默认值:None
支持通配符:False
不显示:False

参数集

(All)
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False

-Headers

指定 Web 请求的标头。 输入哈希表或字典。

若要设置 UserAgent 标头,请使用 UserAgent 参数。 不能使用此参数指定 User-Agent 或 Cookie 标头。

与内容相关的标头,例如Content-Type,当为 Body 提供 MultipartFormDataContent 对象时,将被覆盖。

参数属性

类型:IDictionary
默认值:None
支持通配符:False
不显示:False

参数集

(All)
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False

-InFile

从文件获取 Web 请求的内容。 输入路径和文件名。 如果省略路径,则默认值为当前位置。

参数属性

类型:String
默认值:None
支持通配符:False
不显示:False

参数集

(All)
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False

-MaximumRedirection

指定在连接失败之前,PowerShell 将连接重定向到备用统一资源标识符(URI)的次数。 默认值为 5。 值为 0(零)会阻止所有重定向。

参数属性

类型:Int32
默认值:5
支持通配符:False
不显示:False

参数集

(All)
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False

-MaximumRetryCount

指定收到 400 到 599 之间的故障代码(含或 304)时,PowerShell 重试连接次数。 另请参阅 RetryIntervalSec 参数以指定重试次数。

参数属性

类型:Int32
默认值:None
支持通配符:False
不显示:False

参数集

(All)
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False

-Method

指定用于 Web 请求的方法。 此参数的可接受值为:

  • Default
  • Delete
  • Get
  • Head
  • Merge
  • Options
  • Patch
  • Post
  • Put
  • Trace

CustomMethod 参数可用于上面未列出的请求方法。

参数属性

类型:WebRequestMethod
默认值:None
接受的值:Default, Get, Head, Post, Put, Delete, Trace, Options, Merge, Patch
支持通配符:False
不显示:False

参数集

StandardMethod
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False
StandardMethodNoProxy
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False

-NoProxy

指示 cmdlet 不应使用代理访问目标。 需要绕过环境中配置的代理时,请使用此开关。 此功能已在 PowerShell 6.0.0 中添加。

参数属性

类型:SwitchParameter
默认值:None
支持通配符:False
不显示:False

参数集

StandardMethodNoProxy
Position:Named
必需:True
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False
CustomMethodNoProxy
Position:Named
必需:True
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False

-OutFile

指定此 cmdlet 保存响应正文的输出文件。 输入路径和文件名。 如果省略路径,则默认值为当前位置。 该名称被视为文本路径。 包含方括号([])的名称必须用单引号(')括起来。

默认情况下,Invoke-WebRequest 将结果返回到管道。 若要将结果发送到文件和管道,请使用 Passthru 参数。

参数属性

类型:String
默认值:None
支持通配符:False
不显示:False

参数集

(All)
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False

-PassThru

指示该 cmdlet 除了将结果写入文件外,还会返回结果。 仅当命令中也使用 OutFile 参数时,此参数才有效。

参数属性

类型:SwitchParameter
默认值:None
支持通配符:False
不显示:False

参数集

(All)
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False

-PreserveAuthorizationOnRedirect

指示 cmdlet 应在重定向之间保留 Authorization 标头(如果存在)。

默认情况下,cmdlet 在重定向之前会删除 Authorization 标头。 如果需要将标头发送到重定向位置,则指定此参数将禁用此逻辑。

此功能已在 PowerShell 6.0.0 中添加。

参数属性

类型:SwitchParameter
默认值:None
支持通配符:False
不显示:False

参数集

(All)
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False

-Proxy

指定请求的代理服务器,而不是直接连接到 Internet 资源。 输入网络代理服务器的 URI。

参数属性

类型:Uri
默认值:None
支持通配符:False
不显示:False

参数集

StandardMethod
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False
CustomMethod
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False

-ProxyCredential

指定有权使用 Proxy 参数指定的代理服务器的用户帐户。 默认值为当前用户。

键入用户名(如 User01Domain01\User01User@Domain.Com或输入对象 PSCredential (如 cmdlet 生成 Get-Credential 的对象)。

仅当命令中也使用 Proxy 参数时,此参数才有效。 不能在同一命令中使用 ProxyCredentialProxyUseDefaultCredentials 参数。

参数属性

类型:PSCredential
默认值:Current user
支持通配符:False
不显示:False

参数集

StandardMethod
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False
CustomMethod
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False

-ProxyUseDefaultCredentials

指示 cmdlet 使用当前用户的凭据访问由 Proxy 参数指定的代理服务器。

仅当命令中也使用 Proxy 参数时,此参数才有效。 不能在同一命令中使用 ProxyCredentialProxyUseDefaultCredentials 参数。

参数属性

类型:SwitchParameter
默认值:None
支持通配符:False
不显示:False

参数集

StandardMethod
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False
CustomMethod
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False

-Resume

尽最大努力尝试继续下载未完成的文件。 Resume 需要 OutFile

Resume 仅对本地文件和远程文件的大小进行操作,而不执行本地文件与远程文件相同的其他验证。

如果本地文件大小小于远程文件大小,则 cmdlet 会尝试恢复下载文件并将剩余的字节追加到文件末尾。

如果本地文件大小与远程文件大小相同,则不执行任何操作,cmdlet 会假定下载已完成。

如果本地文件大小大于远程文件大小,则会覆盖本地文件并重新下载整个远程文件。 此行为与在没有 Resume 的情况下使用 OutFile 相同。

如果远程服务器不支持恢复下载,则覆盖本地文件并重新下载整个远程文件。 此行为与在没有 Resume 的情况下使用 OutFile 相同。

如果本地文件不存在,则创建本地文件并下载整个远程文件。 此行为与在没有 Resume 的情况下使用 OutFile 相同。

此功能已在 PowerShell 6.1.0 中添加。

参数属性

类型:SwitchParameter
默认值:None
支持通配符:False
不显示:False

参数集

(All)
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False

-RetryIntervalSec

指定在收到 400 到 599 之间的故障代码(包括 304)时连接重试之间的间隔。 另请参阅 MaximumRetryCount 参数,了解如何指定重试次数

参数属性

类型:Int32
默认值:None
支持通配符:False
不显示:False

参数集

(All)
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False

-SessionVariable

指定此 cmdlet 为其创建 Web 请求会话并将其保存在值的变量。 输入没有美元符号($)符号的变量名称。

指定会话变量时,Invoke-WebRequest 创建 Web 请求会话对象,并将其分配给 PowerShell 会话中具有指定名称的变量。 命令完成后,即可在会话中使用变量。

与远程会话不同,Web 请求会话不是永久性连接。 它是一个对象,其中包含有关连接和请求的信息,包括 Cookie、凭据、最大重定向值和用户代理字符串。 可以使用它在 Web 请求之间共享状态和数据。

若要在后续 Web 请求中使用 Web 请求会话,请在 WebSession 参数的值中指定会话变量。 PowerShell 在建立新连接时使用 Web 请求会话对象中的数据。 若要替代 Web 请求会话中的值,请使用 cmdlet 参数,例如 UserAgentCredential。 参数值优先于 Web 请求会话中的值。

不能在同一命令中使用 SessionVariableWebSession 参数。

参数属性

类型:String
默认值:None
支持通配符:False
不显示:False
别名:SV

参数集

(All)
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False

-SkipCertificateCheck

跳过证书验证检查。 这包括所有验证,例如过期、吊销、受信任根机构等。

警告

使用此参数不安全,不建议使用。 此开关仅用于使用自签名证书对已知主机进行测试。 使用风险自负。

此功能已在 PowerShell 6.0.0 中添加。

参数属性

类型:SwitchParameter
默认值:None
支持通配符:False
不显示:False

参数集

(All)
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False

-SkipHeaderValidation

指示 cmdlet 应在未验证的情况下向请求添加标头。

此开关应用于需要不符合标准的标头值的站点。 指定此开关将禁用验证,以允许值在未经检查的情况下传递。 指定后,将添加所有标头而不进行验证。

此开关禁用传递给 ContentType、Headers 和 UserAgent 参数的值的验证

此功能已在 PowerShell 6.0.0 中添加。

参数属性

类型:SwitchParameter
默认值:None
支持通配符:False
不显示:False

参数集

(All)
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False

-SkipHttpErrorCheck

此参数会导致 cmdlet 忽略 HTTP 错误状态并继续处理响应。 错误响应被写入管道,就好像它们成功了一样。

此参数是在 PowerShell 7 中引入的。

参数属性

类型:SwitchParameter
默认值:False
支持通配符:False
不显示:False

参数集

(All)
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False

-SslProtocol

设置 Web 请求允许的 SSL/TLS 协议。 默认情况下,系统支持 SSL/TLS 协议。 SslProtocol 允许出于合规目的限制为特定协议。

这些值被定义为以标志为基础的枚举。 可以使用此参数将多个值组合在一起以设置多个标志。 可以将值作为值数组或这些值的逗号分隔字符串传递给 SslProtocol 参数。 该 cmdlet 将使用二进制 OR作合并这些值。 将值作为数组传递是最简单的选项,还允许对值使用 Tab 补全。 可能无法在所有平台上定义多个选项。

注释

在非 Windows 平台上,可能无法提供 TlsTls12 作为选项。 并非 Tls13 在所有作系统上都支持,需要根据每个作系统进行验证。

此功能已添加到 PowerShell 6.0.0 中,并在 PowerShell 7.1 中添加了对 Tls13 的支持。

参数属性

类型:WebSslProtocol
默认值:None
接受的值:Default, Tls, Tls11, Tls12
支持通配符:False
不显示:False

参数集

(All)
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False

-TimeoutSec

指定请求在超时之前可以等待多长时间。以秒为单位输入值。 默认值为0,指定无限期超时。

域名系统 (DNS) 查询最多可能需要 15 秒才能返回或超时。如果您的请求包含需要解析的主机名,并且您将 TimeoutSec 设置为大于零但小于 15 秒的值,则可能需要 15 秒或更长时间才能引发 WebException,并且您的请求超时。

参数属性

类型:Int32
默认值:0
支持通配符:False
不显示:False

参数集

(All)
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False

-Token

要包含在请求中的 OAuth 或持有者令牌。 某些 身份验证 选项需要 令牌。 它不能独立使用。

Token 采用包含令牌的 SecureString。 若要手动提供令牌,请使用以下命令:

Invoke-WebRequest -Uri $uri -Authentication OAuth -Token (Read-Host -AsSecureString)

此参数是在 PowerShell 6.0 中引入的。

参数属性

类型:SecureString
默认值:None
支持通配符:False
不显示:False

参数集

(All)
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False

-TransferEncoding

指定传输编码 HTTP 响应标头的值。 此参数的可接受值为:

  • Chunked
  • 压缩
  • Deflate
  • GZip
  • 身份

参数属性

类型:String
默认值:None
接受的值:chunked, compress, deflate, gzip, identity
支持通配符:False
不显示:False

参数集

(All)
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False

-Uri

指定将 Web 请求发送到的 Internet 资源的统一资源标识符(URI)。 输入 URI。 此参数仅支持 HTTP 或 HTTPS。

此参数是必需的。 参数名称 Uri 是可选的。

参数属性

类型:Uri
默认值:None
支持通配符:False
不显示:False

参数集

(All)
Position:0
必需:True
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False

-UseBasicParsing

此参数已弃用。 从 PowerShell 6.0.0 开始,所有 Web 请求仅使用基本分析。 此参数仅用于后向兼容性,任何对它的使用都不会影响 cmdlet 的运行。

参数属性

类型:SwitchParameter
默认值:None
支持通配符:False
不显示:False

参数集

(All)
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False

-UseDefaultCredentials

指示 cmdlet 使用当前用户的凭据发送 Web 请求。 这不能用于 身份验证凭据,并且可能无法在所有平台上使用。

参数属性

类型:SwitchParameter
默认值:None
支持通配符:False
不显示:False

参数集

(All)
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False

-UserAgent

指定 Web 请求的用户代理字符串。

默认用户代理类似于 Mozilla/5.0 (Windows NT 10.0; Microsoft Windows 10.0.15063; en-US) PowerShell/6.0.0,每个操作系统和平台都有细微的变化。

若要使用大多数 Internet 浏览器使用的标准用户代理字符串测试网站,请使用 PSUserAgent 类的属性,例如 Chrome、FireFox、InternetExplorer、Opera 和 Safari。

例如,以下命令使用了用于 Internet Explorer 的用户代理字符串:Invoke-WebRequest -Uri https://website.com/ -UserAgent ([Microsoft.PowerShell.Commands.PSUserAgent]::InternetExplorer)

参数属性

类型:String
默认值:None
支持通配符:False
不显示:False

参数集

(All)
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False

-WebSession

指定 Web 请求会话。 输入变量名称,包括美元符号($)。

若要替代 Web 请求会话中的值,请使用 cmdlet 参数,例如 UserAgentCredential。 参数值优先于 Web 请求会话中的值。 为 Content-Type 提供 MultipartFormDataContent 对象时,也会重写与内容相关的标头(如 )。

与远程会话不同,Web 请求会话不是永久性连接。 它是一个对象,其中包含有关连接和请求的信息,包括 Cookie、凭据、最大重定向值和用户代理字符串。 可以使用它在 Web 请求之间共享状态和数据。

若要创建 Web 请求会话,请在 命令的 Invoke-WebRequest 参数的值中输入变量名称(不含美元符号)。 Invoke-WebRequest 创建会话并将其保存在变量中。 在后续命令中,使用变量作为 WebSession 参数的值。

不能在同一命令中使用 SessionVariableWebSession 参数。

参数属性

类型:WebRequestSession
默认值:None
支持通配符:False
不显示:False

参数集

(All)
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False

CommonParameters

此 cmdlet 支持通用参数:-Debug、-ErrorAction、-ErrorVariable、-InformationAction、-InformationVariable、-OutBuffer、-OutVariable、-PipelineVariable、-ProgressAction、-Verbose、-WarningAction 和 -WarningVariable。 有关详细信息,请参阅 about_CommonParameters

输入

Object

可以通过管道将 Web 请求的正文传递给 Invoke-WebRequest

输出

BasicHtmlWebResponseObject

备注

从 PowerShell 6.0.0 开始,Invoke-WebRequest 仅支持基本分析。

有关详细信息,请参阅 BasicHtmlWebResponseObject

由于 .NET Core 3.1 中的更改,PowerShell 7.0 及更高版本使用 HttpClient.DefaultProxy 属性来确定代理配置。

此属性的值取决于平台:

  • Windows:从环境变量读取代理配置。 如果未定义这些变量,则该属性派生自用户的代理设置。
  • macOS:从环境变量读取代理配置。 如果未定义这些变量,则该属性将派生自系统的代理设置。
  • Linux:从环境变量读取代理配置。 如果未定义这些变量,则该属性将初始化绕过所有地址的未配置实例。

用于在基于 Windows 和 Unix 的平台上 DefaultProxy 初始化的环境变量包括:

  • HTTP_PROXY:HTTP 请求上使用的代理服务器的主机名或 IP 地址。
  • HTTPS_PROXY:HTTPS 请求上使用的代理服务器的主机名或 IP 地址。
  • ALL_PROXY:在 HTTP 和 HTTPS 请求 HTTP_PROXY 上使用的代理服务器的主机名或 IP 地址,以防是否 HTTPS_PROXY 定义或未定义。
  • NO_PROXY:应从代理中排除的主机名的逗号分隔列表。