O script powershell a seguir gera os resultados duas vezes quando há uma vírgula. Ele separa as strings como duas entradas. Como posso fazê-lo tratá-lo como uma string em vez de duas?
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
Lembre-se também de que quando você usa aspas simples "aspas simples (uma string com aspas simples), a string é passada para o comando exatamente como você a digita. Nenhuma substituição é executada." Ao contrário de quando você usa aspas duplas "aspas duplas (uma string entre aspas duplas), os nomes de variáveis que são precedidos por um cifrão ($) são substituídos pelo valor da variável antes que a string seja passada para o comando para processamento".
Isso é de: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_quoting_rules?view=powershell-6 e é para PowerShell 6, mas as mesmas regras se aplicam ao PowerShell 1 a 6.
Portanto, a menos que você precise usar uma variável dentro da string, as aspas simples forçarão o PowerShell a usar a string exatamente como você a escreveu.