相关文章推荐
踏实的蟠桃  ·  SpringAMQP 消息转换器 - ...·  3 年前    · 
会开车的滑板  ·  wpf controls - WPF: ...·  3 年前    · 
有腹肌的烈酒  ·  如何为绑定到WPF ...·  3 年前    · 
曾经爱过的皮蛋  ·  gcc - could not read ...·  3 年前    · 
打篮球的海豚  ·  Jupyter nbconvert ...·  3 年前    · 
[-WebSession ] [-SessionVariable ] [-AllowUnencryptedAuthentication] [-Authentication ] [-Credential ] [-UseDefaultCredentials] [-CertificateThumbprint ] [-Certificate ] [-SkipCertificateCheck] [-SslProtocol ] [-Token ] [-UserAgent ] [-DisableKeepAlive] [-TimeoutSec ] [-Headers ] [-MaximumRedirection ] [-MaximumRetryCount ] [-RetryIntervalSec ] [-Method ] [-Proxy ] [-ProxyCredential ] [-ProxyUseDefaultCredentials] [-Body ] [-Form ] [-ContentType ] [-TransferEncoding ] [-InFile ] [-OutFile ] [-PassThru] [-Resume] [-SkipHttpErrorCheck] [-PreserveAuthorizationOnRedirect] [-SkipHeaderValidation] []
Invoke-WebRequest
      [-UseBasicParsing]
      [-Uri] <Uri>
      [-HttpVersion <Version>]
      [-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>]
      -NoProxy
      [-Body <Object>]
      [-Form <IDictionary>]
      [-ContentType <String>]
      [-TransferEncoding <String>]
      [-InFile <String>]
      [-OutFile <String>]
      [-PassThru]
      [-Resume]
      [-SkipHttpErrorCheck]
      [-PreserveAuthorizationOnRedirect]
      [-SkipHeaderValidation]
      [<CommonParameters>]
Invoke-WebRequest
      [-UseBasicParsing]
      [-Uri] <Uri>
      [-HttpVersion <Version>]
      [-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>]
      -CustomMethod <String>
      [-Proxy <Uri>]
      [-ProxyCredential <PSCredential>]
      [-ProxyUseDefaultCredentials]
      [-Body <Object>]
      [-Form <IDictionary>]
      [-ContentType <String>]
      [-TransferEncoding <String>]
      [-InFile <String>]
      [-OutFile <String>]
      [-PassThru]
      [-Resume]
      [-SkipHttpErrorCheck]
      [-PreserveAuthorizationOnRedirect]
      [-SkipHeaderValidation]
      [<CommonParameters>]
Invoke-WebRequest
      [-UseBasicParsing]
      [-Uri] <Uri>
      [-HttpVersion <Version>]
      [-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>]
      -CustomMethod <String>
      -NoProxy
      [-Body <Object>]
      [-Form <IDictionary>]
      [-ContentType <String>]
      [-TransferEncoding <String>]
      [-InFile <String>]
      [-OutFile <String>]
      [-PassThru]
      [-Resume]
      [-SkipHttpErrorCheck]
      [-PreserveAuthorizationOnRedirect]
      [-SkipHeaderValidation]
      [<CommonParameters>]

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

此 cmdlet 是在 PowerShell 3.0 中引入的。

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

本文中的示例引用域中的 contoso.com 主机。 这是 Microsoft 用于示例的虚构域。 这些示例旨在演示如何使用 cmdlet。 但是,由于 contoso.com 站点不存在,因此这些示例不起作用。 根据环境中的主机改编示例。

示例 1:发送 Web 请求

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

$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 属性类似于 "* Value" 的任何 InputField 。 筛选的结果通过管道传递到 Select-Object 以选择 “名称” 和“ 值” 属性。

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

此示例演示如何将 Invoke-WebRequest cmdlet 与有状态 Web 服务一起使用。

