2009-04-01 17 views
141

Me gustaría generar variables y valores en un script PowerShell configurando indicadores y viendo los datos matriculados en todo el script.Eco equivalente en PowerShell para pruebas de script

¿Cómo podría hacer esto?

Por ejemplo, ¿cuál sería el equivalente de PowerShell al siguiente código PHP?

echo "filesizecounter: " . $filesizecounter 
+0

Consulte el script-editor/depurador que viene con [PowerGUI] (http://www.powergui.org/index.jspa). Puede ser adecuado para lo que estás haciendo. Entiendo que Powershell 2 viene con un depurador también (pero no lo he probado). –

Respuesta

182

Hay varias maneras:

Write-Host: escribe directamente en la consola, no incluido en la salida de función/cmdlet. Permite establecer el color de primer plano y de fondo.

Write-Debug: escribir directamente en la consola, si $DebugPreference establece en Continuar o Detener.

Write-Verbose: escribir directamente en la consola, si $VerbosePreference establece en Continuar o Detener.

Este último está destinado a la información adicional opcional, Write-Debug para la depuración (por lo que parece encajar en este caso).

adicional: en PSH2 (al menos) las secuencias de comandos usando cmdlet unión obtendrá automáticamente los parámetros del conmutador -Verbose y -Debug, permitiendo localmente Write-Verbose y Write-Debug (es decir anulando las variables de preferencia) como cmdlets y proveedores compilados hacen.

+3

Lo bueno de Write-Debug y Write-Verbose es que puede dejar sus instrucciones de depuración en su código, y solo activar el resultado cuando lo necesite utilizando la variable de preferencia adecuada. Ahorra tiempo y es una buena característica para otros usuarios de sus funciones. – JasonMArcher

+4

También desea familiarizarse con Out-String, porque con cualquier objeto no trivial, deberá usarlo para convertir el objeto en una cadena que se pueda mostrar antes de utilizar cualquiera de esos tres cmdlets Write- *. – Jaykul

20

PowerShell interpola, ¿no es así?

En PHP

echo "filesizecounter: " . $filesizecounter 

también se puede escribir como:

echo "filesizecounter: $filesizecounter" 

En PowerShell algo como esto debe ajustarse a sus necesidades:

Write-Host "filesizecounter: $filesizecounter" 
14
Write-Host "filesizecounter : " $filesizecounter 
60

Powershell tiene un eco de asignación de alias a Write-Output, por lo que:

echo "filesizecounter : $filesizecounter"

+2

'echo' es un alias de' Write-Output' según Microsoft [TechNet] (https://technet.microsoft.com/en-us/library/hh849921.aspx) y se discute [aquí] (http: // stackoverflow.com/a/17623902/857209) –

+0

Gracias Glenn, parece que el alias ha sido reasignado en los 6 años desde que publiqué esto. Lo cual es bueno, uno realmente no debería usar Write-Host ya que pasa por alto el pipeline. He actualizado mi respuesta para indicar esto. ¡Gracias! –

+0

¿Por qué no desea omitir la interconexión si todo lo que desea hacer es hacer eco de la salida de "depuración" en la consola para rastrear la ejecución de una secuencia de comandos? Write-Output tiene un extraño efecto secundario en el que el contenido de la última llamada a Write-Output quedará en la pila, anulando cualquier variable que intente devolver explícitamente desde una función. Los efectos secundarios como ese se sienten como una manera terriblemente complicada de que un lenguaje se comporte. – Craig

12

Con mucho, la forma más fácil de hacer eco en PowerShell, se acaba de crear el objeto de cadena y dejar que la salida de la tubería que:

$filesizecounter = 8096 
"filesizecounter : $filesizecounter" 

Por supuesto, se pierde cierta flexibilidad cuando no se utilizan los métodos Write- *.

2

Pruebe Get-Content .\yourScript.PS1 y verá el contenido de su secuencia de comandos.

También puede insertar esta línea en su código alforja

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

....

3

No sé si es prudente hacerlo, pero se puede simplemente escribir

"filesizecounter: " + $filesizecounter 

y debe de salida:

filesizecounter: valor

+0

'" filesizecounter: $ filesizecounter "' es aún más corto. – jiggunjer

2

El Comentario -host funciona bien.

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