如何在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;",computername=10.10.10.10,username=administrator,password=adminpass"


当前回答

我有以下代码在我的笔记本电脑上完美地工作:

& $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"

然后,当我试图直接在一台服务器上运行时,我开始得到这些错误“无法识别的参数……等....所有参数必须以“-”开头。

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

升级Powershell到最新版本后,它又开始工作了。

其他回答

所以,我遇到了一个类似的问题,我选择用这种方式来解决它:

用反撇号(')转义引号(")字符 用引号包围新表达式(") 使用调用操作符(&),对新字符串发出invoke-expression命令

示例解决方案:

&{调用-表达式"C:\程序文件\IIS\Microsoft Web Deploy\msdeploy.exe -verb:sync -source:dbfullsql= ' "数据源=mysource;集成安全=false;用户ID=sa;Pwd=sapass!;数据库=mydb; ' " -dest:dbfullsql= ' "数据源=.\mydestsource;集成安全=false;用户ID=sa;Pwd=sapass!;数据库=mydb; ' ",计算机名=10.10.10.10,用户名=管理员,密码=adminpass ' "}

这招对我很管用:

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

关键似乎是整个命令都用外引号括起来,“&”&用于指定正在执行的另一个子命令文件,然后最后在路径/文件名周围转义(双-双-)引号,其中有空格。

这也是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

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

…> \ file.exe。

or

……> \路径\ \ file.exe

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

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

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

这基本上与Akira的答案相同,但如果您动态地构建命令参数并将它们放入变量中,则可以工作。

对于可执行文件名称,可以使用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

Jeffery Hicks报道

其他答案针对这些论点。