Cómo ingresar un comando de varias líneas
¿Es posible dividir una línea de comando de PowerShell en varias líneas?
En Visual Basic puedo usar el guión bajo ( _
) para continuar el comando en la siguiente línea.
Puedes utilizar un espacio seguido del acento grave (comilla invertida):
Get-ChildItem -Recurse `
-Filter *.jpg `
| Select LastWriteTime
Sin embargo, esto sólo es necesario en los casos como se muestra arriba. Por lo general, obtiene una continuación de línea automática cuando un comando no puede completarse sintácticamente en ese punto. Esto incluye iniciar un nuevo elemento de canalización:
Get-ChildItem |
Select Name,Length
funcionará sin problemas ya que después del |
comando no se puede completar porque falta otro elemento de canalización. También abrir llaves o cualquier otro tipo de paréntesis permitirá la continuación de la línea directamente:
$x=1..5
$x[
0,3
] | % {
"Number: $_"
}
De forma similar a la |
coma, también funcionará en algunos contextos:
1,
2
Sin embargo, tenga en cuenta que, de manera similar a la inserción automática de punto y coma de JavaScript , hay algunas cosas que están igualmente rotas porque el salto de línea ocurre en un punto donde está precedido por una declaración válida:
return
5
no trabajará.
Finalmente, las cadenas (en todas las variedades) también pueden extenderse más allá de una sola línea:
'Foo
bar'
Entonces incluyen los saltos de línea dentro de la cadena.
No debe haber ningún carácter entre el acento grave y el salto de línea. Incluso los espacios en blanco harán que el comando no funcione.
En la mayoría de los lenguajes tipo C, soy consciente de colocar las llaves donde creo que hacen que el código sea más fácil de leer.
El analizador de PowerShell reconoce cuando una declaración claramente no está completa y busca en la siguiente línea. Por ejemplo, imagine un cmdlet que toma un parámetro de bloque de secuencia de comandos opcional:
Get-Foo { ............ }
Si el bloque de script es muy largo, es posible que desees escribir:
Get-Foo { ............... ............... ............... }
Pero esto no funcionará: el analizador verá dos declaraciones. El primero es Get-Foo
y el segundo es un bloque de guión. En cambio, escribo:
Get-Foo { ............... ............... ............... }
Podría usar el carácter de continuación de línea (`), pero eso hace que el código sea difícil de leer y provoca errores.
Debido a que este caso requiere que la llave abierta esté en la línea anterior, sigo ese patrón en todas partes:
si (condición) { ..... }
Tenga en cuenta que
if
las declaraciones requieren un bloque de secuencia de comandos en la gramática del idioma, por lo que el analizador buscará el bloque de secuencia de comandos en la siguiente línea, pero por coherencia, mantengo la llave abierta en la misma línea.
De manera similar, en el caso de tuberías largas, me rompo después del carácter de tubería ( |
):
$proyecto.Artículos | ? { $_.Key -eq "ArchivoProyecto" } | % { $_.Valor } | % { $_.EvaluatedInclude } | % { ......... }
Para ampliar la respuesta de cristobalito :
Supongo que estás hablando de la línea de comandos: si está en un script, entonces una nueva línea > actúa como delimitador de comandos.
En la línea de comando, utilice un punto y coma ';'
Por ejemplo:
Firme un script de PowerShell en la línea de comandos. Sin saltos de línea.
powershell -Command "&{$cert=Get-ChildItem –Path cert:\CurrentUser\my -codeSigningCert ; Set-AuthenticodeSignature -filepath Z:\test.ps1 -Cert $cert}
En PowerShell y PowerShell ISE, también es posible usar Shift+ Enteral final de cada línea para la edición de varias líneas (en lugar del acento grave estándar `
).