O Powershell é uma linguagem analisada e interpretada. O intérprete vê os parênteses como uma estrutura de controle e não é esperado ou exigido no < href="https://en.wikipedia.org/wiki/Call_site"> Site de Chamada . Considere a seguinte função de exemplo:
function test-function {
param
(
[string]
$string,
[string]
$word
)
"String: $string. Word: $word"
}
A maneira correta de chamar essa função é a seguinte:
Test-Function -String "Hello" -Word "World"
Os criadores do Powershell na Microsoft queriam criar um novo produto único que substituísse o shell do cmd e o vbscript. Um dos principais objetivos do Powershell era padronizar a nomenclatura do cmdlet, o procedimento de chamada do site, a troca de nomes e a saída (como um objeto). Curiosamente, outro foco primário foi eliminar as falhas de segurança do vbscript.
Por padrão, os cmdlets do Powershell são Sobrecarregados para que a mesma função de exemplo possa ser chamada assim:
Test-Function "Hello" "World"
Ambos os exemplos produzirão o seguinte:
"String: Hello. Word: World"
Então, o que acontece se decidirmos usar parênteses no site da chamada?
Test-Function("Hello","World")
"String: Hello World. Word:"
Então o que aconteceu? Powershell interpretou nossa entrada como um único array contendo duas strings que foram passadas para a primeira variável (posicionalmente). Para obter o resultado desejado usando parênteses, você teria que fazer isso:
Test-Function("Hello")("World")
Estamos enviando duas estruturas controladas (por tipo de objeto think da estrutura. Nesse caso, elas são ambas do tipo [String]
), conforme indicado pelo parenthsis, para a função. Acerta o olho errado, não é?
Espero que isso ajude você a entender por que é difícil usar parênteses ao chamar funções e cmdlets.