当参数有空格时,如何从powershell调用msdeploy? [英] How do you call msdeploy from powershell when the parameters have spaces?
问题描述
我在参数中遇到空格问题,我尝试从powershell脚本发送到msdeploy。
I'm running into a problem with spaces in my parameters that I try to send into msdeploy from a powershell script.
还有很多其他相关文章但他们都没有解决问题。
使用Power Shell和MSDeploy时遇到的问题。
类似的SO问题不起作用:如何使用带空格和引号的参数在powershell中运行exe文件
PowerShell BUG: 执行需要引号和变量的命令实际上是不可能
另一个SO问题不起作用:在PowerShell 2.0中传递参数
There are a number of other related articles but none of them solve the problem.
Problems Using Power Shell And MSDeploy.
Similar SO issue that doesn't work: How to run exe in powershell with parameters with spaces and quotes
PowerShell BUG: Executing commands which require quotes and variables is practically impossible
Another SO issue that doesn't work:Passing parameters in PowerShell 2.0
当我使其变得更复杂时,成功然后失败的最简单的例子就是转储默认的网络坐标e。
The simplest example that succeeds and then fails when I make it more complicated is just dumping the default web site.
$ msdeploy =C:\Program Files \IIS\Microsoft Web Deploy\msdeploy.exe
&$ msdeploy -verb:dump -source:appHostConfig =`'默认网站'' - verbose
== SUCCESS
$msdeploy = "C:\Program Files\IIS\Microsoft Web Deploy\msdeploy.exe"
&$msdeploy -verb:dump -source:appHostConfig=`'default web site`' -verbose
==SUCCESS
这一个?
$ sitename =默认网站
&$ msdeploy -verb:dump -source:appHostConfig = $ sitename - 详细
==失败,出现以下错误
msdeploy.exe:错误:无法识别的参数' - source:appHostConfig = default'。所有参数必须以 - 开头。
在C:\ xxxx \ test.ps1:122 char:6
+&
+ CategoryInfo:NotSpecified :(错误:Unrecogn .. .begin with - :String)[],RemoteException
+ FullyQualifiedErrorId:NativeCommandError
错误计数:1。
$sitename="default web site"
&$msdeploy -verb:dump -source:appHostConfig=$sitename -verbose
==FAIL with the following error
msdeploy.exe : Error: Unrecognized argument '"-source:"appHostConfig=default'. All arguments must begin with "-".
At C:\xxx\test.ps1:122 char:6
+ &
+ CategoryInfo : NotSpecified: (Error: Unrecogn...begin with "-".:String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError
Error count: 1.
以下变化也失败
#FAIL
$ sitename =`'默认网站''
$ sitename =`'默认网站`'
$ sitename =`''默认网站''
$ sitename =默认网站
< br> $ sitename ='默认网站'
The following variations have also failed
#FAIL
$sitename=`'default web site`'
$sitename=`'"default web site"`'
$sitename="`'default web site`'"
$sitename="default web site"
$sitename="'default web site'"
&$ 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
&$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。
I'm at a loss. Everyone I work with is at a loss. Seriously this sucks. I loved Powershell. I loved msdeploy. I can't say that I love putting them together. It looks like it may have been easier to focus on the API instead of the cli.
Emperor XLII建议的字符串数组中的参数运行良好。以下文章介绍了另一种解决方案:使用MSDeploy和PowerShell的试验和磨难
The parameters in the string array suggested by Emperor XLII works well. An alternative solution is presented in the following article: 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 )
}
推荐答案
使用 Keith的答案 如何使用带空格和引号的参数在powershell中运行exe 你链接的问题,运行 echoargs -verb:dump -source:appHostConfig = $ sitename -verbose
给了我这个输出:
Using the technique from Keith's answer to How to run exe in powershell with parameters with spaces and quotes question you linked to, running echoargs -verb:dump -source:appHostConfig=$sitename -verbose
gave me this output:
Arg 0 is <-verb:dump>
Arg 1 is <-source:appHostConfig=default>
Arg 2 is <web>
Arg 3 is <site>
Arg 4 is <-verbose>
这将解释 appHostConfig = default $ c $的无效参数c>
msdeploy
正在看到。
运行 echoargs -verb:dump-source :appHostConfig = $ sitename-verbose
, $ sitename =默认网站
,似乎会产生所需的参数:
Running echoargs -verb:dump "-source:appHostConfig=$sitename" -verbose
, with $sitename = "default web site"
, appears to result in the desired arguments:
Arg 0 is <-verb:dump>
Arg 1 is <-source:appHostConfig=default web site>
Arg 2 is <-verbose>
虽然从您的列表中可以看出这对您不起作用。
Though from your list, it appears that this did not work for you.
您可能尝试的另一种方法是在数组中构建参数列表,powershell可以自动转义。例如,它提供与上面相同的输出:
Another method you might try is building up the list of arguments in an array, which powershell can automatically escape. For example, this gives the same output as above:
[string[]]$msdeployArgs = @(
"-verb:dump",
"-source:appHostConfig=$sitename",
"-verbose"
)
echoargs $msdeployArgs
这篇关于当参数有空格时,如何从powershell调用msdeploy?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!