1

I am trying to pass a MAC Address and code (1,2,3,4) to Invoke-WebRequest. Manually the command is working fine, but I am not able to do it via command.

The manual command that works is:

Invoke-WebRequest -Uri https://mywebsite.org/pcconfig/setstate.php?mac=F832E3A2503B"&"state=4

Now when I break this up into variable to use with the mac from the machine I do the following.

$LiveMAC = Get-NetAdapter -Physical |
           where Status -eq "Up" |
           Select-Object -ExpandProperty PermanentAddress

$Str1 = "https://mywebsite.org/pcconfig/setstate.php?mac=$LiveMAC"
$Str2 = $Str1 + '"&"' + 'state=4'
Invoke-WebRequest -Uri $Str2

When I run the above code I do not see errors in red, it seems to process but does not work.

Looking at $Str2 I see the below output, which seems correct, but when passing it as above it fails to work.

https://mywebsite.org/pcconfig/setstate.php?mac=F832E3A2503B"&"state=4

1 Answer 1

3

The double quotes in a statement like

Invoke-WebRequest -Uri https://example.org/some/sit.php?foo=x"&"bar=y

mask the ampersand for PowerShell, because otherwise otherwise PowerShell would throw an error that a bare & is reserved for future use. A more canonical way of avoiding this is to put the entire URI in quotes:

Invoke-WebRequest -Uri "https://example.org/some/sit.php?foo=x&bar=y"

Either way the actual URI that is passed to Invoke-WebRequest is

https://example.org/some/sit.php?foo=x&bar=y

without the quotes.

However, in a code snippet like this:

$Str1 = "https://example.org/some/site.php?foo=$foo"
$Str2 = $Str1 + '"&"' + 'state=4'

you're including literal double quotes as part of the URI, so the actual URI passed to the cmdlet would be

https://example.org/some/sit.php?foo=x"&"bar=y

which is invalid.

With that said, you don't need string concatenation for building your URI anyway. Simply put your variable in the double-quoted string:

$uri = "https://example.org/some/sit.php?foo=${foo}&bar=y"

If you need to insert the value of an object property or array element use either a subexpression

$uri = "https://example.org/some/sit.php?foo=$($foo[2])&bar=y"

or the format operator

$uri = 'https://example.org/some/sit.php?foo={0}&bar=y' -f $foo[2]
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.