如何在PowerShell中使用带有空格和引号的参数运行EXE文件


331

如何在PowerShell中运行以下命令?

C:\ Program Files \ IIS \ Microsoft Web Deploy \ msdeploy.exe -verb:sync -source:dbfullsql =“数据源= mysource;集成安全性= false;用户ID = sa; Pwd = sapass !;数据库= mydb;” -dest:dbfullsql =“ Data Source =。\ mydestsource; Integrated Security = false; User ID = sa; Pwd = sapass!; Database = mydb;”,计算机名= 10.10.10.10,用户名= administrator,密码= adminpass“



如果您的意思是“在PowerShell中”(我解释为“在现有PowerShell提示中”),则可以轻松地采用以下示例来满足您的需要。请注意,无需将命令与其参数分开: # Show any available updates to globally installed npm packages using the npm-check-updates tool [string] $cmd = 'ncu -g' Write-Verbose -Message $cmd Invoke-Command -ScriptBlock ([ScriptBlock]::Create($cmd))
user3785010

我不知道如何使用“ mini-markdown”来编辑上面的注释,以使每一行代码都显示在单独的行上,并且编辑原始注释的5分钟时间限制已过期。如果现在有人知道要使用“ mini-Markdown”解决问题,我将以更具可读性的形式重新发布。第一行应该是以下内容:#使用npm-check-updates工具显示全局安装的npm软件包的所有可用更新
user3785010 2015年

Answers:


346

当PowerShell看到以字符串开头的命令时,它仅对字符串进行求值,即通常将其回显到屏幕,例如:

PS> "Hello World"
Hello World

如果希望PowerShell将字符串解释为命令名称,请使用调用运算符(&),如下所示:

PS> & 'C:\Program Files\IIS\Microsoft Web Deploy\msdeploy.exe'

之后,您可能只需要引用包含空格和/或引用字符的参数/参数对。当您使用复杂的命令行参数调用像这样的EXE文件时,拥有一个将向您展示PowerShell如何将参数发送到EXE文件的工具通常非常有帮助。在PowerShell的社区扩展有这样的工具。它称为echoargs。您只需用echoargs替换EXE文件-保留所有参数,这将向您展示EXE文件如何接收参数,例如:

PS> echoargs -verb:sync -source:dbfullsql="Data Source=mysource;Integrated Security=false;User ID=sa;Pwd=sapass!;Database=mydb;" -dest:dbfullsql="Data Source=.\mydestsource;Integrated Security=false;User ID=sa;Pwd=sapass!;Database=mydb;",computername=10.10.10.10,username=administrator,password=adminpass

Arg 0 is <-verb:sync>
Arg 1 is <-source:dbfullsql=Data>
Arg 2 is <Source=mysource;Integrated>
Arg 3 is <Security=false;User>
Arg 4 is <ID=sa;Pwd=sapass!;Database=mydb;>
Arg 5 is <-dest:dbfullsql=Data>
Arg 6 is <Source=.\mydestsource;Integrated>
Arg 7 is <Security=false;User>
Arg 8 is <ID=sa;Pwd=sapass!;Database=mydb; computername=10.10.10.10 username=administrator password=adminpass>

使用echoargs可以尝试直到正确为止,例如:

PS> echoargs -verb:sync "-source:dbfullsql=Data Source=mysource;Integrated Security=false;User ID=sa;Pwd=sapass!;Database=mydb;"
Arg 0 is <-verb:sync>
Arg 1 is <-source:dbfullsql=Data Source=mysource;Integrated Security=false;User ID=sa;Pwd=sapass!;Database=mydb;>

事实证明,在维护连接字符串周围的双引号之前,我付出了很大的努力。显然这不是必需的,因为即使cmd.exe也会将其删除。

顺便说一句,向PowerShell团队致敬。如果您需要将内部双引号保留在适当的位置,它们对向我展示单引号和双引号的具体含义很有帮助。:-)他们也意识到这是一个痛苦的领域,但是受特定问题影响的人数驱动。如果这是您的不便,请对本PowerShell Bug提交进行投票。

有关PowerShell如何解析的更多信息,请查看我的有效PowerShell博客系列 -特别是项目10-“了解PowerShell解析模式”

2012年4月4日更新:这种情况在PowerShell V3中变得更容易处理。有关详细信息,请参见此博客文章


1
如果使用第二个示例,则会出现此错误:错误:无法识别的参数'“ -source:dbfullsql =”“” Data“。所有参数必须以“-”开头。
Vans

