当参数有空格时,如何从powershell调用msdeploy? [英] How do you call msdeploy from powershell when the parameters have spaces?

查看:176
本文介绍了当参数有空格时,如何从powershell调用msdeploy?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在参数中遇到空格问题,我尝试从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 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