Cómo ingresar un comando multilínea

¿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 usar el acento grave (o backtick):

 Get-ChildItem -Recurse ` -Filter *.jpg ` | Select LastWriteTime 

Sin embargo, esto solo es necesario en los casos que se muestran arriba. Por lo general, se obtiene la continuación de línea automática cuando un comando no puede completarse sintácticamente en ese punto. Esto incluye comenzar un nuevo elemento de canalización:

 Get-ChildItem | Select Name,Length 

funcionará sin problemas ya que después de | el comando no puede completarse ya que 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: $_" } 

Similar a la | una coma también funcionará en algunos contextos:

 1, 2 

Sin embargo, tenga en cuenta que, de forma similar a la inserción de semiconductor automático de JavaScript, hay algunas cosas que se rompen de forma similar porque el salto de línea ocurre en un punto donde está precedido de una statement 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' 

Incluyen los saltos de línea dentro de la cadena, entonces.

Acabo de descubrir que no debe haber ningún caracter entre el tic back y el salto de línea, incluso el espacio en blanco hará que el comando no funcione.

En la mayoría de los lenguajes tipo C, soy deliberado sobre colocar mis llaves donde creo que hacen que el código sea más fácil de leer.

El analizador de PowerShell reconoce cuándo una statement claramente no está completa y mira hacia la siguiente línea. Por ejemplo, imagine un cmdlet que toma un parámetro de bloque de script opcional:

     Get-Foo {............}

si el bloque de script es muy largo, es posible que desee escribir:

     Get-Foo
     {
         ...............
         ...............
         ...............
     }

Pero esto no funcionará: el analizador verá dos declaraciones. El primero es Get-Foo y el segundo es un bloque de script. 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 e invita a errores.

Debido a que este caso requiere que la abrazadera abierta esté en la línea anterior, sigo ese patrón en todas partes:

     if (condición) {
         .....
     }

Tenga en cuenta que if instrucciones requieren un bloque de secuencia de comandos en la gramática del lenguaje, el analizador buscará en la siguiente línea del bloque de secuencia de comandos, pero para mantener la coherencia, mantendré la llave abierta en la misma línea.

Simlarmente, en el caso de tuberías largas, rompo después del carácter de tubería ( | ):

     $ project.Items | 
         ?  {$ _. Key -eq "ProjectFile"} | 
         % {$ _. Valor} | 
         % {$ _. EvaluatedInclude} |
         % {
             .........
         }

Supongo que está hablando en la línea de comandos: si está en un script, entonces una nueva línea actúa como un delimitador de comandos.

En la línea de comando, use un punto y coma ; , así por ejemplo; signate a powershell-script 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+ENTER al final de cada línea para la edición de líneas múltiples (en lugar de backtick estándar ` ).

Supongo que está hablando en la línea de comandos: si está en un script, entonces una nueva línea actúa como un delimitador de comandos.

En la línea de comando, usa un punto y coma ‘;’

Si intenta separar cadenas en múltiples líneas, puede usar el “+”. Por ejemplo:

 $header = "Make," + "ComputerName," + "Model," + "Windows Version" 

Se verá igual que:

 $header = "Make,ComputerName,Model,Windows Version"