2
对不起,我听不懂。我看到,目前有6个人赞成该答案,因此我遗漏了一些明显的内容,但是实际答案是什么?是否有特殊的规则要知道在PowerShell中带有空格的参数,还是只是建议使用EchoArgs进行个案处理?
Tyler Collier

引用参数通常就足够了,但并非总是如此。在某些情况下,使用echoargs可以指示PowerShell在将参数传递到EXE之前如何解释参数。
基思·希尔

1
您知道如何在.bat文件中执行此操作吗?我& 'C:\Program Files\Sublime Text 3\sublime_text.exe'直接在控制台中尝试并且可以正常工作,但是在批处理文件中,我收到一条错误消息,提示“&这次是意外的。”
2014年

没关系。发现它:START C:\"Program Files"\"Sublime Text 3"\sublime_text.exe
Joe Zim 2014年

61

只需在.exe名称前添加运算符。这是在静默模式下安装SQL Server Express的命令:

$fileExe = "T:\SQLEXPRADV_x64_ENU.exe"
$CONFIGURATIONFILE = "T:\ConfSetupSql2008Express.ini"

& $fileExe  /CONFIGURATIONFILE=$CONFIGURATIONFILE

53

我在命令和参数中都有空格,这对我有用:

$Command = "E:\X64\Xendesktop Setup\XenDesktopServerSetup.exe"
$Parms = "/COMPONENTS CONTROLLER,DESKTOPSTUDIO,DESKTOPDIRECTOR,LICENSESERVER,STOREFRONT /PASSIVE /NOREBOOT /CONFIGURE_FIREWALL /NOSQL"

$Prms = $Parms.Split(" ")
& "$Command" $Prms

它与Akira的答案基本相同,但是如果您动态构建命令参数并将其放在变量中,则此方法有效。


2
恕我直言,这是最好的!没有base64,没有奇怪的-%语法,可以切换替换,普通的powershell替换规则,没有混淆,非常易读。
AnneTheAgile 2015年

1
这行不通。如果您的参数中包含路径名,则路径名将分为多个参数。
BrainSlugs83

1
好答案。但是,它可以在参数中使用引号吗?
山本彰(Akira Yamamoto)

在所有其他方法均有效后,请尝试此操作。,还可以使用PowerShell的扩展EchoArgs
杰里米·汤普森

34

这为我工作:

& 'D:\Server\PSTools\PsExec.exe' @('\\1.1.1.1', '-accepteula', '-d', '-i', $id, '-h', '-u', 'domain\user', '-p', 'password', '-w', 'C:\path\to\the\app', 'java', '-jar', 'app.jar')

只需将路径或连接字符串放在一个数组项中,然后将其他内容分别拆分在一个数组项中。

这里还有很多其他选项:https : //social.technet.microsoft.com/wiki/contents/articles/7703.powershell-running-executables.aspx

Microsoft应该使这种方式更简单并且与命令提示符语法兼容。


2
数组绝对是最好的选择-这对我来说非常有用。除了我传递数组变量是因为我的参数是动态的。谢谢。
乔恩·巴克

恕我直言最好的解决方案
Vasin Yuriy 19/12/27

24

您可以使用多种方法来执行此操作。

还有其他方法,例如使用呼叫操作符(),Invoke-Expression cmdlet等。但是,它们被认为是不安全的。Microsoft建议使用Start-Process

方法一

一个简单的例子

Start-Process -NoNewWindow -FilePath "C:\wamp64\bin\mysql\mysql5.7.19\bin\mysql" -ArgumentList "-u root","-proot","-h localhost"

就你而言

Start-Process -NoNewWindow -FilePath "C:\Program Files\IIS\Microsoft Web Deploy\msdeploy.exe" -ArgumentList "-verb:sync","-source:dbfullsql=`"Data Source=mysource;Integrated Security=false;User ID=sa;Pwd=sapass!;Database=mydb;`"","-dest:dbfullsql=`"Data Source=.\mydestsource;Integrated Security=false;User ID=sa;Pwd=sapass!;Database=mydb;`"","computername=10.10.10.10","username=administrator","password=adminpass"

在此方法中,您使用逗号分隔ArgumentList中的每个参数。

方法2

简单的例子

Start-Process -NoNewWindow -FilePath "C:\wamp64\bin\mysql\mysql5.7.19\bin\mysql" -ArgumentList "-u root -proot -h localhost"

就你而言

