Comment prenez-vous une commande semblable à celle-ci dans PowerShell et divisez-la sur plusieurs lignes?
&"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"
Caractère de fuite arrière, c'est-à-dire
&"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"
Une autre méthode permettant de passer des arguments plus propres serait éclaboussures .
Définissez vos paramètres et valeurs comme une table de hachage comme ceci:
$params = @{ 'class' = 'Win32_BIOS';
'computername'='SERVER-R2';
'filter'='drivetype=3';
'credential'='Administrator' }
Et appelez ensuite votre commandlet comme ceci:
Get-WmiObject @params
Microsoft Docs: À propos des éclaboussures
TechNet Magazine 2011: Windows PowerShell: Splatting
Ah, et si vous voulez rompre une très longue chaîne, disons HTML, vous pouvez le faire en mettant un @
de chaque côté de la "
extérieure - comme ceci:
$mystring = @"
Bob
went
to town
to buy
a fat
pig.
"@
Vous obtenez exactement ceci:
Bob
went
to town
to buy
a fat
pig.
Et si vous utilisez Notepad ++ , il sera même mis en évidence correctement en tant que bloc de chaîne.
Maintenant, si vous voulez que cette chaîne contienne aussi des guillemets doubles, ajoutez-les simplement, comme ceci:
$myvar = "Site"
$mystring = @"
<a href="http://somewhere.com/somelocation">
Bob's $myvar
</a>
"@
Vous obtiendrez exactement ceci:
<a href="http://somewhere.com/somelocation">
Bob's Site
</a>
Toutefois, si vous utilisez des guillemets doubles dans cette chaîne @, Notepad ++ ne s'en rend pas compte et modifie la coloration de la syntaxe comme si elle n'était pas entre guillemets ni entre guillemets, selon le cas.
Et ce qui est mieux, c'est que partout où vous insérez une variable $, elle est interprétée! (Si vous avez besoin du signe dollar dans le texte, vous l’échappez avec une coche comme celle-ci: `` $ not-a-variable`.)
REMARQUER! Si vous ne placez pas le "@
final au tout début de la ligne , cela échouera. Il m'a fallu une heure pour comprendre que je ne pouvais pas l'indenter dans mon code!
Voici MSDN sur le sujet: tilisation de Windows PowerShell "Here-Strings"
Vous pouvez utiliser l'opérateur backtick:
& "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"
C'est encore un peu trop long à mon goût, alors j'utiliserais des variables bien nommées:
$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 vous avez une fonction:
$function:foo | % Invoke @(
'bar'
'directory'
$true
)
Si vous avez un cmdlet :
[PSCustomObject] @{
Path = 'bar'
Type = 'directory'
Force = $true
} | New-Item
Si vous avez une application:
{foo.exe @Args} | % Invoke @(
'bar'
'directory'
$true
)
Ou
icm {foo.exe @Args} -Args @(
'bar'
'directory'
$true
)
Dans PowerShell 5 et PowerShell 5 ISE, il est également possible d’utiliser uniquement Shift + Enter pour l'édition multiligne (au lieu des backticks standard `
à la fin de chaque ligne):
PS> &"C:\Program Files\IIS\Microsoft Web Deploy\msdeploy.exe" # Shift+Enter
>>> -verb:sync # Shift+Enter
>>> -source:contentPath="c:\workspace\xxx\master\Build\_PublishedWebsites\xxx.Web" # Shift+Enter
>>> -dest:contentPath="c:\websites\xxx\wwwroot,computerName=192.168.1.1,username=administrator,password=xxx"