Concatenação de expressões do Powershell

Concatenação de expressões do Powershell

Estou usando uma expressão ternária conforme mostrado neste exemplo:

$a = 1
$x = if ($a -eq 1) { "one" } else {"not one" }
$t = "The answer is: " + $x
write-host $t

Isso funciona como eu esperaria. O que eu gostaria de fazer na minha situação real é atribuir diretamente a $tsem a etapa intermediária de primeiro atribuir a expressão a $x, como se eu pudesse fazer isso:

$a = 1
$t = "The answer is: " + (if ($a -eq 1) { "one" } else {"not one" })
write-host $t

No entanto, recebo um erro na linha de atribuição,

if : The term 'if' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the
spelling of the name, or if a path was included, verify that the path is correct and try again.
At line:1 char:31
+     $t = "The answer is: " + (if ($a -eq 1) { "one" } else {"not one" ...
+                               ~~
    + CategoryInfo          : ObjectNotFound: (if:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

(Tentei sem colchetes (...): mesmo erro.) Claramente estou fazendo algo errado, mas meu google-fu não está ajudando hoje. Eu posso ver como concatenarconstantes e variáveis, mas nada parece explicar como concatenar constantes e expressões.

Você pode me indicar a direção certa, por favor?

Responder1

Você éentãofechar. :)

Você precisause o$para declarar o valor de retorno da instrução como uma variável.

Então:

$a = 1
$t = "The answer is: " + $(if ($a -eq 1) { "one" } else { "not one" })
write-host $t

Ou talvez como duas linhas, utilizando o Write-Hostopções de formatação:

$a = 1
write-host ("{0} {1}" -f "The answer is:", $(if ($a -eq 1) { "one" } else { "not one" }))

informação relacionada