usar tutorial script como commands comandos powershell

script - powershell tutorial



Cómo dividir comandos largos en varias líneas en PowerShell (6)

¿Cómo se toma un comando como este en PowerShell y se divide en varias líneas?

&"C:/Program Files/IIS/Microsoft Web Deploy/msdeploy.exe" -verb:sync -source:contentPath="c:/workspace/xxx/master/Build/_PublishedWebsites/xxx.Web" -dest:contentPath="c:/websites/xxx/wwwroot/,computerName=192.168.1.1,username=administrator,password=xxx"


Ah, y si tienes una cadena muy larga que quieras dividir, digamos de html, puedes hacerlo colocando una @ en cada lado de la parte externa " - como esta:

$mystring = @" Bob went to town to buy a fat pig. "@

Obtienes exactamente esto: Bob fue a la ciudad a comprar un cerdo gordo.

Y si está usando Notepad ++, incluso se resaltará correctamente como un bloque de cadena. Ahora, si también desea que esa cadena contenga comillas dobles, solo agréguelas, así:

$myvar = "Site" $mystring = @" <a href="http://somewhere.com/somelocation"> Bob''s $myvar </a> "@

Obtendría exactamente esto:

<a href="http://somewhere.com/somelocation"> Bob''s Site </a>

Sin embargo, si usa comillas dobles en esa cadena @, Notepad ++ no se da cuenta de eso y cambiará la coloración de la sintaxis como si no estuviera citada o cotizada, según el caso.

Y lo mejor es esto: en cualquier lugar donde insertes una variable $, ¡SÍ se interpreta! (si necesita el signo de dólar en el texto, se le escapa con una marca como esta: `$not-a-variable

¡DARSE CUENTA! Si no coloca el "@ final al principio de la línea , fallará. Me llevó una hora descubrir que no podía sangrar eso en mi código.

Aquí está msdn sobre el tema: http://technet.microsoft.com/library/ee692792.aspx?ppud=4


En PowerShell 5 y PowerShell 5 ISE, también es posible usar simplemente SHIFT+ENTER para la edición de líneas múltiples (en lugar de las barras estándar ` al final de cada línea):

PS> &"C:/Program Files/IIS/Microsoft Web Deploy/msdeploy.exe" >>> -verb:sync >>> -source:contentPath="c:/workspace/xxx/master/Build/_PublishedWebsites/xxx.Web" >>> -dest:contentPath="c:/websites/xxx/wwwroot,computerName=192.168.1.1,username=administrator,password=xxx"


Otro método para aprobar un argumento más limpio sería splatting .

Define tus parámetros y valores como una tabla hash como esta:

$params = @{ ''class'' = ''Win32_BIOS''; ''computername''=''SERVER-R2''; ''filter''=''drivetype=3''; ''credential''=''Administrator'' }

Y luego llame a su comando de esta manera:

Get-WmiObject @params

splatting .

Parece que funciona con Powershell 2.0 y versiones posteriores.


Puede usar el operador de retroceso:

& "C:/Program Files/IIS/Microsoft Web Deploy/msdeploy.exe" ` -verb:sync ` -source:contentPath="c:/workspace/xxx/master/Build/_PublishedWebsites/xxx.Web" ` -dest:contentPath="c:/websites/xxx/wwwroot/,computerName=192.168.1.1,username=administrator,password=xxx"

Eso todavía es demasiado largo para mi gusto, así que usaría algunas variables bien nombradas:

$msdeployPath = "C:/Program Files/IIS/Microsoft Web Deploy/msdeploy.exe" $verbArg = ''-verb:sync'' $sourceArg = ''-source:contentPath="c:/workspace/xxx/master/Build/_PublishedWebsites/xxx.Web"'' $destArg = ''-dest:contentPath="c:/websites/xxx/wwwroot/,computerName=192.168.1.1,username=administrator,password=xxx"'' & $msdeployPath $verbArg $sourceArg $destArg


Si tienes una función

$function:foo | % Invoke @( ''bar'' ''directory'' $true )

Si tienes un Cmdlet

[PSCustomObject] @{ Path = ''bar'' Type = ''directory'' Force = $true } | New-Item

Si tienes una aplicación

{foo.exe @Args} | % Invoke @( ''bar'' ''directory'' $true )

O

icm {foo.exe @Args} -Args @( ''bar'' ''directory'' $true )


detrás del carácter de la señal hacia atrás

&"C:/Program Files/IIS/Microsoft Web Deploy/msdeploy.exe" ` -verb:sync ` -source:contentPath="c:/workspace/xxx/master/Build/_PublishedWebsites/xxx.Web" ` -dest:contentPath="c:/websites/xxx/wwwroot,computerName=192.168.1.1,username=administrator,password=xxx"