我在尝试从 powershell 脚本发送到 msdeploy 的参数中遇到空格问题。
还有许多其他相关文章,但都没有解决问题。
使用 Power Shell 和 MSDeploy 的问题。
类似的不起作用的 SO 问题:如何在 powershell 中使用带空格和引号的参数运行 exe
PowerShell BUG:执行需要引号和变量的命令实际上是不可能的
另一个不起作用的 SO 问题:在 PowerShell 2.0 中传递参数
当我让它变得更复杂时,最简单的成功然后失败的例子就是转储默认网站。
$msdeploy = "C:\Program Files\IIS\Microsoft Web Deploy\msdeploy.exe"
&$msdeploy -verb:dump -source:appHostConfig=`'默认网站`' -verbose
==SUCCESS
这个?
$sitename="default web site"
&$msdeploy -verb:dump -source:appHostConfig=$sitename -verbose
==FAIL 并出现以下错误
msdeploy.exe:错误:无法识别的参数 '"-source:"appHostConfig=default'。所有参数必须以“-”开头。
在 C:\xxx\test.ps1:122 char:6
+ &
+ CategoryInfo : NotSpecified: (Error: Unrecogn...begin with "-".:String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError
错误计数:1。
以下变体也失败
了 #FAIL
$sitename=`'default web site`'
$sitename=`'"default web site"`'
$sitename="`'default web site`'"
$sitename="default web site"
$sitename="'默认网站'"
&$msdeploy -verb:dump "-source:appHostConfig=$sitename" -verbose
&$msdeploy -verb:dump -source:appHostConfig="$sitename" -verbose
&$msdeploy -verb:dump -source:appHostConfig='$站点名' -verbose
&$msdeploy -verb:dump -source:appHostConfig=`'$sitename`' -verbose
&$msdeploy -verb:dump -source:appHostConfig=`"$sitename`" -verbose
我不知所措。和我一起工作的每个人都不知所措。说真的,这很糟糕。我喜欢 Powershell。我喜欢 msdeploy。我不能说我喜欢把它们放在一起。看起来专注于 API 而不是 cli 可能更容易。
编辑:
Emperor XLII 建议的字符串数组中的参数效果很好。以下文章中介绍了另一种解决方案:将 MSDeploy 与 PowerShell 结合使用的试验和磨难
function PushToTarget([string]$server, [string]$remotePath, [string]$localPath) {
cmd.exe /C $("msdeploy.exe -verb:sync -source:contentPath=`"{0}`" -dest:computerName=`"{1}`",contentPath=`"{2}`" -whatif" -f $localPath, $server, $remotePath )
}