Start-Process -NoNewWindow -FilePath "C:\Program Files\IIS\Microsoft Web Deploy\msdeploy.exe" -ArgumentList "-verb:sync -source:dbfullsql=`"Data Source=mysource;Integrated Security=false;User ID=sa;Pwd=sapass!;Database=mydb;`" -dest:dbfullsql=`"Data Source=.\mydestsource;Integrated Security=false;User ID=sa;Pwd=sapass!;Database=mydb;`",computername=10.10.10.10,username=administrator,password=adminpass"

这种方法比较容易,因为它允许一次输入您的参数。

请注意,在powershell中用字符串表示引号(“)时,应插入重音符(`)(这是美国键盘上Tab键上方的键)。

-NoNewWindow 参数用于在当前控制台窗口中显示新进程。默认情况下,Windows PowerShell将打开一个新窗口。

参考:Powershell /脚本/启动过程


简单永远赢!谢谢。
Mike Casas

感谢您对转义引号的最后说明!
保罗


13

如果有人想知道如何仅运行可执行文件:

.....>。\ file.exe

要么

......>完整\路径\到\ file.exe


2
这应该是该问题的答案,这就是我们使用“从PowerShell启动EXE”关键字进行搜索时要寻找的内容。谢谢 !
Jean-Daniel Gasser

2
用参数运行怎么样?
SereneWizard,

1
@SereneWizard好吧,在.exe之后添加它们,并在它们之间留一个空格。例如:。\ file.exe param1 param2 param3
darkgaze

9

我可以使用以下方法使类似的命令正常工作:

msdeploy.exe -verb=sync "-source=dbFullSql=Server=THESERVER;Database=myDB;UID=sa;Pwd=saPwd" -dest=dbFullSql=c:\temp\test.sql

对于您的命令(现在不是很有帮助),事情看起来像这样:

msdeploy.exe -verb=sync "-source=dbfullsql=Server=mysource;Trusted_Connection=false;UID=sa;Pwd=sapass!;Database=mydb;" "-dest=dbfullsql=Server=mydestsource;Trusted_Connection=false;UID=sa;Pwd=sapass!;Database=mydb;",computername=10.10.10.10,username=administrator,password=adminpass

关键点是:

  • 在源参数周围使用引号,并在连接字符串周围删除嵌入的引号
  • 在构建没有空格的SQL连接字符串时,请使用备用键名。例如,使用“ UID”代替“用户ID”,用“服务器”代替“数据源”,用“ Trusted_Connection”代替“集成安全性”,依此类推。从连接字符串中删除所有空格后,我才能使它正常工作。

我没有尝试在命令行末尾添加“ computername”部分,但希望此信息将帮助其他阅读此信息的人更接近他们想要的结果。


2
我尝试了所有其他答案,但这是唯一对我有用的答案!感谢您提供此替代路径。
Sentient'2

6

PowerShell V3中的新转义字符串,引用自V3新语言功能

从Cmd.exe更轻松地重用命令行

Web上充满了为Cmd.exe编写的命令行。这些命令行在PowerShell中通常可以正常工作,但是当它们包含某些字符(例如,分号(;),美元符号($)或花括号)时,您必须进行一些更改,可能添加一些引号。这似乎是许多轻微头痛的根源。

为了帮助解决这种情况,我们添加了一种新的方法来“逃避”命令行的解析。如果您使用魔术参数-%,我们将停止对命令行的常规分析,并切换到更简单的命令。我们不匹配报价。我们不止于分号。我们不扩展PowerShell变量。如果您使用Cmd.exe语法(例如%TEMP%),我们会扩展环境变量。除此之外,直到行(或管道,如果是管道)末尾的参数都按原样传递。这是一个例子:

PS> echoargs.exe --% %USERNAME%,this=$something{weird}
Arg 0 is <jason,this=$something{weird}>

6

您可以使用:

Start-Process -FilePath "C:\Program Files\IIS\Microsoft Web Deploy\msdeploy.exe" -ArgumentList "-verb:sync -source:dbfullsql="Data Source=mysource;Integrated Security=false;User ID=sa;Pwd=sapass!;Database=mydb;" -dest:dbfullsql="Data Source=.\mydestsource;Integrated Security=false;User ID=sa;Pwd=sapass!;Database=mydb;",computername=10.10.10.10,username=administrator,password=adminpass"

根据帮助指南,此处要注意的关键是FilePath必须位于位置0。要调用Commandlet的帮助指南,只需输入Get-Help <Commandlet-name> -Detailed。在这种情况下为Get-Help Start-Process -Detailed


5

我尝试了所有建议,但仍无法msiexec.exe使用包含空格的参数运行。所以我的解决方案最终使用System.Diagnostics.ProcessStartInfo

# can have spaces here, no problems
$settings = @{
  CONNECTION_STRING = "... ..."
  ENTITY_CONTEXT = "... ..."
  URL = "..."
}

$settingsJoined = ($settings.Keys | % { "$_=""$($settings[$_])""" }) -join " "
$pinfo = New-Object System.Diagnostics.ProcessStartInfo
$pinfo.WorkingDirectory = $ScriptDirectory
$pinfo.FileName = "msiexec.exe"
$pinfo.RedirectStandardError = $true
$pinfo.RedirectStandardOutput = $true
$pinfo.UseShellExecute = $false
$pinfo.Arguments = "/l* install.log /i installer.msi $settingsJoined"
$p = New-Object System.Diagnostics.Process
$p.StartInfo = $pinfo
$p.Start() | Out-Null
$p.WaitForExit()
$stdout = $p.StandardOutput.ReadToEnd()

3

这为我工作:

PowerShell.exe -Command "& ""C:\Some Script\Path With Spaces.ps1"""

关键似乎是整个命令都用引号引起来,“&”号用于指定另一个正在执行的子命令文件,然后最后在路径/文件名前后用空格将引号转义(double-double-)首先要执行。

这也解决了MS连接问题的唯一解决方法,即-File不回传非零返回码,并且-Command是唯一的选择。但是直到现在,人们一直认为-Command的局限性在于它不支持空格。我也更新了该反馈项。

http://connect.microsoft.com/PowerShell/feedback/details/750653/powershell-exe-doesn-t-return-correct-exit-codes-when-using-the-file-option


1
这与ops问题无关,他特别询问如何在powershell帖子中运行长命令。不是如何在文件路径中运行带有空格的Powershell脚本。
leinad13 '16

阅读问题的标题,空格是问题,而不是长度。这是对此类问题的一个有效答案,因此值得分享。您是否遇到过同样的问题并实际尝试过?如果您想改进它,请提交包含问题中实际命令的编辑,我将接受。
托尼·沃尔

3

另一种选择是使用Base64编码的命令开关:

powershell -EncodedCommand "QwA6AFwAUAByAG8AZwByAGEAbQAgAEYAaQBsAGUAcwBcAEkASQBTAFwATQBpAGMAcgBvAHMAbwBmAHQAIABXAGUAYgAgAEQAZQBwAGwAbwB5AFwAbQBzAGQAZQBwAGwAbwB5AC4AZQB4AGUAIAAtAHYAZQByAGIAOgBzAHkAbgBjACAALQBzAG8AdQByAGMAZQA6AGQAYgBmAHUAbABsAHMAcQBsAD0AIgBEAGEAdABhACAAUwBvAHUAcgBjAGUAPQBtAHkAcwBvAHUAcgBjAGUAOwBJAG4AdABlAGcAcgBhAHQAZQBkACAAUwBlAGMAdQByAGkAdAB5AD0AZgBhAGwAcwBlADsAVQBzAGUAcgAgAEkARAA9AHMAYQA7AFAAdwBkAD0AcwBhAHAAYQBzAHMAIQA7AEQAYQB0AGEAYgBhAHMAZQA9AG0AeQBkAGIAOwAiACAALQBkAGUAcwB0ADoAZABiAGYAdQBsAGwAcwBxAGwAPQAiAEQAYQB0AGEAIABTAG8AdQByAGMAZQA9AC4AXABtAHkAZABlAHMAdABzAG8AdQByAGMAZQA7AEkAbgB0AGUAZwByAGEAdABlAGQAIABTAGUAYwB1AHIAaQB0AHkAPQBmAGEAbABzAGUAOwBVAHMAZQByACAASQBEAD0AcwBhADsAUAB3AGQAPQBzAGEAcABhAHMAcwAhADsARABhAHQAYQBiAGEAcwBlAD0AbQB5AGQAYgA7ACIALABjAG8AbQBwAHUAdABlAHIAbgBhAG0AZQA9ADEAMAAuADEAMAAuADEAMAAuADEAMAAsAHUAcwBlAHIAbgBhAG0AZQA9AGEAZABtAGkAbgBpAHMAdAByAGEAdABvAHIALABwAGEAcwBzAHcAbwByAGQAPQBhAGQAbQBpAG4AcABhAHMAcwAiAA=="

解码后,您会看到它是OP的原始代码段,其中保留了所有参数和双引号。

powershell.exe -EncodedCommand

Accepts a base-64-encoded string version of a command. Use this parameter
to submit commands to Windows PowerShell that require complex quotation
marks or curly braces.

原始命令:

 C:\Program Files\IIS\Microsoft Web Deploy\msdeploy.exe -verb:sync -source:dbfullsql="Data Source=mysource;Integrated Security=false;User ID=sa;Pwd=sapass!;Database=mydb;" -dest:dbfullsql="Data Source=.\mydestsource;Integrated Security=false;User ID=sa;Pwd=sapass!;Database=mydb;",computername=10.10.10.10,username=administrator,password=adminpass"

编码为Base64时,它变为:

QwA6AFwAUAByAG8AZwByAGEAbQAgAEYAaQBsAGUAcwBcAEkASQBTAFwATQBpAGMAcgBvAHMAbwBmAHQAIABXAGUAYgAgAEQAZQBwAGwAbwB5AFwAbQBzAGQAZQBwAGwAbwB5AC4AZQB4AGUAIAAtAHYAZQByAGIAOgBzAHkAbgBjACAALQBzAG8AdQByAGMAZQA6AGQAYgBmAHUAbABsAHMAcQBsAD0AIgBEAGEAdABhACAAUwBvAHUAcgBjAGUAPQBtAHkAcwBvAHUAcgBjAGUAOwBJAG4AdABlAGcAcgBhAHQAZQBkACAAUwBlAGMAdQByAGkAdAB5AD0AZgBhAGwAcwBlADsAVQBzAGUAcgAgAEkARAA9AHMAYQA7AFAAdwBkAD0AcwBhAHAAYQBzAHMAIQA7AEQAYQB0AGEAYgBhAHMAZQA9AG0AeQBkAGIAOwAiACAALQBkAGUAcwB0ADoAZABiAGYAdQBsAGwAcwBxAGwAPQAiAEQAYQB0AGEAIABTAG8AdQByAGMAZQA9AC4AXABtAHkAZABlAHMAdABzAG8AdQByAGMAZQA7AEkAbgB0AGUAZwByAGEAdABlAGQAIABTAGUAYwB1AHIAaQB0AHkAPQBmAGEAbABzAGUAOwBVAHMAZQByACAASQBEAD0AcwBhADsAUAB3AGQAPQBzAGEAcABhAHMAcwAhADsARABhAHQAYQBiAGEAcwBlAD0AbQB5AGQAYgA7ACIALABjAG8AbQBwAHUAdABlAHIAbgBhAG0AZQA9ADEAMAAuADEAMAAuADEAMAAuADEAMAAsAHUAcwBlAHIAbgBhAG0AZQA9AGEAZABtAGkAbgBpAHMAdAByAGEAdABvAHIALABwAGEAcwBzAHcAbwByAGQAPQBhAGQAbQBpAG4AcABhAHMAcwAiAA==

以下是在家复制的方法:

$command = 'C:\Program Files\IIS\Microsoft Web Deploy\msdeploy.exe -verb:sync -source:dbfullsql="Data Source=mysource;Integrated Security=false;User ID=sa;Pwd=sapass!;Database=mydb;" -dest:dbfullsql="Data Source=.\mydestsource;Integrated Security=false;User ID=sa;Pwd=sapass!;Database=mydb;",computername=10.10.10.10,username=administrator,password=adminpass"'
$bytes = [System.Text.Encoding]::Unicode.GetBytes($command)
$encodedCommand = [Convert]::ToBase64String($bytes)
$encodedCommand

#  The clip below copies the base64 string to your clipboard for right click and paste.
$encodedCommand | Clip

3

您可以以不同的方式在Powershell中运行exe文件。例如,如果您要运行unrar.exe并提取一个.rar文件,则可以在powershell中编写以下代码:

$extract_path = "C:\Program Files\Containing folder";
$rar_to_extract = "C:\Path_to_arch\file.rar"; #(or.exe if its a big file)  
C:\Path_here\Unrar.exe x -o+ -c- $rar_to_extract $extract_path;

但是有时候,这是行不通的,因此您必须使用如上所示的&参数:例如,使用vboxmanage.exe(用于管理virtualbox虚拟机的工具),您必须像这样在字符串之外调用参数,并且不要使用引号:

> $vmname = "misae_unrtes_1234123"; #(name too long, we want to change this)
> & 'C:\Program Files\Oracle\VirtualBox\VBoxManage.exe' modifyvm $vmname --name UBUNTU;

如果只想将Winrar存档文件称为.exe文件,则还可以使用invoke-command cmdlet和Silent参数/ S解压缩(它将自身解压缩到与压缩位置相同的文件夹中)。

> Invoke-Command -ScriptBlock { C:\Your-path\archivefile.exe /S };

因此,有几种方法可以在Powershell中运行带有参数的.exe文件。

有时,必须找到一种解决方法以使其正常运行,这可能需要进一步的努力和痛苦:)取决于.exe的编译方式或使其创建者身份的方式。


1

我使用这种简单,干净而有效的方法。

我将参数放在数组中,每行1个。这样,很容易阅读和编辑。然后,我使用一个简单的技巧将双引号内的所有参数传递给具有1个单参数的函数。这将它们(包括数组)展平为单个字符串,然后我使用PS的“ Invoke-Expression”执行该字符串。该伪指令专门用于将字符串转换为可运行命令。效果很好:

                    # function with one argument will flatten 
                    # all passed-in entries into 1 single string line
Function Execute($command) {
                    # execute:
    Invoke-Expression $command;
                    # if you have trouble try:
  # Invoke-Expression "& $command";
                    # or if you need also output to a variable
  # Invoke-Expression $command | Tee-Object -Variable cmdOutput;

}

#  ... your main code here ...

               # The name of your executable app
$app = 'my_app.exe';
               # List of arguments:
               #    Notice the type of quotes - important !
               #    Those in single quotes are normal strings, like 'Peter'
$args = 'arg1',
        'arg2',
        $some_variable,
        'arg4',
        "arg5='with quotes'",
        'arg6',
        "arg7 \ with \ $other_variable",
        'etc...';

               # pass all arguments inside double quotes
Execute "$app $args";

1

我在笔记本电脑上可以正常运行以下代码:

& $msdeploy `
-source:package="$publishFile" `
-dest:auto,computerName="$server",includeAcls="False",UserName="$username",Password="$password",AuthType="$auth" `
-allowUntrusted  `
-verb:sync  `
-enableRule:DoNotDeleteRule `
-disableLink:AppPoolExtension  `
-disableLink:ContentExtension  `
-disableLink:CertificateExtension  `
-skip:objectName=filePath,absolutePath="^(.*Web\.config|.*Environment\.config)$" `
-setParam:name=`"IIS Web Application Name`",value="$appName"

然后,当我尝试直接在一台服务器上运行时,我开始遇到这些错误 "Unrecognized argument ...etc.... All arguments must begin with "-". "

在尝试了所有可能的解决方法(没有成功)之后,我发现服务器(Windows 2008 R2)上的Powershell是3.0版,而我的笔记本电脑是5.0版。(您可以使用“ $ PSVersionTable”查看版本)。

经过升级Powershell的到最新的版本,它开始再次合作。


1

Cmd可以处理运行带引号的exe,但Powershell不能。因为我没有EXE,所以我将只处理EXE本身的运行。如果您确实需要在外部命令的参数中发送双引号,那么这是另一个在其他地方讨论过的问题。

1)将exe文件夹添加到您的路径中,也许在您的$ profile中

