如何在PowerShell中通过多行分割长命令
如何在PowerShell中使用这样的命令并将其分成多行:
&"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:\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"
另一个更简洁的论点传递的方法是泼溅 。
定义你的参数和值作为这样的散列表:
$params = @{ 'class' = 'Win32_BIOS'; 'computername'='SERVER-R2'; 'filter'='drivetype=3'; 'credential'='Administrator' }
然后像这样调用你的commandlet:
Get-WmiObject @params
Windows PowerShell:Splatting 。
看起来像它和Powershell 2.0一起工作。
啊,如果你有一个很长的string,你可以通过在外部的每一边放一个@
,比如说:
$mystring = @" Bob went to town to buy a fat pig. "@
你得到了这个:鲍勃去城里买了一头肥猪。
如果您使用的是Notepad ++,甚至可以正确突出显示string块。 现在,如果你想让这个string包含双引号,只需将它们添加进来,就像这样:
$myvar = "Site" $mystring = @" <a href="http://somewhere.com/somelocation"> Bob's $myvar </a> "@
你会得到这个:
<a href="http://somewhere.com/somelocation"> Bob's Site </a>
但是,如果在那个@string中使用双引号,Notepad ++不会意识到这一点,并根据具体情况将语法着色切换为不引号或引号。
而更好的是:在任何地方你插入一个$variables,它会得到解释! (如果你需要文本中的美元符号,你可以用下面的勾号标记来逃避它: `$not-a-variable
注意! 如果你不把最后的"@
放在最前面 ,那就会失败,我花了一个小时才弄明白,我的代码中没有这个缩进!
这里是msdn的主题: http ://technet.microsoft.com/library/ee692792.aspx?ppud =4
您可以使用反引号操作符:
& "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"
这对我的口味来说还是有点太长了,所以我会使用一些有名的variables:
$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
如果你有一个function
$function:foo | % Invoke @( 'bar' 'directory' $true )
如果你有一个Cmdlet
[PSCustomObject] @{ Path = 'bar' Type = 'directory' Force = $true } | New-Item
如果你有一个应用程序
{foo.exe @Args} | % Invoke @( 'bar' 'directory' $true )
要么
icm {foo.exe @Args} -Args @( 'bar' 'directory' $true )
在PowerShell 5和PowerShell 5 ISE中,也可以使用SHIFT+ENTER
进行多行编辑(而不是每行末尾的标准反引号):
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"