$LoginParameters = @{
    Uri             = 'https://www.contoso.com/login/'
    SessionVariable = 'Session'
    Method          = 'POST'
    Body            = @{
        User     = 'jdoe'
        Password = 'P@S$w0rd!'
$LoginResponse = Invoke-WebRequest @LoginParameters
$ProfileResponse = Invoke-WebRequest 'https://www.contoso.com/profile/' -WebSession $Session

对 的第一次调用 Invoke-WebRequest 发送登录请求。 命令将 SessionVariable 参数的值 Session 指定为 的值。 命令完成后, $LoginResponse 变量包含 BasicHtmlWebResponseObject , $Session 变量包含 WebRequestSession 对象。 这会将用户记录到站点中。

对 的第二个 Invoke-WebRequest 调用提取用户的配置文件,这要求用户登录到站点。 存储在 变量中的 $Session 会话数据向登录期间创建的站点提供会话 Cookie。

示例 3:从网页获取链接

此示例获取网页中的链接。 它使用 Invoke-WebRequest cmdlet 获取网页内容。 然后,它使用返回的 BasicHtmlWebResponseObject Invoke-WebRequest 的 Links 属性和每个链接的 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 upload a file 作为 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

配置文件窗体需要以下字段:firstName、、lastName、emailavatar、 birthday和 hobbies。 API 要求在 字段中提供 avatar 用户配置文件图片的图像。 API 还接受以同一窗体提交的多个 hobbies 条目。

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

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

通过向 hobbies 键提供列表,每个 hobbies 列表项的提交中都存在一次 字段。

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

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

$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

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

示例 8:同时下载多个文件

该 Invoke-WebRequest cmdlet 一次只能下载一个文件。 以下示例使用 Start-ThreadJob 创建多个线程作业,以同时下载多个文件。

$baseUri = 'https://github.com/PowerShell/PowerShell/releases/download'
$files = @(
        Uri = "$baseUri/v7.3.0-preview.5/PowerShell-7.3.0-preview.5-win-x64.msi"
        OutFile = 'PowerShell-7.3.0-preview.5-win-x64.msi'
        Uri = "$baseUri/v7.3.0-preview.5/PowerShell-7.3.0-preview.5-win-x64.zip"
        OutFile = 'PowerShell-7.3.0-preview.5-win-x64.zip'
        Uri = "$baseUri/v7.2.5/PowerShell-7.2.5-win-x64.msi"
        OutFile = 'PowerShell-7.2.5-win-x64.msi'
        Uri = "$baseUri/v7.2.5/PowerShell-7.2.5-win-x64.zip"
        OutFile = 'PowerShell-7.2.5-win-x64.zip'
$jobs = @()
foreach ($file in $files) {
    $jobs += Start-ThreadJob -Name $file.OutFile -ScriptBlock {
        $params = $using:file
        Invoke-WebRequest @params
Write-Host "Downloads started..."
Wait-Job -Job $jobs
foreach ($job in $jobs) {
    Receive-Job -Job $job
	

示例 9:跳过标头验证

默认情况下, Invoke-WebRequest cmdlet 验证具有标准定义值格式的已知标头的值。 以下示例演示此验证如何引发错误,以及如何使用 SkipHeaderValidation 参数来避免验证允许无效格式值的终结点的值。

$Uri = 'https://httpbin.org/headers'
$InvalidHeaders = @{
    'If-Match' = '12345'
Invoke-WebRequest -Uri $Uri -Headers $InvalidHeaders
Invoke-WebRequest -Uri $Uri -Headers $InvalidHeaders -SkipHeaderValidation
Invoke-WebRequest: The format of value '12345' is invalid.
StatusCode        : 200
StatusDescription : OK
Content           : {
                      "headers": {
                        "Host": "httpbin.org",
                        "If-Match": "12345",
                        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Microsoft Windows 10.0.19044; en-US) PowerShell/7.2.5",
                        "X-Amzn-Trace-Id": �
RawContent        : HTTP/1.1 200 OK
                    Date: Mon, 08 Aug 2022 16:24:24 GMT
                    Connection: keep-alive
                    Server: gunicorn/19.9.0
                    Access-Control-Allow-Origin: *
                    Access-Control-Allow-Credentials: true
                    Content-Type: application�
Headers           : {[Date, System.String[]], [Connection, System.String[]], [Server, System.String[]], [Access-Control-Allow-Origin, System.String[]]�}
Images            : {}
InputFields       : {}
Links             : {}
RawContentLength  : 249
RelationLink      : {}

httpbin.org 是一项服务,可返回有关 Web 请求和响应的信息,以便进行故障排除。 变量 $Uri 分配给 /headers 服务的 终结点,该终结点将请求的标头作为其响应中的内容返回。

请求 If-Match 标头在 RFC-7232 第 3.1 节 中定义,并要求使用括在引号中定义该标头的值。 变量 $InvalidHeaders 被赋予一个哈希表,其中 的值 If-Match 无效,因为它定义为 12345 而不是 "12345"。

使用无效标头调用 Invoke-WebRequest 将返回错误,报告格式化的值无效。 请求不会发送到终结点。

使用 SkipHeaderValidation 参数调用 Invoke-WebRequest 将忽略验证失败并将请求发送到终结点。 由于终结点允许不合规的标头值,因此 cmdlet 返回响应对象而不会出错。

示例 10:使用 HTTP 2.0 发送请求

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

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

-AllowUnencryptedAuthentication

允许通过未加密的连接发送凭据和机密。 默认情况下,使用不以 https:// 开头的 URI 提供凭据或任何身份验证选项会导致错误和请求中止,以防止无意中通过未加密的连接以纯文本形式传达机密。 若要自担风险替代此行为,请提供 AllowUnencryptedAuthentication 参数。

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

此功能已在 PowerShell 6.0.0 中添加。

Type:SwitchParameter Position:Named Default value:False Accept pipeline input:False Accept wildcard characters:False

-Authentication

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

可用的身份验证选项:

  • None:这是未提供 身份验证 时的默认选项。 不使用显式身份验证。
  • Basic:需要 凭据。 凭据以 RFC 7617 基本身份验证 Authorization: Basic 标头的形式发送,格式 base64(user:password)为 。
  • Bearer:需要 Token 参数。 使用提供的令牌发送 RFC 6750 Authorization: Bearer 标头。
  • OAuth:需要 Token 参数。 使用提供的令牌发送 RFC 6750 Authorization: Bearer 标头。
  • 提供身份验证会Authorization替代提供给标头或包含在 WebSession 中的任何标头。

    此功能已在 PowerShell 6.0.0 中添加。

    Type:WebAuthenticationType Accepted values:None, Basic, Bearer, OAuth Position:Named Default value:None Accept pipeline input:False Accept wildcard characters:False

    -Body

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

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

    当输入为 POST 请求且正文为 String 时,第一个等号左侧的值 (=) 设置为表单数据中的键,其余文本设置为值。 若要指定多个键,请将 IDictionary 对象(如哈希表)用于 Body。

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

    当输入为 System.Xml时。XmlNode 对象和 XML 声明指定一个编码,该编码用于请求中的数据,除非由 ContentType 参数重写。

    Body 参数也接受 System.Net.Http.MultipartFormDataContent 对象。 这有利于 multipart/form-data 请求。 为 Body 提供 MultipartFormDataContent 对象时,提供给 ContentType、Headers 或 WebSession 参数的任何与 Content 相关的标头将由 MultipartFormDataContent 对象的 Content 标头替代。 此功能已在 PowerShell 6.0.0 中添加。

    Type:Object Position:Named Default value:None Accept pipeline input:True Accept wildcard characters:False

    -Certificate

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

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

    Type:X509Certificate Position:Named Default value:None Accept pipeline input:False Accept wildcard characters:False

    -CertificateThumbprint

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

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

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

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

    指定 Web 请求的内容类型。

    如果 ContentType 的值包含 (为 charset) 的编码格式,则 cmdlet 使用该格式对 Web 请求的正文进行编码。 如果 ContentType 未指定编码格式,则改用默认编码格式。 具有编码格式的 ContentType 的一个示例是 text/plain; charset=iso-8859-5,它指定 拉丁文/西里尔文 字母表。

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

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

    Type:String Position:Named Default value:None Accept pipeline input:False Accept wildcard characters:False

    -Credential

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

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

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

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

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

    -CustomMethod

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

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

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

    此功能已在 PowerShell 6.0.0 中添加。

    Type:String Aliases:CM Position:Named Default value:None Accept pipeline input:False Accept wildcard characters:False

    -DisableKeepAlive

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

    Type:SwitchParameter Position:Named Default value:False Accept pipeline input:False Accept wildcard characters:False

    -Form

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

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

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

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

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

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

    在上面的示例中, tags 字段在 窗体中提供三次,每个 、 和 2017各VacationItaly提供一次。 该 pictures 字段也会为文件夹中的每个文件 2017-Italy 提交一次。 该文件夹中文件的二进制内容作为值提交。

    此功能已在 PowerShell 6.1.0 中添加。

    Type:IDictionary Position:Named Default value:None Accept pipeline input:False Accept wildcard characters:False

    -Headers

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

    为 Body 提供 MultipartFormDataContent 对象时,将重写与内容相关的标头,如 Content-Type 。

    Type:IDictionary Position:Named Default value:None Accept pipeline input:False Accept wildcard characters:False

    -HttpVersion

    指定用于请求的 HTTP 版本。 默认为 1.1。

    有效值是:

    Type:WebRequestMethod Accepted values:Default, Get, Head, Post, Put, Delete, Trace, Options, Merge, Patch Position:Named Default value:None Accept pipeline input:False Accept wildcard characters:False

    -NoProxy

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

    Type:SwitchParameter Position:Named Default value:False Accept pipeline input:False Accept wildcard characters:False

    -OutFile

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

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

    Type:String Position:Named Default value:None Accept pipeline input:False Accept wildcard characters:False

    -PassThru

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

    Type:SwitchParameter Position:Named Default value:False Accept pipeline input:False Accept wildcard characters:False

    -PreserveAuthorizationOnRedirect

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

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

    此功能已在 PowerShell 6.0.0 中添加。

    Type:SwitchParameter Position:Named Default value:False Accept pipeline input:False Accept wildcard characters:False

    -Proxy

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

    Type:Uri Position:Named Default value:None Accept pipeline input:False Accept wildcard characters:False

    -ProxyCredential

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

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

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

    Type:PSCredential Position:Named Default value:Current user Accept pipeline input:False Accept wildcard characters:False

    -ProxyUseDefaultCredentials

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

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

    Type:SwitchParameter Position:Named Default value:False Accept pipeline input:False Accept wildcard characters:False

    -Resume

    尽最大努力尝试继续下载部分文件。 恢复 需要 OutFile。

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

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

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

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

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

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

    此功能已在 PowerShell 6.1.0 中添加。

    Type:SwitchParameter Position:Named Default value:False Accept pipeline input:False Accept wildcard characters:False

    -RetryIntervalSec

    指定收到失败代码 400 到 599(含 400 到 599)或 304 时连接重试的间隔。 另请参阅用于指定重试次数的 MaximumRetryCount 参数。 值必须介于 和 [int]::MaxValue之间1。

    Type:Int32 Position:Named Default value:5 Accept pipeline input:False Accept wildcard characters:False

    -SessionVariable

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

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

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

    从 PowerShell 7.4 开始,只要后续请求中未重写会话的属性,Web 请求会话就会持久。 如果存在,cmdlet 会使用新值重新创建会话。 持久会话可减少重复请求的开销,使其更快。

    若要在后续的 Web 请求中使用 Web 请求会话,请在 WebSession 参数的值中指定会话变量。 建立新连接时,PowerShell 使用 Web 请求会话对象中的数据。 若要在 Web 请求会话中重写某个值,请使用 cmdlet 参数,如 UserAgent 或 Credential。 参数值优先于 Web 请求会话中的值。

    不能在同一命令中使用 SessionVariable 和 WebSession 参数。

    Type:String Aliases:SV Position:Named Default value:None Accept pipeline input:False Accept wildcard characters:False

    -SkipCertificateCheck

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

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

    此功能已在 PowerShell 6.0.0 中添加。

    Type:SwitchParameter Position:Named Default value:False Accept pipeline input:False Accept wildcard characters:False

    -SkipHeaderValidation

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

    此开关应用于需要不符合标准的标头值的网站。 指定此开关将禁用验证以允许未选中地传递值。 指定后,将添加所有标头,而无需验证。

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

    此功能已在 PowerShell 6.0.0 中添加。

    Type:SwitchParameter Position:Named Default value:False Accept pipeline input:False Accept wildcard characters:False

    -SkipHttpErrorCheck

    此参数使 cmdlet 忽略 HTTP 错误状态并继续处理响应。 错误响应将写入管道,就像成功一样。

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

    Type:SwitchParameter Position:Named Default value:False Accept pipeline input:False Accept wildcard characters:False

    -SslProtocol

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

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

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

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

    Type:WebSslProtocol Accepted values:Default, Tls, Tls11, Tls12 Position:Named Default value:None Accept pipeline input:False Accept wildcard characters:False

    -TimeoutSec

    指定请求在超时之前可以挂起多长时间。输入一个以秒为单位的值。 默认值 0 指定无限超时。

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

    Type:Int32 Position:Named Default value:0 Accept pipeline input:False Accept wildcard characters:False

    -Token

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

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

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

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

    Type:SecureString Position:Named Default value:None Accept pipeline input:False Accept wildcard characters:False

    -TransferEncoding

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

  • Chunked
  • Compress
  • Deflate
  • Identity
  • Accepted values:chunked, compress, deflate, gzip, identity Position:Named Default value:None Accept pipeline input:False Accept wildcard characters:False

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

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

    Type:Uri Position:0 Default value:None Accept pipeline input:False Accept wildcard characters:False

    -UseBasicParsing

    此参数已弃用。 从 PowerShell 6.0.0 开始,所有 Web 请求仅使用基本分析。 包含此参数只是为了向后兼容,对它的任何使用都不会影响 cmdlet 的操作。

    Type:SwitchParameter Position:Named Default value:False Accept pipeline input:False Accept wildcard characters:False

    -UseDefaultCredentials

    指示 cmdlet 使用当前用户的凭据发送 Web 请求。 这不能与 身份验证 或 凭据 一起使用,并且可能并非在所有平台上都受支持。

    Type:SwitchParameter Position:Named Default value:False Accept pipeline input:False Accept wildcard characters: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)

    Type:String Position:Named Default value:None Accept pipeline input:False Accept wildcard characters:False

    -WebSession

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

    若要在 Web 请求会话中重写某个值,请使用 cmdlet 参数,如 UserAgent 或 Credential。 参数值优先于 Web 请求会话中的值。 为 Body 提供 MultipartFormDataContent 对象时,内容相关的标头(如 Content-Type)也会被重写。

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

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

    不能在同一命令中使用 SessionVariable 和 WebSession 参数。

    Type:WebRequestSession Position:Named Default value:None Accept pipeline input:False Accept wildcard characters:False

    Object

    可以通过管道将 Web 请求的正文传递给此 cmdlet。

    BasicHtmlWebResponseObject

    此 cmdlet 返回表示 Web 请求结果的响应对象。

    PowerShell 包含以下别名 Invoke-WebRequest:

  • 所有平台:

      从 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 请求的代理服务器的主机名或 IP 地址,以防 HTTP_PROXY 或 HTTPS_PROXY 未定义。
    • NO_PROXY:应从代理中排除的主机名的逗号分隔列表。
    • Invoke-RestMethod
    • ConvertFrom-Json
    • ConvertTo-Json
  •