$env:path += ';C:\Program Files\IIS\Microsoft Web Deploy\'
msdeploy

2)反引号:

C:\Program` Files\IIS\Microsoft` Web` Deploy\msdeploy.exe

0

因此,我遇到了一个类似的问题,而是选择以这种方式解决它:

  1. 使用反引号(`)转义引号(“)字符
  2. 用引号(“)括住新表达式
  3. 使用呼叫运算子(&),invoke-expression在新字串上发出指令

解决方案示例:

&{invoke-expression“ C:\ Program Files \ IIS \ Microsoft Web Deploy \ msdeploy.exe -verb:sync -source:dbfullsql =`”数据源= mysource;集成安全性= false;用户ID = sa; Pwd = sapass !; Database = mydb;`“ -dest:dbfullsql =`” Data Source =。\ mydestsource; Integrated Security = false; User ID = sa; Pwd = sapass!; Database = mydb;`“,计算机名称= 10.10.10.10,用户名=管理员,密码= adminpass`“”}


0

对于可执行文件名称,可以使用new-alias cmdlet避免处理空格或需要将可执行文件添加到$ PATH环境。

PS> new-alias msdeploy "C:\Program Files\IIS\Microsoft Web Deploy\msdeploy.exe"
PS> msdeploy ...

要列出或修改PS别名,请参见

PS> get-alias
PS> set-alias

杰弗里·希克斯的文章

其他答案解决了这些论点。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.