Equivalente de eco no PowerShell para teste de script


233

Gostaria de gerar variáveis ​​e valores em um script do PowerShell configurando sinalizadores e vendo os dados matriculados em todo o script.

Como eu faria isso?

Por exemplo, qual seria o PowerShell equivalente ao seguinte código PHP?

echo "filesizecounter: " . $filesizecounter 

Confira o editor de script / depurador que acompanha o PowerGUI . Pode ser adequado para o que você está fazendo. Entendo que o Powershell 2 também vem com um depurador (mas ainda não tentei).
— dan-gph

Respostas:


275

Existem várias maneiras:

Write-Host: Escreva diretamente no console, não incluído na saída da função / cmdlet. Permite que a cor do primeiro plano e do plano de fundo seja definida.

Write-Debug: Escreva diretamente no console, se $DebugPreferencedefinido como Continuar ou Parar.

Write-Verbose: Escreva diretamente no console, se $VerbosePreferencedefinido como Continuar ou Parar.

O último é destinado a informações opcionais adicionais, Write-Debugpara depuração (portanto, parece caber neste caso).

Adicional : No PSH2 (pelo menos), os scripts que usam a ligação de cmdlet obtêm automaticamente os parâmetros -Verbosee -Debugswitch, ativando localmente Write-Verbosee Write-Debug(ou seja, substituindo as variáveis ​​de preferência), como os cmdlets e provedores compilados.


4
O bom de Write-Debug e Write-Verbose é que você pode deixar suas instruções de depuração em seu código e apenas ativar a saída quando precisar, usando a variável de preferência apropriada. Economiza tempo e é um recurso interessante para outros usuários de suas funções.
— JasonMArcher

5
Você também deseja se familiarizar com Out-String, porque com qualquer objeto não trivial, será necessário usá-lo para converter o objeto em uma string com capacidade de exibição antes de usar qualquer um desses três cmdlets Write- *.
— Jaykul

113

O Powershell possui um eco de mapeamento de alias para Write-Output, portanto:

echo "filesizecounter : $filesizecounter"


7
echoé um alias para Write-Outputcomo por Microsoft do TechNet e discutido aqui
— Glenn Lawrence

2
Graças à Glenn, parece que o apelido foi remapeado nos 6 anos desde que eu publiquei isso. O que é bom, realmente não se deve usar o Write-Host, pois ignora o pipeline. Atualizei minha resposta para indicar isso. Obrigado!
— Justin R.

3
Por que você não gostaria de ignorar o pipeline se tudo o que você quer fazer é ecoar a saída "debug" no console para rastrear a execução de um script? Write-Output tem um efeito colateral estranho, onde o conteúdo da última chamada para Write-Output será deixado na pilha, substituindo qualquer variável que você tentar retornar explicitamente de uma função. Efeitos colaterais como esse parecem uma maneira terrivelmente maluca de um idioma se comportar.
— Craig

33

O PowerShell interpola, não é?

Em PHP

echo "filesizecounter: " . $filesizecounter 

também pode ser escrito como:

echo "filesizecounter: $filesizecounter" 

No PowerShell, algo assim deve atender às suas necessidades:

Write-Host "filesizecounter: $filesizecounter"

9
PHP não tem nada a ver com nada nesta questão
— reggaeguitar

25
Write-Host "filesizecounter : " $filesizecounter 

14

De longe, a maneira mais fácil de ecoar no PowerShell, é apenas criar o objeto String e deixar o pipeline produzir:

$filesizecounter = 8096
"filesizecounter : $filesizecounter"

Obviamente, você abre mão de alguma flexibilidade ao não usar os métodos Write- *.



8

O host de gravação funciona bem.

$Filesize = (Get-Item $filepath).length;
Write-Host "FileSize= $filesize";

5

Não sei se é sensato fazê-lo, mas você pode simplesmente escrever

"filesizecounter: " + $filesizecounter

E deve gerar:

filesizecounter: value


1
"filesizecounter: $filesizecounter"é ainda mais curto.
— precisa saber é o seguinte

3

O PowerShell possui aliases para vários comandos comuns, como echo. Digite o seguinte no PowerShell:

Get-Alias echo

para obter uma resposta:

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Alias           echo -> Write-Output

Até Get-Alias ​​tem um alias gal -> Get-Alias. Você pode escrever gal echopara obter o alias para echo.

gal echo

Outros aliases estão listados aqui: https://docs.microsoft.com/en-us/powershell/scripting/learn/using-familiar-command-names?view=powershell-6

cat dir mount rm cd echo move rmdir chdir erase popd sleep clear h ps sort cls history pushd tee copy kill pwd type del lp r write diff ls ren


2

Experimentar Get-Content .\yourScript.PS1 e você verá o conteúdo do seu script.

Além disso, você pode inserir esta linha no seu código de script:

get-content .\scriptname.PS1
script code
script code

....


Não mostra os valores reais processados ​​(por exemplo, substituição de env var), portanto, não é uma resposta para a pergunta.
— Iisystems 26/08/19

0

Também deve ser mencionado que Set-PSDebug é semelhante ao echo oncomando em lote da velha escola :

Set-PSDebug -Trace 1

Este comando resultará na exibição de todas as linhas do script em execução:

Quando o Traceparâmetro tem o valor 1, cada linha de script é rastreada à medida que é executada. Quando o parâmetro tem um valor 2, atribuições de variáveis, chamadas de função e chamadas de script também são rastreadas. Se o parâmetro Step for especificado, você será solicitado antes da execução de cada linha do script.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.