usar tutorial script como commands comandos powershell

script - powershell tutorial



La mejor forma de escribir en la consola en PowerShell (2)

Tengo un poco de confusión sobre las diversas formas de imprimir (eco) en la consola. He visto que hay varias formas de escribir salida en la consola, como por ejemplo:

Write-Host "Hello world1" "Hello World2" Out-Host -InputObject "Hello World3"

Las tres formas se imprimirán en la consola. El medio es de alguna manera más simple y menos detallado y más fácil de usar. También encuentro que cuando escribes una función como:

function GetValues() { "1" "2" }

Todavía devuelve dos cadenas en la tubería:

Y todavía puedo imprimir los valores:

foreach ($s in GetValues) { Write-Host "s: " $s }

Lo que encontré fue que usar solo la cadena entrecomillada no siempre aparece en los hosts personalizados, y que tuve que usar Write-Host para obtener valores para imprimir en hosts personalizados.

De alguna manera encuentro esto confuso. ¿Se supone que "Print something" es un alias de Write-Host o cuál es la intención?


El comportamiento predeterminado de PowerShell es simplemente volcar todo lo que cae fuera de una tubería sin ser recogido por otro elemento de canalización o ser asignado a una variable (o redirigir) a Out-Host . Lo que Out-Host hace es obviamente dependiente del host.

Simplemente dejar que las cosas se salgan de la tubería no es un sustituto de Write-Host que existe por la única razón de la salida de texto en la aplicación host.

Si desea salida, use los cmdlets Write-* . Si desea devolver valores de una función, simplemente vacíe los objetos allí sin ningún cmdlet.


El del medio escribe a la tubería. Write-Host y Out-Host escribe en la consola. ''echo'' es un alias para Write-Output que también escribe en la canalización. La mejor forma de escribir en la consola sería usando el cmdlet Write-Host .

Cuando un objeto se escribe en la tubería, puede ser consumido por otros comandos en la cadena. Por ejemplo:

"hello world" | Do-Something

pero esto no funcionará, ya que Write-Host escribe en la consola, no en la tubería (Do-Something no obtendrá la cadena):

Write-Host "hello world" | Do-Something