3

The following powershell script outputs the results twice when there is a comma. It separates the strings as two entries. How can I make it treat it as one string instead of two?

Function Get-Weather {
    [Alias('Wttr')]
    [Cmdletbinding()]
    Param(
            [Parameter(
                Mandatory = $true,
                HelpMessage = 'Enter name of the City to get weather report',
                ValueFromPipeline = $true,
                Position = 0
            )]
            [ValidateNotNullOrEmpty()]
            [string[]] $City,
            [switch] $Tomorrow,
            [switch] $DayAfterTomorrow
    )
Process
{
    Foreach($Item in $City){
        try {

            # Check Operating System Version
            If((Get-WmiObject win32_operatingsystem).caption -like "*Windows 10*") {
                $Weather = $(Invoke-WebRequest "http://wttr.in/$City" -UserAgent curl -UseBasicParsing).content -split "`n"
            }
            else {
                $Weather = (Invoke-WebRequest "http://wttr.in/$City" -UseBasicParsing).ParsedHtml.body.outerText  -split "`n"
            }

            If($Weather)
            {
                $Weather[0..16]
                If($Tomorrow){ $Weather[17..26] }
                If($DayAfterTomorrow){ $Weather[27..36] }
            }
        }
        catch {
            $_.exception.Message
        }
    }            
}

}

Get-Weather Shrewsbury,MA?n1

Mark Deven
  • 1,769

1 Answers1

4

Also remember that when you use single quotes "single-quotation marks (a single-quoted string), the string is passed to the command exactly as you type it. No substitution is performed." Versus when you use double quotes "double quotation marks (a double-quoted string), variable names that are preceded by a dollar sign ($) are replaced with the variable's value before the string is passed to the command for processing."

This is from: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_quoting_rules?view=powershell-6 and is for PowerShell 6, but the same rules apply to PowerShell 1 through 6.

So unless you need to use a variable inside the string, the single quotes will force PowerShell to use the string exactly how you have it written.

DBADon
  • 503