如何在 Powershell 中使用 invoke-webrequest 制作多行 uri

问题描述

我试图在此调用中连接我的 uri,以便我可以将每个变量放在单独的行上。这样我就可以更轻松地进行更改,而不必费力搜索。我能够在 bash 脚本中执行此操作,但不知道如何在 Powershell 中执行此操作。

行如下:

Invoke-WebRequest -Uri (beginning of url)?date=$date"&"time=$time"&"name=$env:computername"&"loginid=$env:username"&"sn=$serialnumber"&"ipaddr=$ipaddr"&"verb=profileclear

谢谢!

解决方法

我认为实现这一目标的最简单方法是这样的:

$uri = "Https://something.somewhere/?" +
    "date=$date&" + 
    "time=$time&" + 
    "name=$env:computername&" + 
    "loginid=$env:username&" + 
    "sn=$serialnumber&" + 
    "ipaddr=$ipaddr&" + 
    "verb=profileclear" 

Invoke-WebRequest -Uri $uri
,

我会创建一个变量字符串数组,连接它们,然后构建一个 uri:

$variables = "date=$date","time=$time","name=$env:computername","loginid=$env:username","sn=$serialnumber","ipaddr=$ipaddr","verb=profileclear"

$uri = [System.UriBuilder]::new('https://contoso.com')
$uri.Query = $variables -join '&'

Invoke-WebRequest -Uri $uri.ToString()
,

一种选择是将查询参数存储在有序字典中并从中构造 URL:

$parameters = [ordered]@{
  date     = $date
  time     = $time
  name     = $env:computername
  loginid  = $env:username
  sn       = $serialnumber
  ipaddr   = $ipaddr
  verb     = 'profileclear'
}

$baseURI = 'https://host.fqdn/path'

# Construct full URI string from base URI + parameters
$queryString = @($parameters.GetEnumerator() |ForEach-Object {
  '{0}={1}' -f $_.Key,$_.Value
}) -join '&'

$URI = '{0}?{1}' -f $baseURI,$queryString

Invoke-WebRequest -Uri $URI