【发布时间】:2011-03-30 19:21:13
【问题描述】:
我在尝试从 powershell 脚本发送到 msdeploy 的参数中遇到空格问题。
还有许多其他相关文章,但没有一篇能解决问题。
Problems Using Power Shell And MSDeploy.
类似的 SO 问题不起作用:How to run exe in powershell with parameters with spaces and quotes
PowerShell 错误: Executing commands which require quotes and variables is practically impossible
另一个不起作用的 SO 问题:Passing parameters in PowerShell 2.0
当我把它变得更复杂时,最简单的成功然后失败的例子就是转储默认网站。
$msdeploy = "C:\Program Files\IIS\Microsoft Web Deploy\msdeploy.exe"
&$msdeploy -verb:dump -source:appHostConfig=`'默认网站`' -verbose
==成功
这个?
$sitename="默认网站"
&$msdeploy -verb:dump -source:appHostConfig=$sitename -verbose
==FAIL 出现以下错误
msdeploy.exe:错误:无法识别的参数 '"-source:"appHostConfig=default'。所有参数必须以“-”开头。
在 C:\xxx\test.ps1:122 char:6
+ &
+ CategoryInfo : NotSpecified: (错误: Unrecogn...begin with "-".:String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError
错误计数:1。
以下变体也失败了
#失败
$sitename=`'默认网站`'
$sitename=`'"默认网站"`'
$sitename="`'默认网站`'"
$sitename="默认网站"
$sitename="'默认网站'"
&$msdeploy -verb:dump "-source:appHostConfig=$sitename" -verbose
&$msdeploy -verb:dump -source:appHostConfig="$sitename" -verbose
&$msdeploy -verb:dump -source:appHostConfig='$sitename' -verbose
&$msdeploy -verb:dump -source:appHostConfig=`'$sitename`' -verbose
&$msdeploy -verb:dump -source:appHostConfig=`"$sitename`" -verbose
我很茫然。和我一起工作的每个人都不知所措。说真的,这很糟糕。我喜欢 Powershell。我喜欢 msdeploy。我不能说我喜欢把它们放在一起。看起来专注于 API 而不是 cli 可能更容易。
编辑:
Emperor XLII 建议的字符串数组中的参数效果很好。以下文章中介绍了另一种解决方案:The trials and tribulations of using MSDeploy with 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 )
}
【问题讨论】:
-
Web Deploy PowerShell Cmdlet 在 2010 年不可用。团队提供的唯一选择是使用 PowerShell 直接访问 .Net API。 blogs.iis.net/jamescoo/archive/2009/09/09/… 我认为直到 v3 才添加 cmd-let。
-
您编辑的文章有一个新网址:trycatchfail.com/2010/02/01/…
-
@JulianM Web Deploy Powershell Cmdlet 的文档很糟糕,通过搜索,显然整个行业都没有使用。不值得花时间去弄清楚。
-
升级到最新的 Powershell 版本可能会有所帮助。在this answer中查看我的示例代码
标签: iis powershell msdeploy