Problema do PowerShell - parênteses da instrução IF

3

Encontrei algo com o PS e não sei se estou fazendo algo errado ou talvez seja apenas um bug no PS (e não consigo encontrar a resposta em nenhum lugar) Eu testei isso com o PS v4, v5.0 e v5.1 usando diferentes sistemas operacionais Windows. Primeiro, parece que não importa qual seja o sistema operacional e não importa qual seja a versão do PS, quando executo o seguinte trecho de código abaixo diretamente por meio de uma janela do PS ou por meio de um script PS, não recebo erros e tudo parece estar OK :

$error.clear()
If ($error -ne $null) { $error }

No entanto, em tipos específicos de sistemas (parecendo ser um problema baseado em sistema operacional), eu corro o seguinte código e às vezes recebo um erro:

$error.clear()
If ($error -ne $null)
{
$error
}

Eu posso executar o código gerador de erros acima nos servidores Windows 10 e Windows 2016 e tudo está OK (nenhum erro é relatado). Se eu executar o mesmo código no Windows 2008 R2 ou no Windows 2012 R2, recebo a seguinte mensagem de erro:

Missing statement block after If ( condition ).

Parece que não importa se tenho o PS 4, 5 ou 5.1.1 instalado nos sistemas Windows 2008 R2 e Windows 2012 R2, ainda recebo o erro. E não parece importar se estou executando como Admin ou não, os mesmos resultados. E não parece fazer diferença se eles são sistemas de junção de domínio ou de grupo de trabalho. Todos os nossos sistemas são corrigidos a partir das atualizações das atualizações de terça-feira de maio de 2017.

É um requisito de PS (nos sistemas Windows 2008 R2 e Windows 2012 R2) que a chave de abertura de uma instrução “SE” de PS deve estar na mesma linha que a própria instrução IF? Não parece ser assim para o Windows 10 e o Windows 2016 server.

Agradecemos antecipadamente

UCG

    
por STGdb 14.06.2017 / 16:26

2 respostas

0

Quando o PowerShell é alimentado com uma linha (ou bloco) de código - ele avalia esse bloco (ou linha) como um todo

Nesse caso, sua primeira linha é: If ($error -ne $null)

O PowerShell sabe como interperatar a linha, mas sua sintaxe inválida porque o PowerShell não tem um bloco "o que fazer" no caso de os critérios serem atendidos.

SevocêalimentaroPowerShellcomoblococomoumtodo,elereconheceráobloco"o que fazer" e saberá aonde precisa ir em seguida:

Você consegue desenvolver mais sobre quais sistemas e plataformas você está achando que aceitam as linhas únicas? Eu acabei de testar isso no Win10 (PowerShell 5), 2012R2 (Powershell 4 e 5), Windows 7 (PowerShell 4 e 5) e todos eles se comportam exatamente da mesma forma.

    
por 21.07.2017 / 10:02
0

Eu tive esse mesmo problema quando meu bloco de instruções incluiu uma string here

If ($error -ne $null)
{
 $query = @" 
 do some sql;
 do more sql; 
 "@
}

Quando eu mudei para uma linha sem o aqui-string funcionou

If ($error -ne $null)
{
 $query = "do some sql;do more sql;"
}

Você pode ter algo em seu bloco de declarações que o PowerShell não permite como multilinha também.

    
por 24.08.2018 / 16:05